gosu_extensions 0.1.17 → 0.1.18
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/VERSION +1 -1
- data/lib/core/game_window.rb +34 -52
- data/lib/core/moveables.rb +33 -0
- data/lib/core/remove_shapes.rb +35 -0
- data/lib/gosu_extensions.rb +2 -0
- data/spec/lib/core/game_window_spec.rb +3 -5
- metadata +4 -2
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1.
|
|
1
|
+
0.1.18
|
data/lib/core/game_window.rb
CHANGED
|
@@ -34,7 +34,9 @@ class GameWindow < Gosu::Window
|
|
|
34
34
|
|
|
35
35
|
def initialize
|
|
36
36
|
setup_window
|
|
37
|
-
|
|
37
|
+
setup_moveables
|
|
38
|
+
setup_remove_shapes
|
|
39
|
+
setup_controls
|
|
38
40
|
|
|
39
41
|
after_initialize
|
|
40
42
|
|
|
@@ -49,6 +51,8 @@ class GameWindow < Gosu::Window
|
|
|
49
51
|
setup_scheduling
|
|
50
52
|
setup_font
|
|
51
53
|
|
|
54
|
+
setup_containers
|
|
55
|
+
|
|
52
56
|
setup_environment
|
|
53
57
|
setup_enemies
|
|
54
58
|
setup_players
|
|
@@ -63,9 +67,8 @@ class GameWindow < Gosu::Window
|
|
|
63
67
|
# Step the physics environment SUBSTEPS times each update.
|
|
64
68
|
#
|
|
65
69
|
SUBSTEPS.times do
|
|
66
|
-
remove_shapes
|
|
67
|
-
|
|
68
|
-
move_all
|
|
70
|
+
remove_shapes
|
|
71
|
+
move
|
|
69
72
|
targeting
|
|
70
73
|
handle_input
|
|
71
74
|
step_physics
|
|
@@ -185,11 +188,17 @@ class GameWindow < Gosu::Window
|
|
|
185
188
|
@background_image = Gosu::Image.new self, File.join(Resources.root, self.background_path), self.background_hard_borders
|
|
186
189
|
end
|
|
187
190
|
end
|
|
191
|
+
def setup_moveables
|
|
192
|
+
@moveables = Moveables.new
|
|
193
|
+
end
|
|
194
|
+
def setup_remove_shapes
|
|
195
|
+
@remove_shapes = RemoveShapes.new
|
|
196
|
+
end
|
|
197
|
+
def setup_controls
|
|
198
|
+
@controls = []
|
|
199
|
+
end
|
|
188
200
|
def setup_containers
|
|
189
|
-
@
|
|
190
|
-
@controls = []
|
|
191
|
-
@remove_shapes = []
|
|
192
|
-
@players = []
|
|
201
|
+
@players = []
|
|
193
202
|
end
|
|
194
203
|
def setup_steps
|
|
195
204
|
@step = 0
|
|
@@ -266,8 +275,6 @@ class GameWindow < Gosu::Window
|
|
|
266
275
|
# Does a single step.
|
|
267
276
|
#
|
|
268
277
|
def step_physics
|
|
269
|
-
# Perform the step over @dt period of time
|
|
270
|
-
# For best performance @dt should remain consistent for the game
|
|
271
278
|
@environment.step @dt
|
|
272
279
|
end
|
|
273
280
|
|
|
@@ -291,7 +298,7 @@ class GameWindow < Gosu::Window
|
|
|
291
298
|
# Note: Internal use. Use unregister to properly remove a moveable.
|
|
292
299
|
#
|
|
293
300
|
def remove shape
|
|
294
|
-
@remove_shapes
|
|
301
|
+
@remove_shapes.add shape
|
|
295
302
|
end
|
|
296
303
|
|
|
297
304
|
# Run some code at relative time <time>.
|
|
@@ -310,21 +317,15 @@ class GameWindow < Gosu::Window
|
|
|
310
317
|
|
|
311
318
|
# Moves each moveable.
|
|
312
319
|
#
|
|
313
|
-
def
|
|
314
|
-
@moveables.
|
|
320
|
+
def move
|
|
321
|
+
@moveables.move
|
|
315
322
|
end
|
|
316
|
-
|
|
317
323
|
# Handles the targeting process.
|
|
318
324
|
#
|
|
319
325
|
def targeting
|
|
320
|
-
@moveables.
|
|
321
|
-
gun.target *@moveables.select { |m| m.kind_of? Enemy }
|
|
322
|
-
end
|
|
326
|
+
@moveables.targeting
|
|
323
327
|
end
|
|
324
328
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
329
|
# Utility Methods
|
|
329
330
|
#
|
|
330
331
|
|
|
@@ -359,44 +360,25 @@ class GameWindow < Gosu::Window
|
|
|
359
360
|
# Moveables register themselves here.
|
|
360
361
|
#
|
|
361
362
|
def register moveable
|
|
362
|
-
@moveables
|
|
363
|
+
@moveables.register moveable
|
|
363
364
|
moveable.add_to @environment
|
|
364
365
|
end
|
|
365
366
|
|
|
366
|
-
def remove_shapes
|
|
367
|
-
|
|
368
|
-
# each Shape's Body as it comes up
|
|
369
|
-
# If our Stars had multiple Shapes, as would be required if we were to meticulously
|
|
370
|
-
# define their true boundaries, we couldn't do this as we would remove the Body
|
|
371
|
-
# multiple times
|
|
372
|
-
# We would probably solve this by creating a separate @remove_bodies array to remove the Bodies
|
|
373
|
-
# of the Stars that were gathered by the Player
|
|
374
|
-
#
|
|
375
|
-
# p @remove_shapes unless @remove_shapes.empty?
|
|
376
|
-
@remove_shapes.each do |shape|
|
|
377
|
-
@environment.remove_body shape.body
|
|
378
|
-
@environment.remove_shape shape
|
|
379
|
-
@moveables.delete_if { |moveable| moveable.shape == shape }
|
|
380
|
-
end
|
|
381
|
-
@remove_shapes.clear
|
|
367
|
+
def remove_shapes
|
|
368
|
+
@remove_shapes.remove_from @environment, @moveables
|
|
382
369
|
end
|
|
383
370
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
# We reset the forces on the Player each SUBSTEP for this reason
|
|
389
|
-
#
|
|
390
|
-
# @player1.shape.body.reset_forces
|
|
391
|
-
# @player2.shape.body.reset_forces
|
|
392
|
-
# @player3.shape.body.reset_forces
|
|
393
|
-
# @players.each { |player| player.shape.body.reset_forces }
|
|
371
|
+
# Revives the player if not already in.
|
|
372
|
+
#
|
|
373
|
+
def revive player
|
|
374
|
+
register player unless registered?(player) # player.registered?
|
|
394
375
|
end
|
|
395
376
|
|
|
396
|
-
#
|
|
397
|
-
#
|
|
398
|
-
|
|
399
|
-
|
|
377
|
+
# Is the thing registered?
|
|
378
|
+
#
|
|
379
|
+
def registered? thing
|
|
380
|
+
@moveables.registered? thing
|
|
381
|
+
end
|
|
400
382
|
|
|
401
383
|
# Drawing methods
|
|
402
384
|
#
|
|
@@ -414,7 +396,7 @@ class GameWindow < Gosu::Window
|
|
|
414
396
|
|
|
415
397
|
end
|
|
416
398
|
def draw_moveables
|
|
417
|
-
@moveables.
|
|
399
|
+
@moveables.draw
|
|
418
400
|
end
|
|
419
401
|
def draw_ui
|
|
420
402
|
# @font.draw "P1 Score: ", 10, 10, ZOrder::UI, 1.0, 1.0, 0xffff0000
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# TODO optimize
|
|
2
|
+
#
|
|
3
|
+
class Moveables
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@elements = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
delegate :each, :to => :@elements
|
|
10
|
+
|
|
11
|
+
def register moveable
|
|
12
|
+
@elements << moveable
|
|
13
|
+
end
|
|
14
|
+
def registered? moveable
|
|
15
|
+
@elements.include? moveable
|
|
16
|
+
end
|
|
17
|
+
def remove shape
|
|
18
|
+
@elements.delete_if { |element| element.shape == shape }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def draw
|
|
22
|
+
@elements.each &:draw
|
|
23
|
+
end
|
|
24
|
+
def move
|
|
25
|
+
@elements.each &:move
|
|
26
|
+
end
|
|
27
|
+
def targeting
|
|
28
|
+
@elements.select { |m| m.respond_to? :target }.each do |gun|
|
|
29
|
+
gun.target *@elements.select { |m| m.kind_of? Enemy }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#
|
|
2
|
+
#
|
|
3
|
+
class RemoveShapes
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@shapes = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
#
|
|
10
|
+
#
|
|
11
|
+
def add shape
|
|
12
|
+
@shapes << shape
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
#
|
|
17
|
+
def remove_from environment, moveables
|
|
18
|
+
# This iterator makes an assumption of one Shape per Star making it safe to remove
|
|
19
|
+
# each Shape's Body as it comes up
|
|
20
|
+
# If our Stars had multiple Shapes, as would be required if we were to meticulously
|
|
21
|
+
# define their true boundaries, we couldn't do this as we would remove the Body
|
|
22
|
+
# multiple times
|
|
23
|
+
# We would probably solve this by creating a separate @remove_bodies array to remove the Bodies
|
|
24
|
+
# of the Stars that were gathered by the Player
|
|
25
|
+
#
|
|
26
|
+
return if @shapes.empty?
|
|
27
|
+
@shapes.each do |shape|
|
|
28
|
+
environment.remove_body shape.body
|
|
29
|
+
environment.remove_shape shape
|
|
30
|
+
moveables.remove shape
|
|
31
|
+
end
|
|
32
|
+
@shapes.clear
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
data/lib/gosu_extensions.rb
CHANGED
|
@@ -18,7 +18,7 @@ describe GameWindow do
|
|
|
18
18
|
@window = GameWindowTest.new
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
describe "gravity_vector" do
|
|
21
|
+
describe "gravity and gravity_vector" do
|
|
22
22
|
context 'default' do
|
|
23
23
|
it "should have a calculated value" do
|
|
24
24
|
@window.gravity_vector.x.should == 0.0
|
|
@@ -27,14 +27,12 @@ describe GameWindow do
|
|
|
27
27
|
end
|
|
28
28
|
context 'user defined' do
|
|
29
29
|
before(:each) do
|
|
30
|
-
GameWindowTest.
|
|
31
|
-
gravity 100
|
|
32
|
-
end
|
|
30
|
+
GameWindowTest.gravity 100
|
|
33
31
|
@window = GameWindowTest.new
|
|
34
32
|
end
|
|
35
33
|
it "should have a user defined value" do
|
|
36
34
|
@window.gravity_vector.x.should == 0.0
|
|
37
|
-
@window.gravity_vector.y.should ==
|
|
35
|
+
@window.gravity_vector.y.should == (100/SUBSTEPS)
|
|
38
36
|
end
|
|
39
37
|
end
|
|
40
38
|
end
|
metadata
CHANGED
|
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
segments:
|
|
6
6
|
- 0
|
|
7
7
|
- 1
|
|
8
|
-
-
|
|
9
|
-
version: 0.1.
|
|
8
|
+
- 18
|
|
9
|
+
version: 0.1.18
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Florian Hanke
|
|
@@ -58,6 +58,8 @@ files:
|
|
|
58
58
|
- lib/core/initializer_hooks.rb
|
|
59
59
|
- lib/core/it_is_a.rb
|
|
60
60
|
- lib/core/layer.rb
|
|
61
|
+
- lib/core/moveables.rb
|
|
62
|
+
- lib/core/remove_shapes.rb
|
|
61
63
|
- lib/core/resources.rb
|
|
62
64
|
- lib/core/scheduling.rb
|
|
63
65
|
- lib/core/trait.rb
|