dare 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/bin/dare +6 -7
- data/examples/tutorial/assets/Beep.wav +0 -0
- data/examples/tutorial/assets/Space.png +0 -0
- data/examples/tutorial/assets/Star.png +0 -0
- data/examples/tutorial/assets/Starfighter.png +0 -0
- data/lib/dare.rb +10 -11
- data/lib/dare/font.rb +15 -10
- data/lib/dare/image.rb +204 -10
- data/lib/dare/sound.rb +20 -8
- data/lib/dare/window.rb +56 -11
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjhhODdlYTdmMTk1MTg0YzI1YTI4NjUwNmY1OWFlZTViMzk0OWJkNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YzhhMzYxZGNlOTBlNjg2MTMzYWFlZmIxYjRhZWI5YTg3YWM0ZmQxYg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2E5OTU3YmQ0NjU1MDFlZjNlOTAxMTQ2N2NjZTg3Y2M5OTk3MzE3NzM3Yzg4
|
10
|
+
ODcxMDE1ODIzN2ZmZTk4MjQ3ZjU5ZTdiOGVkZTMyZWNkMjVhMmIwMmFmOTFj
|
11
|
+
MDc4NzRiN2Q0YzIwYjY5MjdmZWEzMGNkOTNmNjc5ZjQ5YWY3NTU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YWJjMDRhMjYzMzMzNWI4MmZkMWRlNTVmY2M2ODI2ODVkZDMxYjg0ZGE2NDI1
|
14
|
+
MzJjYzY1NTBhOThlYThlMDlhZTE0MjNlNmMwM2UyOWMzODRlNDY1ZmU2MWMy
|
15
|
+
ZmRlYmM2YWZlN2U3NWQ5Yzc5ZGVjZTUxZmYxNGIzNjE4N2M4YTg=
|
data/bin/dare
CHANGED
@@ -6,19 +6,20 @@ class DareCLI < Thor
|
|
6
6
|
desc "new", "creates a new app"
|
7
7
|
def new(app_name)
|
8
8
|
add_file("#{app_name}/Gemfile") do
|
9
|
-
"gem 'dare', '0.
|
9
|
+
"gem 'dare', '0.2.0'
|
10
10
|
gem 'opal', '0.7.0beta3'
|
11
11
|
gem 'opal-jquery', '0.3.0beta1'"
|
12
12
|
end
|
13
13
|
add_file "#{app_name}/Rakefile" do
|
14
14
|
"desc \"Build #{app_name}.js\"
|
15
15
|
task :build do
|
16
|
-
gem 'dare', '0.
|
16
|
+
gem 'dare', '0.2.0'
|
17
17
|
gem 'opal', '0.7.0beta3'
|
18
18
|
gem 'opal-jquery', '0.3.0beta1'
|
19
19
|
require 'opal'
|
20
20
|
require 'opal-jquery'
|
21
21
|
Opal::Processor.source_map_enabled = false
|
22
|
+
Opal::Processor.inline_operators_enabled = true
|
22
23
|
env = Sprockets::Environment.new
|
23
24
|
Opal.paths.each do |path|
|
24
25
|
env.append_path path
|
@@ -32,9 +33,7 @@ task :build do
|
|
32
33
|
end"
|
33
34
|
end
|
34
35
|
add_file "#{app_name}/#{app_name}.rb" do
|
35
|
-
"require '
|
36
|
-
require 'opal-jquery'
|
37
|
-
require 'dare'
|
36
|
+
"require 'dare'
|
38
37
|
|
39
38
|
class #{app_name[0].upcase + app_name[1..-1]} < Dare::Window
|
40
39
|
|
@@ -43,11 +42,11 @@ class #{app_name[0].upcase + app_name[1..-1]} < Dare::Window
|
|
43
42
|
end
|
44
43
|
|
45
44
|
def draw
|
46
|
-
#code that
|
45
|
+
#code that draws every frame
|
47
46
|
end
|
48
47
|
|
49
48
|
def update
|
50
|
-
#code that runs every
|
49
|
+
#code that runs every update_interval
|
51
50
|
end
|
52
51
|
|
53
52
|
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/dare.rb
CHANGED
@@ -1,17 +1,11 @@
|
|
1
|
+
require 'opal' #this will be removed when 0.7.0 is released
|
1
2
|
require 'opal-jquery'
|
2
|
-
|
3
|
-
require "dare/canvas.rb"
|
4
|
-
require "dare/font.rb"
|
5
|
-
require "dare/image.rb"
|
6
|
-
require "dare/keyboard_constants.rb"
|
7
|
-
require "dare/sound.rb"
|
8
|
-
require "dare/sprite.rb"
|
9
|
-
require "dare/window.rb"
|
3
|
+
require_tree 'dare'
|
10
4
|
|
11
5
|
module Dare
|
12
6
|
|
13
7
|
# returns the current version of this gem
|
14
|
-
VERSION = "0.
|
8
|
+
VERSION = "0.2.0"
|
15
9
|
|
16
10
|
# returns the magnitude of the horizontal component of a vector
|
17
11
|
# at some angle and some magnitude where the angle is in degrees
|
@@ -22,7 +16,7 @@ module Dare
|
|
22
16
|
# Dare.offset_x(45, 10) # returns 10 times the square root of 2
|
23
17
|
#
|
24
18
|
def self.offset_x(angle, magnitude)
|
25
|
-
`#{magnitude}*Math.cos(
|
19
|
+
`#{magnitude}*Math.cos(-#{angle}*Math.PI/180.0)`
|
26
20
|
end
|
27
21
|
|
28
22
|
# returns the magnitude of the vertical component of a vector
|
@@ -34,7 +28,7 @@ module Dare
|
|
34
28
|
# Dare.offset_y(45, 10) # returns 10 times the square root of 2
|
35
29
|
#
|
36
30
|
def self.offset_y(angle, magnitude)
|
37
|
-
`#{magnitude}*Math.sin(
|
31
|
+
`#{magnitude}*Math.sin(-#{angle}*Math.PI/180.0)`
|
38
32
|
end
|
39
33
|
|
40
34
|
# returns the number of milliseconds since the Unix epoch
|
@@ -43,6 +37,11 @@ module Dare
|
|
43
37
|
def self.ms
|
44
38
|
`(new Date()).getTime()`
|
45
39
|
end
|
40
|
+
|
41
|
+
def self.distance(x1, y1, x2, y2)
|
42
|
+
`Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))`
|
43
|
+
end
|
44
|
+
|
46
45
|
class << self
|
47
46
|
attr_accessor :default_canvas
|
48
47
|
end
|
data/lib/dare/font.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
1
|
module Dare
|
2
2
|
class Font
|
3
|
-
def initialize(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
def initialize(opts = {})
|
4
|
+
opts[:font] ||= "Arial"
|
5
|
+
opts[:canvas] ||= Dare.default_canvas
|
6
|
+
opts[:size] ||= 30
|
7
|
+
opts[:color] ||= "black"
|
8
|
+
|
9
|
+
@font = opts[:size].to_s + "px" + " " + opts[:font]
|
10
|
+
@canvas = opts[:canvas]
|
11
|
+
@color = opts[:color]
|
9
12
|
end
|
10
13
|
|
11
|
-
def draw(string = "", x =
|
14
|
+
def draw(string = "", x = 0, y = 0, opts = {})
|
12
15
|
%x{
|
13
|
-
#{@
|
14
|
-
#{@
|
15
|
-
#{@
|
16
|
+
#{@canvas.context}.font = #{@font} ;
|
17
|
+
#{@canvas.context}.textAlign = 'left';
|
18
|
+
#{@canvas.context}.textBaseline = 'top';
|
19
|
+
#{@canvas.context}.fillStyle = #{@color};
|
20
|
+
#{@canvas.context}.fillText(#{string}, #{x}, #{y});
|
16
21
|
}
|
17
22
|
end
|
18
23
|
end
|
data/lib/dare/image.rb
CHANGED
@@ -1,24 +1,218 @@
|
|
1
1
|
module Dare
|
2
2
|
|
3
|
-
#
|
3
|
+
# Represents an image which can be drawn to a canvas
|
4
4
|
#
|
5
5
|
class Image
|
6
6
|
|
7
|
-
#
|
8
|
-
# image = Dare::Image.new('some_image.png')
|
7
|
+
# Loads a new image resource from an absolute URL or relative path
|
9
8
|
#
|
10
|
-
|
9
|
+
# @param [String] path ("") the path to the resource
|
10
|
+
# @param [Hash] opts ({}) the options to create an image.
|
11
|
+
# @option opts [Dare::Canvas] :canvas (Dare.default_canvas) a canvas to refer to when drawing.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# Dare::Image.new('some_image.png')
|
15
|
+
#
|
16
|
+
# @example
|
17
|
+
# Dare::Image.new('https://www.google.com/images/srpr/logo11w.png', canvas: Dare::Canvas.new)
|
18
|
+
#
|
19
|
+
def initialize(path = "", opts = {})
|
20
|
+
opts[:canvas] ||= Dare.default_canvas
|
21
|
+
@path = path
|
11
22
|
@img = `new Image()`
|
12
23
|
`#{@img}.src = #{path}`
|
13
|
-
@
|
24
|
+
@canvas = opts[:canvas]
|
25
|
+
end
|
26
|
+
|
27
|
+
# The path or URL of the image
|
28
|
+
#
|
29
|
+
# @return [String]
|
30
|
+
#
|
31
|
+
def path
|
32
|
+
@path
|
33
|
+
end
|
34
|
+
|
35
|
+
def img
|
36
|
+
@img
|
37
|
+
end
|
38
|
+
|
39
|
+
# The width of the image in pixels
|
40
|
+
#
|
41
|
+
# @return [Integer]
|
42
|
+
#
|
43
|
+
def width
|
44
|
+
`#{@img}.width`
|
45
|
+
end
|
46
|
+
|
47
|
+
# The height of the image in pixels
|
48
|
+
#
|
49
|
+
# @return [Integer]
|
50
|
+
#
|
51
|
+
def height
|
52
|
+
`#{@img}.height`
|
53
|
+
end
|
54
|
+
|
55
|
+
# Draws image to a canvas at an `x` and `y` position. `x` and `y` represent the top-left corner of the image
|
56
|
+
#
|
57
|
+
# @param [Integer] x (0) x coordinate of top-left of image
|
58
|
+
# @param [Integer] y (0) y coordinate of top-left of image
|
59
|
+
# @param [Hash] opts ({}) the options to draw an image.
|
60
|
+
# @option opts [Dare::Canvas] :canvas (Dare.default_canvas) a canvas to refer to when drawing.
|
61
|
+
#
|
62
|
+
# @example
|
63
|
+
# image.draw(100, 200)
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# image.draw(10, 10, canvas: Dare::Canvas.new(width: 100, height: 100))
|
67
|
+
#
|
68
|
+
def draw(x = 0, y = 0, opts = {})
|
69
|
+
|
70
|
+
opts[:canvas] ||= @canvas
|
71
|
+
%x{
|
72
|
+
#{opts[:canvas].context}.drawImage(
|
73
|
+
#{@img},
|
74
|
+
#{x},
|
75
|
+
#{y}
|
76
|
+
);
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
# (see #draw)
|
81
|
+
# @note Used by Dare::ImageTile to draw a portion of an image to a canvas.
|
82
|
+
#
|
83
|
+
def draw_tile(x = 0, y = 0, opts = {})
|
84
|
+
|
85
|
+
opts[:canvas] ||= @canvas
|
86
|
+
opts[:sx] ||= 0
|
87
|
+
opts[:sy] ||= 0
|
88
|
+
opts[:swidth] ||= width - opts[:sx]
|
89
|
+
opts[:sheight] ||= height - opts[:sy]
|
90
|
+
opts[:dwidth] ||= opts[:swidth]
|
91
|
+
opts[:dheight] ||= opts[:sheight]
|
92
|
+
|
93
|
+
%x{
|
94
|
+
#{opts[:canvas].context}.drawImage(
|
95
|
+
#{@img},
|
96
|
+
#{opts[:sx]},
|
97
|
+
#{opts[:sy]},
|
98
|
+
#{opts[:swidth]},
|
99
|
+
#{opts[:sheight]},
|
100
|
+
#{x},
|
101
|
+
#{y},
|
102
|
+
#{opts[:dwidth]},
|
103
|
+
#{opts[:dheight]}
|
104
|
+
);
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
# Draws image to a canvas at an x and y position and rotated at some angle
|
109
|
+
# x and y represent the center of the image
|
110
|
+
# angle is in degrees starting by pointing to the right and increasing counterclockwise
|
111
|
+
#
|
112
|
+
# @param [Integer] x (0) x coordinate of center of image
|
113
|
+
# @param [Integer] y (0) y coordinate of center of image
|
114
|
+
# @param [Float] angle (90.0) angle of image
|
115
|
+
# @param [Hash] opts ({}) the options to draw an image.
|
116
|
+
# @option opts [Dare::Canvas] :canvas (Dare.default_canvas) a canvas to refer to when drawing.
|
117
|
+
#
|
118
|
+
# @example
|
119
|
+
# image.draw_rot(100, 200, 45) # this will point the top of the image up and to the right
|
120
|
+
#
|
121
|
+
# @example
|
122
|
+
# image.draw_rot(50, 75, 270, canvas: some_other_canvas)
|
123
|
+
#
|
124
|
+
def draw_rot(x = 0, y = 0, angle = 90, opts = {})
|
125
|
+
opts[:canvas] ||= @canvas
|
126
|
+
%x{
|
127
|
+
var context = #{opts[:canvas].context};
|
128
|
+
var width = #{@img}.width;
|
129
|
+
var height = #{@img}.height;
|
130
|
+
context.translate(#{x}, #{y});
|
131
|
+
context.rotate(-#{angle-90}*Math.PI/180.0);
|
132
|
+
context.drawImage(#{@img}, -width/2, -height/2, width, height);
|
133
|
+
context.rotate(#{angle-90}*Math.PI/180.0);
|
134
|
+
context.translate(-#{x}, -#{y});
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
# (see #draw_rot)
|
139
|
+
# @note Used by Dare::ImageTile to draw a portion of an image to a canvas at an angle.
|
140
|
+
#
|
141
|
+
def draw_tile_rot(x = 0, y = 0, angle = 90, opts = {})
|
142
|
+
opts[:canvas] ||= @canvas
|
143
|
+
opts[:sx] ||= 0
|
144
|
+
opts[:sy] ||= 0
|
145
|
+
opts[:swidth] ||= width - opts[:sx]
|
146
|
+
opts[:sheight] ||= height - opts[:sy]
|
147
|
+
opts[:dwidth] ||= opts[:swidth]
|
148
|
+
opts[:dheight] ||= opts[:sheight]
|
149
|
+
%x{
|
150
|
+
var context = #{opts[:canvas].context};
|
151
|
+
context.translate(#{x}, #{y});
|
152
|
+
context.rotate(-#{angle-90}*Math.PI/180.0);
|
153
|
+
context.drawImage(
|
154
|
+
#{@img},
|
155
|
+
#{opts[:sx]},
|
156
|
+
#{opts[:sy]},
|
157
|
+
#{opts[:swidth]},
|
158
|
+
#{opts[:sheight]},
|
159
|
+
-#{opts[:swidth]}/2,
|
160
|
+
-#{opts[:sheight]}/2,
|
161
|
+
#{opts[:swidth]},
|
162
|
+
#{opts[:sheight]});
|
163
|
+
context.rotate(#{angle-90}*Math.PI/180.0);
|
164
|
+
context.translate(-#{x}, -#{y});
|
165
|
+
}
|
14
166
|
end
|
15
167
|
|
16
|
-
#
|
17
|
-
# x and y represent the top-left corner of the image
|
18
|
-
# image.draw(100, 200)
|
168
|
+
# Loads image and cuts it into tiles
|
19
169
|
#
|
20
|
-
|
21
|
-
|
170
|
+
# @param [String] path ("") the path to the resource
|
171
|
+
# @param [Hash] opts ({}) the options to create an image.
|
172
|
+
# @option opts [Integer] :width (Image.new(path).width) width of a single tile from the image
|
173
|
+
# @option opts [Integer] :height (Image.new(path).height) height of a single tile from the image
|
174
|
+
#
|
175
|
+
# @return [Array] An array of images each of which are individual tiles of the original
|
176
|
+
#
|
177
|
+
def self.load_tiles(path = "", opts = {})
|
178
|
+
|
179
|
+
image = Image.new(path)
|
180
|
+
@tiles = []
|
181
|
+
|
182
|
+
%x{
|
183
|
+
#{image.img}.onload = function() {
|
184
|
+
#{opts[:width] ||= image.width};
|
185
|
+
#{opts[:height] ||= image.height};
|
186
|
+
#{columns = image.width/opts[:width]};
|
187
|
+
#{rows = image.height/opts[:height]};
|
188
|
+
|
189
|
+
#{rows.times do |row|
|
190
|
+
columns.times do |column|
|
191
|
+
@tiles << ImageTile.new(image, column*opts[:width].to_i, row*opts[:height].to_i, opts[:width].to_i, opts[:height].to_i)
|
192
|
+
end
|
193
|
+
end};
|
194
|
+
}
|
195
|
+
}
|
196
|
+
@tiles
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
class ImageTile
|
201
|
+
attr_reader :width, :height
|
202
|
+
def initialize(image = Image.new, x = 0, y = 0, width = 0, height = 0)
|
203
|
+
@image = image
|
204
|
+
@x = x
|
205
|
+
@y = y
|
206
|
+
@width = width
|
207
|
+
@height = height
|
208
|
+
end
|
209
|
+
|
210
|
+
def draw(x = 0, y = 0, opts = {})
|
211
|
+
@image.draw_tile(x, y, opts.merge({sx: @x, sy: @y, swidth: @width, sheight: @height}))
|
212
|
+
end
|
213
|
+
|
214
|
+
def draw_rot(x = 0, y = 0, angle = 90, opts = {})
|
215
|
+
@image.draw_tile_rot(x, y, angle, opts.merge({sx: @x, sy: @y, swidth: @width, sheight: @height}))
|
22
216
|
end
|
23
217
|
end
|
24
218
|
end
|
data/lib/dare/sound.rb
CHANGED
@@ -8,14 +8,24 @@ module Dare
|
|
8
8
|
class Sound
|
9
9
|
|
10
10
|
# loads an audio resource from a path
|
11
|
-
# Sound.new('http://www.
|
11
|
+
# Sound.new('http://www.google.com/song.mp3')
|
12
12
|
# Sound.new('local_song_in_same_directory_of_app_js_file.mp3')
|
13
|
-
# a predefined volume may be passed as
|
14
|
-
# Sound.new('file.mp3', 0.5)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
# a predefined volume may be passed as an option
|
14
|
+
# Sound.new('file.mp3', volume: 0.5)
|
15
|
+
#
|
16
|
+
def initialize(path, opts = {})
|
17
|
+
opts[:overlap] ||= 1
|
18
|
+
opts[:volume] ||= 1
|
19
|
+
opts[:overlap] = 1 if opts[:overlap].to_i < 1
|
20
|
+
opts[:overlap] = 10 if opts[:overlap].to_i > 10
|
21
|
+
@overlap = opts[:overlap]
|
22
|
+
@sounds = []
|
23
|
+
@overlap.times do
|
24
|
+
`var snd = new Audio(#{path})`
|
25
|
+
`snd.volume = #{opts[:volume]}`
|
26
|
+
@sounds << `snd`
|
27
|
+
end
|
28
|
+
@sound = 0
|
19
29
|
end
|
20
30
|
|
21
31
|
# set the volume of the audio resource to value between 0 and 1
|
@@ -34,7 +44,9 @@ module Dare
|
|
34
44
|
# if resource was paused, it will start playing from where it left off
|
35
45
|
#
|
36
46
|
def play
|
37
|
-
|
47
|
+
@sound += 1
|
48
|
+
@sound %= @overlap
|
49
|
+
`#{@sounds[@sound]}.play()`
|
38
50
|
end
|
39
51
|
|
40
52
|
# pause the audio resource, halting playback
|
data/lib/dare/window.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
module Dare
|
2
|
+
class Color
|
3
|
+
attr_accessor :red, :green, :blue
|
4
|
+
def initialize(color)
|
5
|
+
|
6
|
+
end
|
7
|
+
end
|
2
8
|
class Window
|
3
9
|
|
4
10
|
attr_reader :width, :height, :ticks, :mouse_x, :mouse_y, :canvas, :key, :update_interval
|
5
11
|
|
6
|
-
#
|
7
|
-
# options
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
12
|
+
# Creates a new window object to hold all your game goodness
|
13
|
+
# @param [Hash] opts the options to create a window.
|
14
|
+
# @option opts [Integer] :width (640) sets default canvas to a particular width in pixels
|
15
|
+
# @option opts [Integer] :height (480) sets default canvas to a particular height in pixels
|
16
|
+
# @option opts [Float] :update_interval (16.666666) sets the update interval in milliseconds between updates
|
17
|
+
# @option opts [Boolean] :border (false) draws a border around the default canvas
|
18
|
+
# @option opts [Dare::Canvas] :canvas (Dare.default_canvas) a canvas to refer to when drawing.
|
19
|
+
# @option opts [Boolean] :mouse (true) turn off mouse event listeners by setting to false
|
14
20
|
#
|
15
21
|
def initialize(opts = {})
|
16
22
|
opts[:width] ||= 640
|
@@ -33,12 +39,15 @@ module Dare
|
|
33
39
|
# starts the game loop for the window.
|
34
40
|
def run!
|
35
41
|
%x{
|
42
|
+
function update_loop() {
|
43
|
+
#{update};
|
44
|
+
}
|
36
45
|
function anim_loop() {
|
37
46
|
requestAnimationFrame(anim_loop);
|
38
|
-
#{
|
39
|
-
#{@canvas.context}.clearRect(0, 0, #{width}, #{height});
|
47
|
+
#{@canvas.canvas}.width = #{@canvas.canvas}.width;
|
40
48
|
#{draw};
|
41
49
|
}
|
50
|
+
setInterval(update_loop, #{@update_interval});
|
42
51
|
requestAnimationFrame(anim_loop);
|
43
52
|
}
|
44
53
|
end
|
@@ -72,6 +81,9 @@ module Dare
|
|
72
81
|
Element.find("html").on :keyup do |event|
|
73
82
|
@keys[get_key_id(event)] = false
|
74
83
|
end
|
84
|
+
::Window.on :blur do |event|
|
85
|
+
@keys.fill false
|
86
|
+
end
|
75
87
|
end
|
76
88
|
|
77
89
|
# checks to see if button passed is currently being pressed
|
@@ -115,11 +127,44 @@ module Dare
|
|
115
127
|
`#{@canvas.context}.fillRect(#{x}, #{y}, #{width}, #{height})`
|
116
128
|
end
|
117
129
|
|
130
|
+
#works the same as Gosu::Window.draw_quad
|
131
|
+
def draw_quad(x1, y1, c1, x2, y2, c2, x3, y3, c3, x4, y4, c4, z)
|
132
|
+
%x{
|
133
|
+
var QUALITY = 256;
|
134
|
+
|
135
|
+
var canvas_colors = document.createElement( 'canvas' );
|
136
|
+
canvas_colors.width = 2;
|
137
|
+
canvas_colors.height = 2;
|
138
|
+
|
139
|
+
var context_colors = canvas_colors.getContext( '2d' );
|
140
|
+
context_colors.fillStyle = 'rgba(0,0,0,1)';
|
141
|
+
context_colors.fillRect( 0, 0, 2, 2 );
|
142
|
+
|
143
|
+
var image_colors = context_colors.getImageData( 0, 0, 2, 2 );
|
144
|
+
var data = image_colors.data;
|
145
|
+
|
146
|
+
var canvas_render = #{@canvas};
|
147
|
+
|
148
|
+
var context_render = #{@canvas.context};
|
149
|
+
context_render.translate( - QUALITY / 2, - QUALITY / 2 );
|
150
|
+
context_render.scale( QUALITY, QUALITY );
|
151
|
+
|
152
|
+
data[ 0 ] = 255; // Top-left, red component
|
153
|
+
data[ 5 ] = 255; // Top-right, green component
|
154
|
+
data[ 10 ] = 255; // Bottom-left, blue component
|
155
|
+
|
156
|
+
context_colors.putImageData( image_colors, 0, 0 );
|
157
|
+
context_render.drawImage( canvas_colors, 0, 0 );
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
118
161
|
# sets the caption/title of the window to the string passed
|
119
|
-
def caption(title)
|
162
|
+
def caption=(title)
|
120
163
|
`document.getElementById('pageTitle').innerHTML = #{title}`
|
121
164
|
end
|
122
165
|
|
166
|
+
alias :title= :caption=
|
167
|
+
|
123
168
|
# checks if game is fullscreen. currently not implemented.
|
124
169
|
def fullscreen?
|
125
170
|
false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominic Muller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -108,6 +108,10 @@ extensions: []
|
|
108
108
|
extra_rdoc_files: []
|
109
109
|
files:
|
110
110
|
- bin/dare
|
111
|
+
- examples/tutorial/assets/Beep.wav
|
112
|
+
- examples/tutorial/assets/Space.png
|
113
|
+
- examples/tutorial/assets/Star.png
|
114
|
+
- examples/tutorial/assets/Starfighter.png
|
111
115
|
- lib/dare.rb
|
112
116
|
- lib/dare/canvas.rb
|
113
117
|
- lib/dare/font.rb
|