gosu_extensions 0.1.23 → 0.1.24
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 +62 -62
- data/lib/core/scheduling.rb +2 -2
- data/lib/core/wave.rb +35 -0
- data/lib/core/waves.rb +8 -16
- data/lib/gosu_extensions.rb +2 -1
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.24
|
data/lib/core/game_window.rb
CHANGED
@@ -28,7 +28,8 @@ class GameWindow < Gosu::Window
|
|
28
28
|
:gravity_vector
|
29
29
|
attr_reader :environment,
|
30
30
|
:moveables,
|
31
|
-
:font
|
31
|
+
:font,
|
32
|
+
:scheduling
|
32
33
|
attr_accessor :background_path,
|
33
34
|
:background_hard_borders
|
34
35
|
|
@@ -46,15 +47,17 @@ class GameWindow < Gosu::Window
|
|
46
47
|
setup_background
|
47
48
|
|
48
49
|
setup_steps
|
49
|
-
setup_waves
|
50
50
|
setup_scheduling
|
51
51
|
setup_font
|
52
52
|
|
53
53
|
setup_containers
|
54
54
|
|
55
55
|
setup_environment
|
56
|
+
|
56
57
|
setup_enemies
|
57
58
|
setup_players
|
59
|
+
setup_waves
|
60
|
+
|
58
61
|
setup_collisions
|
59
62
|
|
60
63
|
install_main_loop
|
@@ -158,6 +161,9 @@ class GameWindow < Gosu::Window
|
|
158
161
|
end
|
159
162
|
end
|
160
163
|
|
164
|
+
# Setup methods
|
165
|
+
#
|
166
|
+
|
161
167
|
def setup_window
|
162
168
|
self.caption = self.class.caption || ""
|
163
169
|
end
|
@@ -180,14 +186,12 @@ class GameWindow < Gosu::Window
|
|
180
186
|
end
|
181
187
|
def setup_containers
|
182
188
|
@players = []
|
189
|
+
@waves = Waves.new self, @scheduling
|
183
190
|
end
|
184
191
|
def setup_steps
|
185
192
|
@step = 0
|
186
193
|
@dt = 1.0 / 60.0
|
187
194
|
end
|
188
|
-
def setup_waves
|
189
|
-
@waves = Waves.new self
|
190
|
-
end
|
191
195
|
def setup_scheduling
|
192
196
|
@scheduling = Scheduling.new
|
193
197
|
end
|
@@ -202,12 +206,11 @@ class GameWindow < Gosu::Window
|
|
202
206
|
@environment.window = self
|
203
207
|
@environment.damping = -self.damping + 1 # recalculate the damping such that 0.0 has no damping.
|
204
208
|
end
|
205
|
-
|
206
209
|
# Override.
|
207
210
|
#
|
208
211
|
def setup_players; end
|
209
212
|
def setup_enemies; end
|
210
|
-
|
213
|
+
def setup_waves; end
|
211
214
|
#
|
212
215
|
#
|
213
216
|
# Example:
|
@@ -231,23 +234,20 @@ class GameWindow < Gosu::Window
|
|
231
234
|
@controls << Control.new(self, object)
|
232
235
|
end
|
233
236
|
|
234
|
-
|
235
|
-
@step += 1
|
236
|
-
@waves.check @step # TODO maybe the waves should move into the scheduling
|
237
|
-
@scheduling.step
|
238
|
-
end
|
239
|
-
|
240
|
-
|
241
|
-
# Core methods used by the extensions "framework"
|
237
|
+
# Main loop methods.
|
242
238
|
#
|
243
239
|
|
244
|
-
# The main loop.
|
245
|
-
#
|
246
240
|
# TODO implement hooks.
|
247
241
|
#
|
248
242
|
def update
|
249
243
|
@current_loop.call
|
250
244
|
end
|
245
|
+
# Advances to the next step in the game.
|
246
|
+
#
|
247
|
+
def next_step
|
248
|
+
@step += 1
|
249
|
+
@scheduling.step
|
250
|
+
end
|
251
251
|
# Each step, this is called to handle any input.
|
252
252
|
#
|
253
253
|
def handle_input
|
@@ -258,7 +258,31 @@ class GameWindow < Gosu::Window
|
|
258
258
|
def step_physics
|
259
259
|
@environment.step @dt
|
260
260
|
end
|
261
|
+
# Moves each moveable.
|
262
|
+
#
|
263
|
+
def move
|
264
|
+
@moveables.move
|
265
|
+
end
|
266
|
+
# Handles the targeting process.
|
267
|
+
#
|
268
|
+
def targeting
|
269
|
+
@moveables.targeting
|
270
|
+
end
|
271
|
+
# Remove the shapes that are marked for removal.
|
272
|
+
#
|
273
|
+
def remove_shapes
|
274
|
+
@remove_shapes.remove_from @environment, @moveables
|
275
|
+
end
|
276
|
+
|
277
|
+
# Adding things.
|
278
|
+
#
|
261
279
|
|
280
|
+
# Moveables register themselves here.
|
281
|
+
#
|
282
|
+
def register moveable
|
283
|
+
@moveables.register moveable
|
284
|
+
moveable.add_to @environment
|
285
|
+
end
|
262
286
|
# Things unregister themselves here.
|
263
287
|
#
|
264
288
|
# Note: Use as follows in a Thing.
|
@@ -273,7 +297,6 @@ class GameWindow < Gosu::Window
|
|
273
297
|
def unregister thing
|
274
298
|
remove thing.shape
|
275
299
|
end
|
276
|
-
|
277
300
|
# Remove this shape the next turn.
|
278
301
|
#
|
279
302
|
# Note: Internal use. Use unregister to properly remove a moveable.
|
@@ -281,6 +304,14 @@ class GameWindow < Gosu::Window
|
|
281
304
|
def remove shape
|
282
305
|
@remove_shapes.add shape
|
283
306
|
end
|
307
|
+
# Is the thing registered?
|
308
|
+
#
|
309
|
+
def registered? thing
|
310
|
+
@moveables.registered? thing
|
311
|
+
end
|
312
|
+
|
313
|
+
# Scheduling
|
314
|
+
#
|
284
315
|
|
285
316
|
# Run some code at relative time <time>.
|
286
317
|
#
|
@@ -296,40 +327,16 @@ class GameWindow < Gosu::Window
|
|
296
327
|
@scheduling.add time, &code
|
297
328
|
end
|
298
329
|
|
299
|
-
# Moves each moveable.
|
300
|
-
#
|
301
|
-
def move
|
302
|
-
@moveables.move
|
303
|
-
end
|
304
|
-
# Handles the targeting process.
|
305
|
-
#
|
306
|
-
def targeting
|
307
|
-
@moveables.targeting
|
308
|
-
end
|
309
330
|
|
310
331
|
# Utility Methods
|
311
332
|
#
|
312
333
|
|
313
|
-
#
|
314
|
-
#
|
315
334
|
# Example:
|
316
335
|
# * x, y = uniform_random_position
|
317
336
|
#
|
318
337
|
def uniform_random_position
|
319
338
|
[rand(self.width), rand(self.height)]
|
320
339
|
end
|
321
|
-
|
322
|
-
#
|
323
|
-
#
|
324
|
-
# Example:
|
325
|
-
# imprint do
|
326
|
-
# circle x, y, radius, :fill => true, :color => :black
|
327
|
-
# end
|
328
|
-
#
|
329
|
-
def imprint &block
|
330
|
-
@background_image.paint &block
|
331
|
-
end
|
332
|
-
|
333
340
|
# Randomly adds a Thing to a uniform random position.
|
334
341
|
#
|
335
342
|
def randomly_add type
|
@@ -337,32 +344,12 @@ class GameWindow < Gosu::Window
|
|
337
344
|
thing.warp_to *uniform_random_position
|
338
345
|
register thing
|
339
346
|
end
|
340
|
-
|
341
|
-
# Moveables register themselves here.
|
342
|
-
#
|
343
|
-
def register moveable
|
344
|
-
@moveables.register moveable
|
345
|
-
moveable.add_to @environment
|
346
|
-
end
|
347
|
-
|
348
|
-
# Remove the shapes that are marked for removal.
|
349
|
-
#
|
350
|
-
def remove_shapes
|
351
|
-
@remove_shapes.remove_from @environment, @moveables
|
352
|
-
end
|
353
|
-
|
354
347
|
# Revives the player if not already in.
|
355
348
|
#
|
356
349
|
def revive player
|
357
350
|
register player unless registered?(player) # player.registered?
|
358
351
|
end
|
359
352
|
|
360
|
-
# Is the thing registered?
|
361
|
-
#
|
362
|
-
def registered? thing
|
363
|
-
@moveables.registered? thing
|
364
|
-
end
|
365
|
-
|
366
353
|
# Drawing methods
|
367
354
|
#
|
368
355
|
|
@@ -395,6 +382,19 @@ class GameWindow < Gosu::Window
|
|
395
382
|
def draw_ui
|
396
383
|
|
397
384
|
end
|
385
|
+
#
|
386
|
+
#
|
387
|
+
# Example:
|
388
|
+
# imprint do
|
389
|
+
# circle x, y, radius, :fill => true, :color => :black
|
390
|
+
# end
|
391
|
+
#
|
392
|
+
def imprint &block
|
393
|
+
@background_image.paint &block
|
394
|
+
end
|
395
|
+
|
396
|
+
# Input handling.
|
397
|
+
#
|
398
398
|
|
399
399
|
#
|
400
400
|
#
|
data/lib/core/scheduling.rb
CHANGED
data/lib/core/wave.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
class Wave
|
4
|
+
|
5
|
+
attr_reader :generated_type, :execution_amount, :positioning_function
|
6
|
+
|
7
|
+
UniformRandom = lambda { |window, instance| instance.warp_to *window.uniform_random_position }
|
8
|
+
TopBorder = lambda { |window, instance| instance.warp_to rand(window.width), 0 }
|
9
|
+
RightBorder = lambda { |window, instance| instance.warp_to window.width, rand(window.height) }
|
10
|
+
BottomBorder = lambda { |window, instance| instance.warp_to rand(window.width), window.height }
|
11
|
+
LeftBorder = lambda { |window, instance| instance.warp_to 0, rand(window.height) }
|
12
|
+
|
13
|
+
#
|
14
|
+
#
|
15
|
+
# Note: The function needs a param generated_type.
|
16
|
+
#
|
17
|
+
def initialize generated_type, execution_amount = 1, &positioning_function
|
18
|
+
@generated_type = generated_type
|
19
|
+
@execution_amount = execution_amount
|
20
|
+
@positioning_function = positioning_function || UniformRandom
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
#
|
25
|
+
def for_scheduling window
|
26
|
+
lambda do
|
27
|
+
self.execution_amount.times do
|
28
|
+
instance = self.generated_type.new window
|
29
|
+
window.register instance
|
30
|
+
self.positioning_function.call(window, instance)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/lib/core/waves.rb
CHANGED
@@ -2,33 +2,25 @@
|
|
2
2
|
#
|
3
3
|
class Waves
|
4
4
|
|
5
|
-
|
6
|
-
#
|
7
|
-
def initialize window
|
8
|
-
@window = window
|
9
|
-
@waves = {}
|
10
|
-
end
|
5
|
+
attr_reader :window, :scheduling
|
11
6
|
|
12
7
|
#
|
13
8
|
#
|
14
|
-
def
|
15
|
-
@
|
16
|
-
@
|
9
|
+
def initialize window, scheduling
|
10
|
+
@window = window
|
11
|
+
@scheduling = scheduling
|
17
12
|
end
|
18
13
|
|
19
14
|
#
|
20
15
|
#
|
21
|
-
def
|
22
|
-
|
23
|
-
types = @waves[time]
|
24
|
-
types.each { |amount, type| amount.times { @window.randomly_add type } }
|
25
|
-
end
|
16
|
+
def add time, generated_type, times, &generation
|
17
|
+
add_wave time, Wave.new(generated_type, times, &generation)
|
26
18
|
end
|
27
19
|
|
28
20
|
#
|
29
21
|
#
|
30
|
-
def
|
31
|
-
|
22
|
+
def add_wave time, wave
|
23
|
+
scheduling.add time, wave.for_scheduling(window)
|
32
24
|
end
|
33
25
|
|
34
26
|
end
|
data/lib/gosu_extensions.rb
CHANGED
@@ -30,11 +30,12 @@ require 'it_is_a'
|
|
30
30
|
|
31
31
|
require 'moveables'
|
32
32
|
require 'remove_shapes'
|
33
|
+
require 'wave'
|
34
|
+
require 'waves'
|
33
35
|
require 'scheduling'
|
34
36
|
require 'game_window'
|
35
37
|
require 'control'
|
36
38
|
require 'controls'
|
37
|
-
require 'waves'
|
38
39
|
require 'layer'
|
39
40
|
|
40
41
|
$:.unshift File.join(File.dirname(__FILE__), '/traits')
|
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
|
+
- 24
|
9
|
+
version: 0.1.24
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Florian Hanke
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-08 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/core/trait.rb
|
67
67
|
- lib/core/traits.rb
|
68
68
|
- lib/core/vector_utilities.rb
|
69
|
+
- lib/core/wave.rb
|
69
70
|
- lib/core/waves.rb
|
70
71
|
- lib/extensions/module.rb
|
71
72
|
- lib/extensions/numeric.rb
|