arcade 0.2.0 → 0.2.1

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.
Files changed (3) hide show
  1. data/lib/arcade/base.rb +31 -10
  2. data/lib/arcade/version.rb +1 -1
  3. metadata +8 -8
@@ -1,3 +1,9 @@
1
+ module Arcade
2
+ module Errors
3
+ class NameError < StandardError;end
4
+ end
5
+ end
6
+
1
7
  module Arcade
2
8
  module Keyboard
3
9
  Gosu::Button.constants.each do |cons|
@@ -15,7 +21,7 @@ end
15
21
  class Arcade::GameWindow < Gosu::Window
16
22
  def initialize width, height
17
23
  @current_time = Gosu::milliseconds
18
- @objects = []
24
+ @objects = {}
19
25
 
20
26
  @keypress_listeners = Hash.new { |h,k| h[k] = [] }
21
27
 
@@ -27,7 +33,7 @@ class Arcade::GameWindow < Gosu::Window
27
33
  self.add_listener key, game_object
28
34
  end
29
35
 
30
- @objects << game_object
36
+ @objects.merge! game_object.name => game_object
31
37
  end
32
38
 
33
39
  def register game_object
@@ -35,6 +41,10 @@ class Arcade::GameWindow < Gosu::Window
35
41
  self.add_object(game_object)
36
42
  end
37
43
 
44
+ def get_object object_name
45
+ @objects[object_name]
46
+ end
47
+
38
48
  def add_listener key, object
39
49
  @keypress_listeners[key] << object
40
50
  end
@@ -48,7 +58,7 @@ class Arcade::GameWindow < Gosu::Window
48
58
  end
49
59
 
50
60
  def draw
51
- @objects.each do |game_object|
61
+ each_object do |game_object|
52
62
  game_object.draw
53
63
  end
54
64
  end
@@ -63,8 +73,8 @@ class Arcade::GameWindow < Gosu::Window
63
73
  end
64
74
  end
65
75
 
66
- @objects.each do |object|
67
- (@objects - [object]).each do |other|
76
+ each_object do |object|
77
+ (@objects.values - [object]).each do |other|
68
78
  if object.collides_with?(other)
69
79
  object.collided_with(other)
70
80
  end
@@ -83,7 +93,7 @@ class Arcade::GameWindow < Gosu::Window
83
93
  object.hit_edge(edge) if edge
84
94
  end
85
95
 
86
- @objects.each do |object|
96
+ each_object do |object|
87
97
  object._update(dt)
88
98
  end
89
99
  end
@@ -99,6 +109,13 @@ class Arcade::GameWindow < Gosu::Window
99
109
  x+width, y+height, color,
100
110
  x, y+height, color
101
111
  end
112
+
113
+ private
114
+ def each_object
115
+ @objects.each do |name, object|
116
+ yield object
117
+ end
118
+ end
102
119
  end
103
120
 
104
121
  class Arcade::GameObject
@@ -122,7 +139,9 @@ class Arcade::GameObject
122
139
  if prop = mname.scan(/^set_(.+)/).flatten.first
123
140
  @state.send(:"#{prop}=", *args)
124
141
  else
125
- @state.send(method, *args)
142
+ @state.send(method, *args).tap do |val|
143
+ warn "WARNING: Called #{self.class}##{method}, but it returned nil. You should set a default value." if val.nil?
144
+ end
126
145
  end
127
146
  end
128
147
 
@@ -158,10 +177,13 @@ class Arcade::GameObject
158
177
 
159
178
  setup_defaults
160
179
  instance_exec &block
180
+
181
+ # Every GameObject must have a name
182
+ raise Arcade::Errors::NameError, "#{self.class}#name is nil" if self.name.nil?
161
183
  end
162
184
 
163
- def config
164
- self
185
+ def get_object object_name
186
+ window.get_object object_name
165
187
  end
166
188
 
167
189
  def draw
@@ -233,7 +255,6 @@ class Arcade::GameObject
233
255
 
234
256
  def collided_with other
235
257
  klass = other.class
236
-
237
258
  if self.can_collide_with?(klass)
238
259
  instance_exec other, &@collision_listeners[klass]
239
260
  end
@@ -1,4 +1,4 @@
1
1
  module Arcade
2
2
  # The current version of arcade
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
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.2.0
4
+ version: 0.2.1
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-05-03 00:00:00.000000000 Z
12
+ date: 2012-05-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70248389339500 !ruby/object:Gem::Requirement
16
+ requirement: &70303611838520 !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: *70248389339500
24
+ version_requirements: *70303611838520
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: gosu
27
- requirement: &70248389338680 !ruby/object:Gem::Requirement
27
+ requirement: &70303611837660 !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: *70248389338680
35
+ version_requirements: *70303611837660
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.
@@ -65,7 +65,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
65
  version: '0'
66
66
  segments:
67
67
  - 0
68
- hash: 2415246944967182854
68
+ hash: 4028498995742475186
69
69
  required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  none: false
71
71
  requirements:
@@ -74,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  version: '0'
75
75
  segments:
76
76
  - 0
77
- hash: 2415246944967182854
77
+ hash: 4028498995742475186
78
78
  requirements: []
79
79
  rubyforge_project:
80
80
  rubygems_version: 1.8.17