arcade 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.
- data/lib/arcade.rb +1 -0
- data/lib/arcade/base.rb +48 -34
- data/lib/arcade/version.rb +1 -1
- metadata +13 -7
data/lib/arcade.rb
CHANGED
data/lib/arcade/base.rb
CHANGED
@@ -69,7 +69,7 @@ class Arcade::GameWindow < Gosu::Window
|
|
69
69
|
object.collided_with(other)
|
70
70
|
end
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
edge = if object.top < 0
|
74
74
|
:top
|
75
75
|
elsif object.bottom > self.height
|
@@ -102,47 +102,61 @@ class Arcade::GameWindow < Gosu::Window
|
|
102
102
|
end
|
103
103
|
|
104
104
|
class Arcade::GameObject
|
105
|
-
PROPERTIES = [:x, :y, :height, :width, :color, :name, :velocity]
|
106
|
-
DEFAULTS = {:color => Arcade::Color::WHITE,
|
107
|
-
|
108
|
-
PROPERTIES.each do |prop|
|
109
|
-
attr_accessor prop
|
110
|
-
alias_method :"set_#{prop}", :"#{prop}="
|
111
|
-
end
|
105
|
+
PROPERTIES = [:x, :y, :height, :width, :color, :name, :velocity, :score]
|
106
|
+
DEFAULTS = {:color => Arcade::Color::WHITE,
|
107
|
+
:velocity => Arcade::Velocity::ZERO}
|
112
108
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
109
|
+
ALIASES = {:x_position => :x,
|
110
|
+
:y_position => :y,
|
111
|
+
:set_x_position => :x=,
|
112
|
+
:set_y_position => :y=}
|
117
113
|
|
118
114
|
attr_reader :window
|
119
115
|
attr_reader :keypress_listeners
|
120
116
|
|
117
|
+
def method_missing method, *args
|
118
|
+
method = ALIASES.fetch(method) { method }
|
119
|
+
|
120
|
+
mname = method.id2name
|
121
|
+
|
122
|
+
if prop = mname.scan(/^set_(.+)/).flatten.first
|
123
|
+
@state.send(:"#{prop}=", *args)
|
124
|
+
else
|
125
|
+
@state.send(method, *args)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
121
129
|
class << self
|
122
|
-
|
123
|
-
|
124
|
-
alias_method :"set_#{prop}", :"#{prop}="
|
130
|
+
def set_defaults &block
|
131
|
+
@default_block = block
|
125
132
|
end
|
126
133
|
|
127
|
-
def
|
128
|
-
|
134
|
+
def has_defaults?
|
135
|
+
!@default_block.nil?
|
129
136
|
end
|
130
137
|
|
131
|
-
def
|
132
|
-
|
138
|
+
def defaults
|
139
|
+
@default_block
|
133
140
|
end
|
134
141
|
end
|
135
142
|
|
136
|
-
def
|
137
|
-
|
138
|
-
val = self.class.send(prop) || Arcade::GameObject::DEFAULTS[prop] || 0
|
143
|
+
def setup_defaults
|
144
|
+
DEFAULTS.each do |prop, val|
|
139
145
|
self.send(:"#{prop}=", val)
|
140
146
|
end
|
141
147
|
|
148
|
+
if self.class.has_defaults?
|
149
|
+
instance_exec &self.class.defaults
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def initialize &block
|
154
|
+
@state = OpenStruct.new
|
142
155
|
@keypress_listeners = {}
|
143
156
|
@collision_listeners = {}
|
144
157
|
@edge_callback = nil
|
145
158
|
|
159
|
+
setup_defaults
|
146
160
|
instance_exec &block
|
147
161
|
end
|
148
162
|
|
@@ -168,37 +182,37 @@ class Arcade::GameObject
|
|
168
182
|
self.update(dt)
|
169
183
|
end
|
170
184
|
end
|
171
|
-
|
185
|
+
|
172
186
|
def top
|
173
|
-
|
187
|
+
self.y
|
174
188
|
end
|
175
189
|
|
176
190
|
def bottom
|
177
|
-
|
191
|
+
self.y + height
|
178
192
|
end
|
179
193
|
|
180
194
|
def left
|
181
|
-
|
195
|
+
self.x
|
182
196
|
end
|
183
197
|
|
184
198
|
def right
|
185
|
-
|
199
|
+
self.x + width
|
186
200
|
end
|
187
201
|
|
188
202
|
def move_up pixels
|
189
|
-
|
203
|
+
self.y -= pixels
|
190
204
|
end
|
191
205
|
|
192
206
|
def move_down pixels
|
193
|
-
|
207
|
+
self.y += pixels
|
194
208
|
end
|
195
209
|
|
196
210
|
def move_left pixels
|
197
|
-
|
211
|
+
self.x -= pixels
|
198
212
|
end
|
199
213
|
|
200
214
|
def move_right pixels
|
201
|
-
|
215
|
+
self.x += pixels
|
202
216
|
end
|
203
217
|
|
204
218
|
def on_keypress key, &block
|
@@ -235,15 +249,15 @@ class Arcade::GameObject
|
|
235
249
|
left > other.right)
|
236
250
|
end
|
237
251
|
end
|
238
|
-
|
252
|
+
|
239
253
|
def on_hit_edge &block
|
240
254
|
@edge_callback = block
|
241
255
|
end
|
242
|
-
|
256
|
+
|
243
257
|
# One of :top, :bottom, :left, or :right
|
244
258
|
def hit_edge edge
|
245
259
|
if @edge_callback
|
246
260
|
instance_exec edge, &@edge_callback
|
247
261
|
end
|
248
262
|
end
|
249
|
-
end
|
263
|
+
end
|
data/lib/arcade/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arcade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70248389339500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70248389339500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: gosu
|
27
|
-
requirement: &
|
27
|
+
requirement: &70248389338680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70248389338680
|
36
36
|
description: ! 'Arcade is a simple Ruby-vased DSL for creating old-school arcade games
|
37
37
|
like Pong. The philosophy is similar to GameMaker, except expressed as a Ruby library
|
38
38
|
instead of a crazy GUI.
|
@@ -63,15 +63,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
65
|
version: '0'
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
hash: 2415246944967182854
|
66
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
70
|
none: false
|
68
71
|
requirements:
|
69
72
|
- - ! '>='
|
70
73
|
- !ruby/object:Gem::Version
|
71
74
|
version: '0'
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
hash: 2415246944967182854
|
72
78
|
requirements: []
|
73
79
|
rubyforge_project:
|
74
|
-
rubygems_version: 1.8.
|
80
|
+
rubygems_version: 1.8.17
|
75
81
|
signing_key:
|
76
82
|
specification_version: 3
|
77
83
|
summary: A Ruby-based DSL for building simple arcade-style games like Pong, etc.
|