smash_and_grab 0.0.5alpha → 0.0.6alpha
Sign up to get free protection for your applications and to get access to all the features.
- data/{CHANGELOG.txt → CHANGELOG.md} +0 -0
- data/Gemfile.lock +8 -4
- data/LICENSE.txt +20 -0
- data/README.md +30 -14
- data/Rakefile +2 -2
- data/config/lang/objects/entities/en.yml +134 -0
- data/config/lang/objects/static/en.yml +8 -0
- data/config/lang/objects/vehicles/en.yml +11 -0
- data/config/map/entities.yml +42 -38
- data/lib/smash_and_grab.rb +5 -0
- data/lib/smash_and_grab/abilities.rb +1 -1
- data/lib/smash_and_grab/abilities/ability.rb +45 -3
- data/lib/smash_and_grab/abilities/drop.rb +38 -0
- data/lib/smash_and_grab/abilities/melee.rb +4 -6
- data/lib/smash_and_grab/abilities/pick_up.rb +33 -0
- data/lib/smash_and_grab/abilities/ranged.rb +18 -12
- data/lib/smash_and_grab/abilities/sprint.rb +11 -7
- data/lib/smash_and_grab/chingu_ext/basic_game_object.rb +26 -0
- data/lib/smash_and_grab/game_window.rb +5 -1
- data/lib/smash_and_grab/gui/entity_panel.rb +26 -10
- data/lib/smash_and_grab/gui/entity_summary.rb +19 -11
- data/lib/smash_and_grab/gui/game_log.rb +6 -2
- data/lib/smash_and_grab/gui/info_panel.rb +7 -4
- data/lib/smash_and_grab/gui/object_panel.rb +6 -2
- data/lib/smash_and_grab/gui/scenario_panel.rb +4 -0
- data/lib/smash_and_grab/history/action_history.rb +1 -1
- data/lib/smash_and_grab/main.rb +7 -3
- data/lib/smash_and_grab/map/faction.rb +26 -8
- data/lib/smash_and_grab/map/map.rb +21 -12
- data/lib/smash_and_grab/map/tile.rb +29 -2
- data/lib/smash_and_grab/map/wall.rb +2 -2
- data/lib/smash_and_grab/mixins/has_contents.rb +38 -0
- data/lib/smash_and_grab/mixins/line_of_sight.rb +129 -0
- data/lib/smash_and_grab/mixins/pathfinding.rb +145 -0
- data/lib/smash_and_grab/mouse_selection.rb +107 -36
- data/lib/smash_and_grab/objects/entity.rb +311 -260
- data/lib/smash_and_grab/objects/floating_text.rb +0 -1
- data/lib/smash_and_grab/objects/static.rb +10 -3
- data/lib/smash_and_grab/objects/vehicle.rb +7 -2
- data/lib/smash_and_grab/objects/world_object.rb +10 -3
- data/lib/smash_and_grab/path.rb +38 -12
- data/lib/smash_and_grab/players/ai.rb +91 -0
- data/lib/smash_and_grab/players/human.rb +9 -0
- data/lib/smash_and_grab/players/player.rb +16 -65
- data/lib/smash_and_grab/players/remote.rb +9 -0
- data/lib/smash_and_grab/sprite_sheet.rb +9 -0
- data/lib/smash_and_grab/states/edit_level.rb +15 -4
- data/lib/smash_and_grab/states/main_menu.rb +16 -4
- data/lib/smash_and_grab/states/play_level.rb +88 -28
- data/lib/smash_and_grab/states/world.rb +17 -9
- data/lib/smash_and_grab/version.rb +1 -1
- data/lib/smash_and_grab/z_order.rb +6 -5
- data/media/images/path.png +0 -0
- data/media/images/tile_selection.png +0 -0
- data/media/images/tiles_selection.png +0 -0
- data/smash_and_grab.gemspec +2 -2
- data/tasks/create_portraits.rb +39 -0
- data/tasks/outline_images.rb +56 -0
- data/test/smash_and_grab/abilities/drop_test.rb +68 -0
- data/test/smash_and_grab/abilities/melee_test.rb +4 -4
- data/test/smash_and_grab/abilities/pick_up_test.rb +68 -0
- data/test/smash_and_grab/abilities/ranged_test.rb +105 -0
- data/test/smash_and_grab/abilities/sprint_test.rb +55 -25
- data/test/smash_and_grab/map/faction_test.rb +18 -16
- data/test/smash_and_grab/map/map_test.rb +9 -4
- metadata +51 -19
- data/lib/smash_and_grab/fidgit_ext/event.rb +0 -77
@@ -0,0 +1,68 @@
|
|
1
|
+
require_relative "../../teststrap"
|
2
|
+
require_relative "helpers/ability_helper"
|
3
|
+
describe SmashAndGrab::Abilities::Drop do
|
4
|
+
before do
|
5
|
+
@entity = Object.new
|
6
|
+
@object = Object.new
|
7
|
+
@map = Object.new
|
8
|
+
@tile = SmashAndGrab::Tile.new(:grass, nil, 1, 2)
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { SmashAndGrab::Abilities.ability @entity, type: :drop }
|
12
|
+
|
13
|
+
behaves_like SmashAndGrab::Abilities::Ability
|
14
|
+
|
15
|
+
should "be initialized" do
|
16
|
+
subject.owner.should.equal @entity
|
17
|
+
subject.can_be_undone?.should.be.true
|
18
|
+
subject.skill.should.equal 0
|
19
|
+
subject.action_cost.should.equal 1
|
20
|
+
end
|
21
|
+
|
22
|
+
should "serialize to json correctly" do
|
23
|
+
JSON.parse(subject.to_json).symbolize.should.equal(
|
24
|
+
type: :drop,
|
25
|
+
skill: 0,
|
26
|
+
action_cost: 1
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
should "generate appropriate action_data" do
|
31
|
+
stub(@entity).id.returns 12
|
32
|
+
stub(@object).id.returns 13
|
33
|
+
stub(@entity).contents.returns @object
|
34
|
+
mock(@entity).tile.stub!.adjacent_tiles(@entity).stub!.find_all(&:empty?).stub!.sample.returns @tile
|
35
|
+
subject.action_data.should.equal(
|
36
|
+
ability: :drop,
|
37
|
+
skill: 0,
|
38
|
+
action_cost: 1,
|
39
|
+
|
40
|
+
owner_id: 12,
|
41
|
+
target_id: 13,
|
42
|
+
target_position: [1, 2],
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#do" do
|
47
|
+
should "remove action points and drop object onto the tile" do
|
48
|
+
stub(@entity).action_points.returns 1
|
49
|
+
mock(@entity).map.stub!.tile_at_grid(1, 2).returns @tile
|
50
|
+
mock(@entity).action_points = 0
|
51
|
+
mock(@entity).drop @tile
|
52
|
+
|
53
|
+
subject.do action_cost: 1, target_id: 13, target_position: [1, 2]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#undo" do
|
58
|
+
should "give give action points and pick up the object from tile" do
|
59
|
+
stub(@object).tile.returns @tile
|
60
|
+
stub(@entity).map.stub!.object_by_id(13).returns @object
|
61
|
+
stub(@entity).action_points.returns 0
|
62
|
+
mock(@entity).action_points = 1
|
63
|
+
mock(@entity).pick_up @object
|
64
|
+
|
65
|
+
subject.undo action_cost: 1, target_id: 13, target_position: [1, 2]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -58,7 +58,7 @@ describe SmashAndGrab::Abilities::Melee do
|
|
58
58
|
|
59
59
|
should "never give a value less than 1" do
|
60
60
|
stub(subject).rand(is_a(Integer)) { 0 }
|
61
|
-
subject.random_damage ==
|
61
|
+
subject.random_damage == 0
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -67,7 +67,7 @@ describe SmashAndGrab::Abilities::Melee do
|
|
67
67
|
stub(@entity).map.stub!.object_by_id(13).returns @enemy
|
68
68
|
stub(@entity).action_points.returns 1
|
69
69
|
mock(@entity).action_points = 0
|
70
|
-
mock(@entity).
|
70
|
+
mock(@entity).make_melee_attack(@enemy, 5)
|
71
71
|
|
72
72
|
subject.do action_cost: 1, target_id: 13, damage: 5 #, target_position: [1, 2]
|
73
73
|
end
|
@@ -79,7 +79,7 @@ describe SmashAndGrab::Abilities::Melee do
|
|
79
79
|
stub(@entity).map.stub!.object_by_id(13).returns @enemy
|
80
80
|
stub(@entity).action_points.returns 0
|
81
81
|
mock(@entity).action_points = 1
|
82
|
-
mock(@entity).
|
82
|
+
mock(@entity).make_melee_attack(@enemy, -5)
|
83
83
|
|
84
84
|
subject.undo action_cost: 1, target_id: 13, damage: 5, target_position: [1, 2]
|
85
85
|
end
|
@@ -87,7 +87,7 @@ describe SmashAndGrab::Abilities::Melee do
|
|
87
87
|
should "give action points, health and return to map (if target dead)" do
|
88
88
|
stub(@enemy).tile.returns nil
|
89
89
|
mock(@enemy).tile = @tile
|
90
|
-
mock(@entity).
|
90
|
+
mock(@entity).make_melee_attack(@enemy, -5)
|
91
91
|
|
92
92
|
stub(@entity).map do
|
93
93
|
stub(@map).object_by_id(13).returns @enemy
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require_relative "../../teststrap"
|
2
|
+
require_relative "helpers/ability_helper"
|
3
|
+
describe SmashAndGrab::Abilities::PickUp do
|
4
|
+
before do
|
5
|
+
@entity = Object.new
|
6
|
+
@object = Object.new
|
7
|
+
@map = Object.new
|
8
|
+
@tile = SmashAndGrab::Tile.new(:grass, nil, 1, 2)
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { SmashAndGrab::Abilities.ability @entity, type: :pick_up }
|
12
|
+
|
13
|
+
behaves_like SmashAndGrab::Abilities::Ability
|
14
|
+
|
15
|
+
should "be initialized" do
|
16
|
+
subject.owner.should.equal @entity
|
17
|
+
subject.can_be_undone?.should.be.true
|
18
|
+
subject.skill.should.equal 0
|
19
|
+
subject.action_cost.should.equal 1
|
20
|
+
end
|
21
|
+
|
22
|
+
should "serialize to json correctly" do
|
23
|
+
JSON.parse(subject.to_json).symbolize.should.equal(
|
24
|
+
type: :pick_up,
|
25
|
+
skill: 0,
|
26
|
+
action_cost: 1
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
should "generate appropriate action_data" do
|
31
|
+
stub(@entity).id.returns 12
|
32
|
+
stub(@object).id.returns 13
|
33
|
+
stub(@object).tile.returns @tile
|
34
|
+
stub(@tile).object.returns @object
|
35
|
+
stub(subject).random_damage.returns 5
|
36
|
+
subject.action_data(@object).should.equal(
|
37
|
+
ability: :pick_up,
|
38
|
+
skill: 0,
|
39
|
+
action_cost: 1,
|
40
|
+
|
41
|
+
owner_id: 12,
|
42
|
+
target_id: 13,
|
43
|
+
target_position: [1, 2],
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#do" do
|
48
|
+
should "remove action points and pick up" do
|
49
|
+
stub(@entity).map.stub!.object_by_id(13).returns @object
|
50
|
+
stub(@entity).action_points.returns 1
|
51
|
+
mock(@entity).action_points = 0
|
52
|
+
mock(@entity).pick_up @object
|
53
|
+
|
54
|
+
subject.do action_cost: 1, target_id: 13, target_position: [1, 2]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#undo" do
|
59
|
+
should "give give action points and drop" do
|
60
|
+
stub(@entity).action_points.returns 0
|
61
|
+
mock(@entity).map.stub!.tile_at_grid(1, 2).returns @tile
|
62
|
+
mock(@entity).action_points = 1
|
63
|
+
mock(@entity).drop @tile
|
64
|
+
|
65
|
+
subject.undo action_cost: 1, target_id: 13, target_position: [1, 2]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require_relative "../../teststrap"
|
2
|
+
require_relative "helpers/ability_helper"
|
3
|
+
|
4
|
+
describe SmashAndGrab::Abilities::Ranged do
|
5
|
+
before do
|
6
|
+
@entity = Object.new
|
7
|
+
@enemy = Object.new
|
8
|
+
@map = Object.new
|
9
|
+
@tile = SmashAndGrab::Tile.new(:grass, nil, 1, 2)
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { SmashAndGrab::Abilities.ability @entity, type: :ranged, skill: 5, max_range: 5 }
|
13
|
+
|
14
|
+
behaves_like SmashAndGrab::Abilities::Ability
|
15
|
+
|
16
|
+
should "fail if not given the required arguments" do
|
17
|
+
->{ SmashAndGrab::Abilities.ability @entity, type: :ranged }.should.raise(ArgumentError).message.should.match /no :max_range specified/
|
18
|
+
end
|
19
|
+
|
20
|
+
should "be initialized" do
|
21
|
+
subject.owner.should.equal @entity
|
22
|
+
subject.can_be_undone?.should.be.false
|
23
|
+
subject.skill.should.equal 5
|
24
|
+
subject.action_cost.should.equal 1
|
25
|
+
end
|
26
|
+
|
27
|
+
should "serialize to json correctly" do
|
28
|
+
JSON.parse(subject.to_json).symbolize.should.equal(
|
29
|
+
type: :ranged,
|
30
|
+
skill: 5,
|
31
|
+
action_cost: 1,
|
32
|
+
min_range: 2,
|
33
|
+
max_range: 5
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
should "generate appropriate action_data" do
|
38
|
+
stub(@entity).id.returns 12
|
39
|
+
stub(@enemy).id.returns 13
|
40
|
+
stub(@enemy).tile.returns @tile
|
41
|
+
stub(@tile).object.returns @enemy
|
42
|
+
stub(subject).random_damage.returns 5
|
43
|
+
subject.action_data(@enemy).should.equal(
|
44
|
+
ability: :ranged,
|
45
|
+
skill: 5,
|
46
|
+
action_cost: 1,
|
47
|
+
|
48
|
+
owner_id: 12,
|
49
|
+
target_id: 13,
|
50
|
+
target_position: [1, 2],
|
51
|
+
damage: 5
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#random_damage" do
|
56
|
+
should "never give a value greater than skill" do
|
57
|
+
stub(subject).rand(is_a(Integer)) {|x| x - 1 }
|
58
|
+
subject.random_damage == 5
|
59
|
+
end
|
60
|
+
|
61
|
+
should "never give a value less than 1" do
|
62
|
+
stub(subject).rand(is_a(Integer)) { 0 }
|
63
|
+
subject.random_damage == 0
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#do" do
|
68
|
+
should "remove action points and health" do
|
69
|
+
stub(@entity).map.stub!.object_by_id(13).returns @enemy
|
70
|
+
stub(@entity).action_points.returns 1
|
71
|
+
mock(@entity).action_points = 0
|
72
|
+
mock(@entity).make_ranged_attack(@enemy, 5)
|
73
|
+
|
74
|
+
subject.do action_cost: 1, target_id: 13, damage: 5 #, target_position: [1, 2]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#undo" do
|
79
|
+
should "give action points and health (if target alive)" do
|
80
|
+
stub(@enemy).tile.returns @tile
|
81
|
+
stub(@entity).map.stub!.object_by_id(13).returns @enemy
|
82
|
+
stub(@entity).action_points.returns 0
|
83
|
+
mock(@entity).action_points = 1
|
84
|
+
mock(@entity).make_ranged_attack(@enemy, -5)
|
85
|
+
|
86
|
+
subject.undo action_cost: 1, target_id: 13, damage: 5, target_position: [1, 2]
|
87
|
+
end
|
88
|
+
|
89
|
+
should "give action points, health and return to map (if target dead)" do
|
90
|
+
stub(@enemy).tile.returns nil
|
91
|
+
mock(@enemy).tile = @tile
|
92
|
+
mock(@entity).make_ranged_attack(@enemy, -5)
|
93
|
+
|
94
|
+
stub(@entity).map do
|
95
|
+
stub(@map).object_by_id(13).returns @enemy
|
96
|
+
stub(@map).tile_at_grid([1, 2]).returns @tile
|
97
|
+
@map
|
98
|
+
end
|
99
|
+
stub(@entity).action_points.returns 0
|
100
|
+
mock(@entity).action_points = 1
|
101
|
+
|
102
|
+
subject.undo action_cost: 1, target_id: 13, damage: 5, target_position: [1, 2]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -2,22 +2,32 @@ require_relative "../../teststrap"
|
|
2
2
|
require_relative "helpers/ability_helper"
|
3
3
|
|
4
4
|
describe SmashAndGrab::Abilities::Sprint do
|
5
|
-
|
5
|
+
before do
|
6
|
+
@entity = Object.new
|
7
|
+
mock(@entity).subscribe :ended_turn
|
8
|
+
end
|
6
9
|
|
7
|
-
subject { SmashAndGrab::Abilities.ability entity, type: :sprint, skill: 3 }
|
10
|
+
subject { SmashAndGrab::Abilities.ability @entity, type: :sprint, skill: 3 }
|
8
11
|
|
9
12
|
behaves_like SmashAndGrab::Abilities::Ability
|
10
13
|
|
11
14
|
should "fail if not given the required arguments" do
|
12
|
-
->{ SmashAndGrab::Abilities.ability entity, type: :sprint }.should.raise(ArgumentError).message.should.match /No skill value for/
|
15
|
+
->{ SmashAndGrab::Abilities.ability @entity, type: :sprint }.should.raise(ArgumentError).message.should.match /No skill value for/
|
13
16
|
end
|
14
17
|
|
15
18
|
should "be initialized" do
|
16
|
-
|
19
|
+
stub(@entity).max_action_points.returns 2
|
20
|
+
stub(@entity).action_points.returns 2
|
21
|
+
stub(@entity).max_movement_points.returns 5
|
22
|
+
stub(@entity).movement_points.returns 5
|
23
|
+
|
24
|
+
subject.owner.should.equal @entity
|
17
25
|
subject.can_be_undone?.should.be.true
|
18
26
|
subject.skill.should.equal 3
|
27
|
+
subject.active?.should.equal false
|
28
|
+
subject.activate?.should.equal true
|
29
|
+
subject.deactivate?.should.equal false
|
19
30
|
|
20
|
-
stub(entity).max_action_points.returns 2
|
21
31
|
subject.action_cost.should.equal 2
|
22
32
|
end
|
23
33
|
|
@@ -30,9 +40,9 @@ describe SmashAndGrab::Abilities::Sprint do
|
|
30
40
|
end
|
31
41
|
|
32
42
|
should "generate appropriate action_data" do
|
33
|
-
mock(entity).id.returns 12
|
34
|
-
mock(entity).max_movement_points.returns 11
|
35
|
-
mock(entity).max_action_points.returns 2
|
43
|
+
mock(@entity).id.returns 12
|
44
|
+
mock(@entity).max_movement_points.returns 11
|
45
|
+
mock(@entity).max_action_points.returns 2
|
36
46
|
subject.action_data.should.equal(
|
37
47
|
ability: :sprint,
|
38
48
|
skill: 3,
|
@@ -46,30 +56,50 @@ describe SmashAndGrab::Abilities::Sprint do
|
|
46
56
|
describe "owner has max_mp == 100" do
|
47
57
|
{ 1 => 1, 2 => 25, 3 => 50, 4 => 75, 5 => 100 }.each do |skill, expected_bonus|
|
48
58
|
should "have #movement_bonus == #{expected_bonus} with #skill == #{skill}" do
|
49
|
-
mock(entity).max_movement_points.returns 100
|
59
|
+
mock(@entity).max_movement_points.returns 100
|
50
60
|
mock(subject).skill.returns skill
|
51
61
|
subject.movement_bonus.should.equal expected_bonus
|
52
62
|
end
|
53
63
|
end
|
54
64
|
end
|
55
65
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
66
|
+
# Do and undo operate the same; they toggle on/off based on whether the ability is active?
|
67
|
+
[:do, :undo].each do |meth|
|
68
|
+
describe "##{meth}" do
|
69
|
+
should "toggle on to increase movement points and decrease action points" do
|
70
|
+
stub(@entity).max_action_points.returns 2
|
71
|
+
stub(@entity).action_points.returns 2
|
72
|
+
stub(@entity).max_movement_points.returns 5
|
73
|
+
stub(@entity).movement_points.returns 5
|
74
|
+
|
75
|
+
mock(@entity).action_points = 0
|
76
|
+
mock(@entity).movement_points = 10
|
77
|
+
subject.send meth, action_cost: 2, movement_bonus: 5
|
78
|
+
|
79
|
+
subject.activate?.should.equal false
|
80
|
+
subject.deactivate?.should.equal true
|
81
|
+
end
|
82
|
+
|
83
|
+
should "toggle off to decrease movement points and increase action points" do
|
84
|
+
# Activate first.
|
85
|
+
subject.instance_variable_set :@active, true
|
86
|
+
|
87
|
+
# Now deactivate.
|
88
|
+
stub(@entity).max_action_points.returns 2
|
89
|
+
stub(@entity).action_points.returns 0
|
90
|
+
stub(@entity).max_movement_points.returns 5
|
91
|
+
stub(@entity).movement_points.returns 10
|
65
92
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
93
|
+
mock(@entity).action_points = 2
|
94
|
+
mock(@entity).movement_points = 5
|
95
|
+
subject.send meth, action_cost: 2, movement_bonus: 5
|
96
|
+
|
97
|
+
stub(@entity).action_points.returns 2
|
98
|
+
stub(@entity).movement_points.returns 5
|
99
|
+
|
100
|
+
subject.activate?.should.equal true
|
101
|
+
subject.deactivate?.should.equal false
|
102
|
+
end
|
73
103
|
end
|
74
104
|
end
|
75
105
|
end
|
@@ -12,23 +12,25 @@ shared SmashAndGrab::Factions::Faction do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
describe SmashAndGrab::Factions::Faction do
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
before do
|
16
|
+
@baddies = SmashAndGrab::Factions::Baddies.new
|
17
|
+
@goodies = SmashAndGrab::Factions::Goodies.new
|
18
|
+
@bystanders = SmashAndGrab::Factions::Bystanders.new
|
19
|
+
end
|
18
20
|
|
19
|
-
subject { described.new
|
21
|
+
subject { described.new }
|
20
22
|
|
21
23
|
describe SmashAndGrab::Factions::Goodies do
|
22
24
|
behaves_like SmashAndGrab::Factions::Faction
|
23
25
|
|
24
26
|
should "dislike baddies" do
|
25
|
-
subject.should.be.enemy? baddies
|
26
|
-
subject.should.not.be.friend? baddies
|
27
|
+
subject.should.be.enemy? @baddies
|
28
|
+
subject.should.not.be.friend? @baddies
|
27
29
|
end
|
28
30
|
|
29
31
|
should "like bystanders" do
|
30
|
-
subject.should.not.be.enemy? bystanders
|
31
|
-
subject.should.be.friend? bystanders
|
32
|
+
subject.should.not.be.enemy? @bystanders
|
33
|
+
subject.should.be.friend? @bystanders
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -36,13 +38,13 @@ describe SmashAndGrab::Factions::Faction do
|
|
36
38
|
behaves_like SmashAndGrab::Factions::Faction
|
37
39
|
|
38
40
|
should "dislike goodies" do
|
39
|
-
subject.should.be.enemy? goodies
|
40
|
-
subject.should.not.be.friend? goodies
|
41
|
+
subject.should.be.enemy? @goodies
|
42
|
+
subject.should.not.be.friend? @goodies
|
41
43
|
end
|
42
44
|
|
43
45
|
should "dislike bystanders" do
|
44
|
-
subject.should.be.enemy? bystanders
|
45
|
-
subject.should.not.be.friend? bystanders
|
46
|
+
subject.should.be.enemy? @bystanders
|
47
|
+
subject.should.not.be.friend? @bystanders
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
@@ -50,13 +52,13 @@ describe SmashAndGrab::Factions::Faction do
|
|
50
52
|
behaves_like SmashAndGrab::Factions::Faction
|
51
53
|
|
52
54
|
should "like goodies" do
|
53
|
-
subject.should.not.be.enemy? goodies
|
54
|
-
subject.should.be.friend? goodies
|
55
|
+
subject.should.not.be.enemy? @goodies
|
56
|
+
subject.should.be.friend? @goodies
|
55
57
|
end
|
56
58
|
|
57
59
|
should "dislike baddies" do
|
58
|
-
subject.should.be.enemy? baddies
|
59
|
-
subject.should.not.be.friend? baddies
|
60
|
+
subject.should.be.enemy? @baddies
|
61
|
+
subject.should.not.be.friend? @baddies
|
60
62
|
end
|
61
63
|
end
|
62
64
|
end
|