gosu_extensions 0.1.25 → 0.1.26
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/gosu_extensions.rb +1 -0
- data/lib/traits/damaging.rb +3 -1
- data/lib/traits/hitpoints.rb +71 -0
- data/lib/traits/imageable.rb +2 -0
- data/spec/lib/core/traits_spec.rb +1 -1
- data/spec/lib/traits/damaging_spec.rb +2 -0
- data/spec/lib/traits/imageable_spec.rb +2 -0
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.26
|
data/lib/gosu_extensions.rb
CHANGED
data/lib/traits/damaging.rb
CHANGED
@@ -29,6 +29,7 @@ module Damaging extend Trait
|
|
29
29
|
class DamageMissingError < RuntimeError
|
30
30
|
def initialize
|
31
31
|
super <<-MESSAGE
|
32
|
+
|
32
33
|
In a Damaging thing, you need to define method
|
33
34
|
damage damage = nil, &block
|
34
35
|
with params
|
@@ -36,6 +37,7 @@ module Damaging extend Trait
|
|
36
37
|
or
|
37
38
|
damage { 13 + rand(7) } # some block
|
38
39
|
to define how much damage the thing does.
|
40
|
+
|
39
41
|
MESSAGE
|
40
42
|
end
|
41
43
|
end
|
@@ -45,7 +47,7 @@ module Damaging extend Trait
|
|
45
47
|
end
|
46
48
|
|
47
49
|
def initialize window
|
48
|
-
raise DamageMissingError.new unless
|
50
|
+
raise DamageMissingError.new unless respond_to?(:damage)
|
49
51
|
super window
|
50
52
|
end
|
51
53
|
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# When hitpoints are at zero or lower, it calls kill! if available, destroy! else.
|
2
|
+
#
|
3
|
+
module Hitpoints extend Trait
|
4
|
+
|
5
|
+
# TODO def revive!
|
6
|
+
#
|
7
|
+
|
8
|
+
# Prints an amount of information on these capabilities.
|
9
|
+
#
|
10
|
+
manual <<-MANUAL
|
11
|
+
Defines:
|
12
|
+
hitpoints <some trait>
|
13
|
+
|
14
|
+
Example:
|
15
|
+
hitpoints 10_000
|
16
|
+
|
17
|
+
Call hit(damage = 1) to remove hitpoints. This will call
|
18
|
+
* hit! if hitpoints are still higher than 0.
|
19
|
+
* kill!, and if not available, destroy! if hitpoints are lower than 0.
|
20
|
+
MANUAL
|
21
|
+
|
22
|
+
def self.included target_class
|
23
|
+
target_class.extend ClassMethods
|
24
|
+
end
|
25
|
+
|
26
|
+
module ClassMethods
|
27
|
+
|
28
|
+
# Define the amount of hitpoints of the thing.
|
29
|
+
#
|
30
|
+
def hitpoints amount
|
31
|
+
include InstanceMethods
|
32
|
+
class_inheritable_accessor :prototype_hitpoints
|
33
|
+
self.prototype_hitpoints = amount
|
34
|
+
|
35
|
+
hook = lambda { self.hitpoints = self.class.prototype_hitpoints }
|
36
|
+
InitializerHooks.register self, &hook
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
module InstanceMethods
|
42
|
+
|
43
|
+
attr_accessor :hitpoints
|
44
|
+
|
45
|
+
# Override to handle hit!
|
46
|
+
#
|
47
|
+
def hit!
|
48
|
+
|
49
|
+
end
|
50
|
+
# Hit the thing with that much damage.
|
51
|
+
#
|
52
|
+
# hit!-s if hitpoints higher than 0
|
53
|
+
# kill!-s if lower, or destroy!-s if kill!
|
54
|
+
# is not available.
|
55
|
+
#
|
56
|
+
def hit damage = 1
|
57
|
+
self.hitpoints -= damage
|
58
|
+
if self.hitpoints > 0
|
59
|
+
hit!
|
60
|
+
else
|
61
|
+
if respond_to?(:kill!)
|
62
|
+
kill!
|
63
|
+
else
|
64
|
+
destroy!
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
data/lib/traits/imageable.rb
CHANGED
@@ -3,12 +3,14 @@ module Imageable extend Trait
|
|
3
3
|
class ImageMissingError < RuntimeError
|
4
4
|
def initialize
|
5
5
|
super <<-MESSAGE
|
6
|
+
|
6
7
|
In an Imageable, you either need to define method
|
7
8
|
image path, *args
|
8
9
|
for an unchanging image
|
9
10
|
or
|
10
11
|
sequenced_image path, width, height, frequency = 10, &block
|
11
12
|
for a sprite sequence.
|
13
|
+
|
12
14
|
MESSAGE
|
13
15
|
end
|
14
16
|
end
|
@@ -6,7 +6,7 @@ describe Traits do
|
|
6
6
|
it "should return a list of all traits that can be included using it_is_a, it_is, or it_has" do
|
7
7
|
ActiveSupport::Deprecation.stub! :warn => :shut_up
|
8
8
|
|
9
|
-
Traits.list.should == [Attachable, Controllable, Damaging, Generator, Imageable, Lives, Moveable, Pod, Shooter, ShortLived, Shot, Targetable, Targeting::Closest, Turnable]
|
9
|
+
Traits.list.should == [Attachable, Controllable, Damaging, Generator, Hitpoints, Imageable, Lives, Moveable, Pod, Shooter, ShortLived, Shot, Targetable, Targeting::Closest, Turnable]
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -35,6 +35,7 @@ describe Damaging do
|
|
35
35
|
end
|
36
36
|
it "should raise with the right message" do
|
37
37
|
lambda { @damaging_class.new(@window) }.should raise_error(Damaging::DamageMissingError, <<-MESSAGE
|
38
|
+
|
38
39
|
In a Damaging thing, you need to define method
|
39
40
|
damage damage = nil, &block
|
40
41
|
with params
|
@@ -42,6 +43,7 @@ describe Damaging do
|
|
42
43
|
or
|
43
44
|
damage { 13 + rand(7) } # some block
|
44
45
|
to define how much damage the thing does.
|
46
|
+
|
45
47
|
MESSAGE
|
46
48
|
)
|
47
49
|
end
|
@@ -45,12 +45,14 @@ describe Imageable do
|
|
45
45
|
end
|
46
46
|
it "should raise with the right message" do
|
47
47
|
lambda { @imageable_class.new(@window) }.should raise_error(Imageable::ImageMissingError, <<-MESSAGE
|
48
|
+
|
48
49
|
In an Imageable, you either need to define method
|
49
50
|
image path, *args
|
50
51
|
for an unchanging image
|
51
52
|
or
|
52
53
|
sequenced_image path, width, height, frequency = 10, &block
|
53
54
|
for a sprite sequence.
|
55
|
+
|
54
56
|
MESSAGE
|
55
57
|
)
|
56
58
|
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
|
+
- 26
|
9
|
+
version: 0.1.26
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Florian Hanke
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- lib/traits/controllable.rb
|
76
76
|
- lib/traits/damaging.rb
|
77
77
|
- lib/traits/generator.rb
|
78
|
+
- lib/traits/hitpoints.rb
|
78
79
|
- lib/traits/imageable.rb
|
79
80
|
- lib/traits/lives.rb
|
80
81
|
- lib/traits/moveable.rb
|