dare 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|