gosu_extensions 0.3.2 → 0.3.3
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 +1 -20
- data/lib/core/threading.rb +37 -0
- data/lib/gosu_extensions.rb +1 -0
- data/lib/traits/hitpoints.rb +16 -9
- data/lib/traits/lives.rb +3 -3
- data/lib/traits/turnable.rb +1 -1
- data/lib/units/sprite.rb +1 -31
- data/lib/units/thing.rb +1 -1
- data/spec/lib/core/threading_spec.rb +35 -0
- data/spec/lib/traits/turnable_spec.rb +4 -4
- data/spec/lib/units/thing_spec.rb +5 -1
- metadata +8 -6
- data/bin/gogogosu +0 -33
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
data/lib/core/game_window.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
class GameWindow < Gosu::Window
|
7
7
|
|
8
8
|
include InitializerHooks
|
9
|
+
include Threading
|
9
10
|
|
10
11
|
# TODO handle more elegantly
|
11
12
|
#
|
@@ -401,26 +402,6 @@ class GameWindow < Gosu::Window
|
|
401
402
|
@uis.delete thing
|
402
403
|
end
|
403
404
|
|
404
|
-
# Scheduling
|
405
|
-
#
|
406
|
-
|
407
|
-
# Run some code at relative time <time>.
|
408
|
-
#
|
409
|
-
# Example:
|
410
|
-
# # Will destroy the object that calls this method
|
411
|
-
# # in 20 steps.
|
412
|
-
# #
|
413
|
-
# window.threaded 20 do
|
414
|
-
# destroy!
|
415
|
-
# end
|
416
|
-
#
|
417
|
-
# Note: You can also use after instead of threaded.
|
418
|
-
#
|
419
|
-
def threaded time = 1, &code
|
420
|
-
@scheduling.add time, &code
|
421
|
-
end
|
422
|
-
alias after threaded
|
423
|
-
|
424
405
|
|
425
406
|
# Utility Methods
|
426
407
|
#
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Use this if you want something to run only some times,
|
2
|
+
# or something to run after x time.
|
3
|
+
#
|
4
|
+
module Threading
|
5
|
+
|
6
|
+
# Do something threaded.
|
7
|
+
#
|
8
|
+
# Default is: Instantly, in the next step.
|
9
|
+
#
|
10
|
+
# Note: Can also be called with after.
|
11
|
+
#
|
12
|
+
def threaded time = 1, &code
|
13
|
+
self.window.scheduling.add time, &code
|
14
|
+
end
|
15
|
+
alias after threaded
|
16
|
+
|
17
|
+
# Some things you can only do every x time units.
|
18
|
+
#
|
19
|
+
# Example:
|
20
|
+
# sometimes :loading, self.frequency do
|
21
|
+
# projectile = self.shot.shoot_from self
|
22
|
+
# projectile.rotation = self.muzzle_rotation[target]
|
23
|
+
# projectile.speed = self.muzzle_velocity[target] * projectile.velocity
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
def sometimes variable, units = 1, &block
|
27
|
+
name = :"@__sometimes_#{variable}"
|
28
|
+
return if instance_variable_get(name)
|
29
|
+
instance_variable_set name, true
|
30
|
+
result = block.call
|
31
|
+
threaded units.to_i do
|
32
|
+
self.instance_variable_set name, false
|
33
|
+
end
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/lib/gosu_extensions.rb
CHANGED
data/lib/traits/hitpoints.rb
CHANGED
@@ -11,8 +11,8 @@ module Hitpoints extend Trait
|
|
11
11
|
Example:
|
12
12
|
hitpoints 10_000
|
13
13
|
|
14
|
-
Call hit(damage = 1) to remove hitpoints. This will call
|
15
|
-
* hit
|
14
|
+
Call hit!(damage = 1) to remove hitpoints. This will call
|
15
|
+
* callback hit if hitpoints are still higher than 0.
|
16
16
|
* kill!, and if not available, destroy! if hitpoints are lower than 0.
|
17
17
|
MANUAL
|
18
18
|
|
@@ -39,11 +39,9 @@ module Hitpoints extend Trait
|
|
39
39
|
|
40
40
|
attr_accessor :hitpoints
|
41
41
|
|
42
|
-
# Override to handle hit
|
42
|
+
# Override to handle hit.
|
43
43
|
#
|
44
|
-
def hit
|
45
|
-
|
46
|
-
end
|
44
|
+
def hit; end
|
47
45
|
|
48
46
|
# Hit the thing with that much damage.
|
49
47
|
#
|
@@ -51,10 +49,19 @@ module Hitpoints extend Trait
|
|
51
49
|
# kill!-s if lower, or destroy!-s if kill!
|
52
50
|
# is not available.
|
53
51
|
#
|
54
|
-
def hit damage = 1
|
52
|
+
def hit! damage = 1
|
55
53
|
self.hitpoints -= damage
|
56
|
-
hit
|
57
|
-
respond_to?(:kill!) ? kill! : destroy! if hitpoints
|
54
|
+
hit if hitpoints > 0
|
55
|
+
respond_to?(:kill!) ? kill! : destroy! if hitpoints < 0
|
56
|
+
end
|
57
|
+
|
58
|
+
# kill! must reset hitpoints
|
59
|
+
#
|
60
|
+
# TODO Do irrespective of kill! call order
|
61
|
+
#
|
62
|
+
def kill!
|
63
|
+
super
|
64
|
+
self.hitpoints = self.class.prototype_hitpoints
|
58
65
|
end
|
59
66
|
|
60
67
|
end
|
data/lib/traits/lives.rb
CHANGED
@@ -34,9 +34,9 @@ module Lives extend Trait
|
|
34
34
|
|
35
35
|
attr_accessor :lives
|
36
36
|
|
37
|
-
# Override to handle
|
37
|
+
# Override to handle kill!
|
38
38
|
#
|
39
|
-
def killed
|
39
|
+
def killed; end
|
40
40
|
|
41
41
|
# Does three things:
|
42
42
|
# * Deduct 1 live.
|
@@ -45,7 +45,7 @@ module Lives extend Trait
|
|
45
45
|
#
|
46
46
|
def kill!
|
47
47
|
self.lives -= 1
|
48
|
-
killed
|
48
|
+
killed if self.lives > 0
|
49
49
|
destroy! if self.lives == 0
|
50
50
|
end
|
51
51
|
|
data/lib/traits/turnable.rb
CHANGED
data/lib/units/sprite.rb
CHANGED
@@ -7,6 +7,7 @@ class Sprite
|
|
7
7
|
include VectorUtilities
|
8
8
|
include Imageable
|
9
9
|
include InitializerHooks
|
10
|
+
include Threading
|
10
11
|
include ItIsA
|
11
12
|
it_is Moveable
|
12
13
|
|
@@ -78,37 +79,6 @@ class Sprite
|
|
78
79
|
|
79
80
|
end
|
80
81
|
|
81
|
-
# Do something threaded.
|
82
|
-
#
|
83
|
-
# Default is: Instantly, in the next step.
|
84
|
-
#
|
85
|
-
# Note: Can also be called with after.
|
86
|
-
#
|
87
|
-
def threaded time = 1, &code
|
88
|
-
self.window.threaded time, &code
|
89
|
-
end
|
90
|
-
alias after threaded
|
91
|
-
|
92
|
-
# Some things you can only do every x time units.
|
93
|
-
#
|
94
|
-
# Example:
|
95
|
-
# sometimes :loading, self.frequency do
|
96
|
-
# projectile = self.shot.shoot_from self
|
97
|
-
# projectile.rotation = self.muzzle_rotation[target]
|
98
|
-
# projectile.speed = self.muzzle_velocity[target] * projectile.velocity
|
99
|
-
# end
|
100
|
-
#
|
101
|
-
def sometimes variable, units = 1, &block
|
102
|
-
name = :"@#{variable}"
|
103
|
-
return if instance_variable_get(name)
|
104
|
-
instance_variable_set name, true
|
105
|
-
result = block.call
|
106
|
-
threaded units.to_i do
|
107
|
-
self.instance_variable_set name, false
|
108
|
-
end
|
109
|
-
result
|
110
|
-
end
|
111
|
-
|
112
82
|
# A sprite is not added to the physical environment.
|
113
83
|
#
|
114
84
|
# Override if you want it to.
|
data/lib/units/thing.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Threading do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@window = stub :window, :things => []
|
7
|
+
@threaded = test_class_with(Threading).new @window
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "sometimes" do
|
11
|
+
it "should only call the block's content every x times" do
|
12
|
+
@threaded.stub! :threaded => nil
|
13
|
+
|
14
|
+
@threaded.sometimes(:some_id, :some_time) { :some_result }.should == :some_result
|
15
|
+
@threaded.sometimes(:some_id, :some_time) { :some_result }.should == nil
|
16
|
+
|
17
|
+
@threaded.instance_variable_set(:'@__sometimes_some_id', false)
|
18
|
+
@threaded.sometimes(:some_id, :some_time) { :some_result }.should == :some_result
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "threaded" do
|
23
|
+
before(:each) do
|
24
|
+
@scheduling = stub :scheduling
|
25
|
+
@window.stub! :scheduling => @scheduling
|
26
|
+
end
|
27
|
+
it "should delegate to the window's scheduling" do
|
28
|
+
some_block = lambda {}
|
29
|
+
@scheduling.should_receive(:add).once.with :some_time, &some_block
|
30
|
+
|
31
|
+
@threaded.threaded :some_time, &some_block
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -41,21 +41,21 @@ describe Turnable do
|
|
41
41
|
it "should have a defined turn_speed method" do
|
42
42
|
lambda { @turnable.turn_speed }.should_not raise_error
|
43
43
|
end
|
44
|
-
it "should return the class defined turn_speed
|
45
|
-
@turnable.turn_speed.should ==
|
44
|
+
it "should return the class defined turn_speed" do
|
45
|
+
@turnable.turn_speed.should == 1.3
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "turn_left" do
|
50
50
|
it "should subtract an amount from the rotation" do
|
51
|
-
@turnable.should_receive(:rotation=).once.with 0.
|
51
|
+
@turnable.should_receive(:rotation=).once.with 0.987
|
52
52
|
|
53
53
|
@turnable.turn_left
|
54
54
|
end
|
55
55
|
end
|
56
56
|
describe "turn_right" do
|
57
57
|
it "should add an amount to the rotation" do
|
58
|
-
@turnable.should_receive(:rotation=).once.with 1.
|
58
|
+
@turnable.should_receive(:rotation=).once.with 1.013
|
59
59
|
|
60
60
|
@turnable.turn_right
|
61
61
|
end
|
@@ -70,10 +70,14 @@ describe Thing do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
describe "threaded" do
|
73
|
+
before(:each) do
|
74
|
+
@scheduling = stub :scheduling
|
75
|
+
@window.stub! :scheduling => @scheduling
|
76
|
+
end
|
73
77
|
it "should delegate to the window" do
|
74
78
|
some_block = Proc.new {}
|
75
79
|
|
76
|
-
@
|
80
|
+
@scheduling.should_receive(:add).once.with :some_time, &some_block
|
77
81
|
|
78
82
|
@thing.threaded :some_time, &some_block
|
79
83
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 3
|
9
|
+
version: 0.3.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Florian Hanke
|
@@ -15,8 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-04-
|
19
|
-
default_executable:
|
18
|
+
date: 2010-04-16 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: gosu
|
@@ -44,8 +44,8 @@ dependencies:
|
|
44
44
|
version_requirements: *id002
|
45
45
|
description: ""
|
46
46
|
email: florian.hanke@gmail.com
|
47
|
-
executables:
|
48
|
-
|
47
|
+
executables: []
|
48
|
+
|
49
49
|
extensions: []
|
50
50
|
|
51
51
|
extra_rdoc_files: []
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- lib/core/scheduling.rb
|
70
70
|
- lib/core/sprites.rb
|
71
71
|
- lib/core/things.rb
|
72
|
+
- lib/core/threading.rb
|
72
73
|
- lib/core/trait.rb
|
73
74
|
- lib/core/traits.rb
|
74
75
|
- lib/core/vector_utilities.rb
|
@@ -138,6 +139,7 @@ test_files:
|
|
138
139
|
- spec/lib/core/initializer_hooks_spec.rb
|
139
140
|
- spec/lib/core/it_is_a_spec.rb
|
140
141
|
- spec/lib/core/layer_spec.rb
|
142
|
+
- spec/lib/core/threading_spec.rb
|
141
143
|
- spec/lib/core/trait_spec.rb
|
142
144
|
- spec/lib/core/traits_spec.rb
|
143
145
|
- spec/lib/extensions/module_spec.rb
|
data/bin/gogogosu
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
# TODO remove
|
3
|
-
|
4
|
-
Signal.trap("INT") { puts; exit } # CTRL-C
|
5
|
-
|
6
|
-
File.open(File.join(File.dirname(__FILE__), '../VERSION')) do |f|
|
7
|
-
puts "Gosu Extensions #{f.read}"
|
8
|
-
end
|
9
|
-
|
10
|
-
application = ARGV.first
|
11
|
-
|
12
|
-
puts "Usage: gogogosu <application_name>" and exit(1) unless application
|
13
|
-
|
14
|
-
require File.dirname(__FILE__) + '/../generator/gogogosu'
|
15
|
-
|
16
|
-
generator = Generator::Gogogosu.new
|
17
|
-
|
18
|
-
generator.dir application do
|
19
|
-
generator.dir 'lib' do
|
20
|
-
|
21
|
-
end
|
22
|
-
generator.dir 'media' do
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
puts <<-START
|
28
|
-
Great!
|
29
|
-
|
30
|
-
Now proceed as follows:
|
31
|
-
1. cd #{application}
|
32
|
-
2.
|
33
|
-
START
|