zyps 0.7.5 → 0.7.6
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/COPYING.txt +674 -674
- data/README_windows.txt +3 -0
- data/bin/zyps +17 -12
- data/bin/zyps-175 +514 -0
- data/bin/zyps_demo +139 -72
- data/lib/zyps.rb +71 -3
- data/lib/zyps/actions.rb +98 -9
- data/lib/zyps/conditions.rb +22 -0
- data/test/test_zyps.rb +51 -0
- data/test/zyps/test_actions.rb +78 -17
- data/test/zyps/test_conditions.rb +12 -0
- metadata +58 -64
data/lib/zyps/actions.rb
CHANGED
@@ -175,18 +175,19 @@ class TagAction < Action
|
|
175
175
|
end
|
176
176
|
|
177
177
|
|
178
|
-
#Blend the
|
179
|
-
class BlendAction <
|
180
|
-
#Color to apply to
|
178
|
+
#Blend the actor's color with another color.
|
179
|
+
class BlendAction < TimedAction
|
180
|
+
#Color to apply to actor.
|
181
181
|
attr_accessor :color
|
182
|
-
def initialize(color)
|
183
|
-
|
182
|
+
def initialize(rate, color)
|
183
|
+
super
|
184
|
+
@color = color
|
184
185
|
end
|
185
|
-
#Blend the
|
186
|
+
#Blend the actor's color with the assigned color.
|
186
187
|
def do(actor, targets)
|
187
|
-
|
188
|
-
|
189
|
-
|
188
|
+
actor.color.red += (@color.red - actor.color.red) * delta
|
189
|
+
actor.color.green += (@color.green - actor.color.green) * delta
|
190
|
+
actor.color.blue += (@color.blue - actor.color.blue) * delta
|
190
191
|
end
|
191
192
|
end
|
192
193
|
|
@@ -269,4 +270,92 @@ class BreedAction < Action
|
|
269
270
|
end
|
270
271
|
|
271
272
|
|
273
|
+
#Copies the given GameObject prototypes into the environment.
|
274
|
+
class SpawnAction < Action
|
275
|
+
#Environment to place children into.
|
276
|
+
attr_accessor :environment
|
277
|
+
#Array of GameObjects to copy into environment.
|
278
|
+
attr_accessor :prototypes
|
279
|
+
def initialize(environment, prototypes = [])
|
280
|
+
self.environment = environment
|
281
|
+
self.prototypes = prototypes
|
282
|
+
end
|
283
|
+
#Add children to environment.
|
284
|
+
def do(actor, targets)
|
285
|
+
prototypes.each do |prototype|
|
286
|
+
environment.objects << generate_child(actor, prototype)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
#Copy prototype to actor's location.
|
290
|
+
def generate_child(actor, prototype)
|
291
|
+
#Copy prototype so it can be spawned repeatedly if need be.
|
292
|
+
child = prototype.copy
|
293
|
+
child.location = actor.location.copy
|
294
|
+
child
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
#Copies the given GameObject prototypes into the environment and destroys actor.
|
300
|
+
#Shrapnel's original vector will be added to actor's vector.
|
301
|
+
#Shrapnel's size will be actor's size divided by number of shrapnel pieces.
|
302
|
+
class ExplodeAction < SpawnAction
|
303
|
+
#Calls super method.
|
304
|
+
#Also removes actor from environment.
|
305
|
+
def do(actor, targets)
|
306
|
+
super
|
307
|
+
environment.objects.delete(actor)
|
308
|
+
end
|
309
|
+
#Calls super method.
|
310
|
+
#Also adds actor's vector to child's.
|
311
|
+
#Finally, reduces child's size to actor's size divided by number of shrapnel pieces.
|
312
|
+
def generate_child(actor, prototype)
|
313
|
+
child = super
|
314
|
+
child.vector += actor.vector
|
315
|
+
child.size = actor.size / prototypes.length
|
316
|
+
child
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
|
321
|
+
|
322
|
+
#Copies the given GameObject prototypes into the environment.
|
323
|
+
#Bullet's vector angle will be added to angle to target.
|
324
|
+
class ShootAction < SpawnAction
|
325
|
+
#Collection of GameObjects to copy into environment.
|
326
|
+
#First element will be copied on first call, subsequent elements on subsequent calls, wrapping back to start once end is reached.
|
327
|
+
#If an element is a collection, all its members will be copied in at once.
|
328
|
+
attr_accessor :prototypes
|
329
|
+
def initialize(*arguments)
|
330
|
+
super
|
331
|
+
@prototype_index = 0
|
332
|
+
@target_index = 0
|
333
|
+
end
|
334
|
+
#Copies next prototype into environment.
|
335
|
+
def do(actor, targets)
|
336
|
+
return if targets.empty?
|
337
|
+
#If next item is a collection of prototypes, copy them all in at once.
|
338
|
+
if prototypes[@prototype_index].respond_to?(:each)
|
339
|
+
prototypes[@prototype_index].each do |prototype|
|
340
|
+
environment.objects << generate_child(actor, prototype, targets[@target_index])
|
341
|
+
end
|
342
|
+
#Otherwise copy the single prototype.
|
343
|
+
else
|
344
|
+
environment.objects << generate_child(actor, prototypes[@prototype_index], targets[@target_index])
|
345
|
+
end
|
346
|
+
#Move to next target and prototype group, wrapping to start of array if need be.
|
347
|
+
@target_index = (@target_index + 1) % targets.length
|
348
|
+
@prototype_index = (@prototype_index + 1) % prototypes.length
|
349
|
+
end
|
350
|
+
#Calls super method.
|
351
|
+
#Also adds angle to target to child's vector angle.
|
352
|
+
def generate_child(actor, prototype, target)
|
353
|
+
child = super(actor, prototype)
|
354
|
+
child.vector.pitch = Utility.find_angle(actor.location, target.location) + child.vector.pitch
|
355
|
+
child
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
|
360
|
+
|
272
361
|
end #module Zyps
|
data/lib/zyps/conditions.rb
CHANGED
@@ -105,4 +105,26 @@ class ClassCondition < Condition
|
|
105
105
|
end
|
106
106
|
|
107
107
|
|
108
|
+
#True if the given interval has elapsed.
|
109
|
+
class ElapsedTimeCondition < Condition
|
110
|
+
#The number of seconds that must elapse before the condition is true.
|
111
|
+
attr_accessor :interval
|
112
|
+
def initialize(interval = 1.0)
|
113
|
+
self.interval = interval
|
114
|
+
@clock = Clock.new
|
115
|
+
@elapsed_time = 0
|
116
|
+
end
|
117
|
+
#Returns the array of targets if the interval has elapsed.
|
118
|
+
def select(actor, targets)
|
119
|
+
@elapsed_time += @clock.elapsed_time
|
120
|
+
if @elapsed_time >= interval
|
121
|
+
@elapsed_time = 0
|
122
|
+
return targets
|
123
|
+
else
|
124
|
+
return []
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
|
108
130
|
end #module Zyps
|
data/test/test_zyps.rb
CHANGED
@@ -595,5 +595,56 @@ class TestBehavior < Test::Unit::TestCase
|
|
595
595
|
assert_equal(1, action.stop_count, "stop() should NOT have been called.")
|
596
596
|
end
|
597
597
|
|
598
|
+
end
|
599
|
+
|
600
|
+
|
601
|
+
class TestAdditions < Test::Unit::TestCase
|
602
|
+
|
603
|
+
#Add a new behavior to a creature with the given action.
|
604
|
+
def add_action(action, creature)
|
605
|
+
behavior = Behavior.new
|
606
|
+
behavior.actions << action
|
607
|
+
creature.behaviors << behavior
|
608
|
+
end
|
609
|
+
|
610
|
+
def setup
|
611
|
+
@environment = Environment.new
|
612
|
+
@actor = Creature.new(:name => 'target1', :location => Location.new(1, 1))
|
613
|
+
@env_fact = gravity = Gravity.new(200)
|
614
|
+
end
|
615
|
+
|
616
|
+
def test_environment_double_arrow_objects
|
617
|
+
assert_equal(0, @environment.objects.size)
|
618
|
+
@environment << @actor
|
619
|
+
assert_equal(1, @environment.objects.size)
|
620
|
+
assert_equal(0, @environment.environmental_factors.size)
|
621
|
+
end
|
622
|
+
|
623
|
+
def test_environment_double_arrow_factors
|
624
|
+
assert_equal(0, @environment.environmental_factors.size)
|
625
|
+
@environment << @env_fact
|
626
|
+
assert_equal(1, @environment.environmental_factors.size)
|
627
|
+
assert_equal(0, @environment.objects.size)
|
628
|
+
end
|
629
|
+
|
630
|
+
def test_game_object_double_arrow
|
631
|
+
#test color
|
632
|
+
@actor << Color.new(1,1,1)
|
633
|
+
assert_equal(Color.new(1,1,1), @actor.color)
|
634
|
+
#test vector
|
635
|
+
vect =Vector.new(23,13)
|
636
|
+
@actor << vect
|
637
|
+
assert_equal(vect, @actor.vector)
|
638
|
+
#test location
|
639
|
+
@actor << Location.new(13,13)
|
640
|
+
assert_equal(13, @actor.location.x)
|
641
|
+
assert_equal(13, @actor.location.y)
|
642
|
+
#test behavior
|
643
|
+
behavior = Behavior.new
|
644
|
+
behavior.actions << TagAction.new("1")
|
645
|
+
@actor << behavior
|
646
|
+
assert_equal(1, @actor.behaviors.size)
|
647
|
+
assert_equal("1", @actor.behaviors.first.actions.first.tag)
|
648
|
+
end
|
598
649
|
|
599
650
|
end
|
data/test/zyps/test_actions.rb
CHANGED
@@ -154,32 +154,32 @@ class TestActions < Test::Unit::TestCase
|
|
154
154
|
end
|
155
155
|
|
156
156
|
|
157
|
-
#A BlendAction shifts the
|
157
|
+
#A BlendAction shifts the actor's color toward the given color.
|
158
158
|
def test_blend_action_black
|
159
159
|
#Create a BlendAction that blends to black.
|
160
|
-
add_action(BlendAction.new(Color.new(0, 0, 0)), @actor)
|
161
|
-
#Set the
|
162
|
-
@
|
163
|
-
#Act.
|
160
|
+
add_action(BlendAction.new(1, Color.new(0, 0, 0)), @actor)
|
161
|
+
#Set the actor's color.
|
162
|
+
@actor.color = Color.new(0.5, 0.5, 0.5)
|
163
|
+
#Act (time difference is 0.1 seconds).
|
164
164
|
@environment.interact
|
165
|
-
#Verify the
|
166
|
-
assert_in_delta(0.
|
167
|
-
assert_in_delta(0.
|
168
|
-
assert_in_delta(0.
|
165
|
+
#Verify the actor's new color.
|
166
|
+
assert_in_delta(0.45, @actor.color.red, REQUIRED_ACCURACY)
|
167
|
+
assert_in_delta(0.45, @actor.color.green, REQUIRED_ACCURACY)
|
168
|
+
assert_in_delta(0.45, @actor.color.blue, REQUIRED_ACCURACY)
|
169
169
|
end
|
170
170
|
|
171
171
|
#Test shifting colors toward white.
|
172
172
|
def test_blend_action_white
|
173
173
|
#Create a BlendAction that blends to white.
|
174
|
-
add_action(BlendAction.new(Color.new(1, 1, 1)), @actor)
|
175
|
-
#Set the
|
176
|
-
@
|
177
|
-
#Act.
|
174
|
+
add_action(BlendAction.new(1, Color.new(1, 1, 1)), @actor)
|
175
|
+
#Set the actor's color.
|
176
|
+
@actor.color = Color.new(0.5, 0.5, 0.5)
|
177
|
+
#Act (time difference is 0.1 seconds).
|
178
178
|
@environment.interact
|
179
|
-
#Verify the
|
180
|
-
assert_in_delta(0.
|
181
|
-
assert_in_delta(0.
|
182
|
-
assert_in_delta(0.
|
179
|
+
#Verify the actor's new color.
|
180
|
+
assert_in_delta(0.55, @actor.color.red, REQUIRED_ACCURACY)
|
181
|
+
assert_in_delta(0.55, @actor.color.green, REQUIRED_ACCURACY)
|
182
|
+
assert_in_delta(0.55, @actor.color.blue, REQUIRED_ACCURACY)
|
183
183
|
end
|
184
184
|
|
185
185
|
|
@@ -231,4 +231,65 @@ class TestActions < Test::Unit::TestCase
|
|
231
231
|
assert_equal(@actor.location.y, child.location.y)
|
232
232
|
end
|
233
233
|
|
234
|
+
def test_spawn_action
|
235
|
+
#Set up prototypes.
|
236
|
+
prototypes = [Creature.new, GameObject.new]
|
237
|
+
prototypes[0].vector = Vector.new(1, 45)
|
238
|
+
#Add prototypes to new SpawnAction.
|
239
|
+
add_action(SpawnAction.new(@environment, prototypes), @actor)
|
240
|
+
#Interact.
|
241
|
+
@environment.interact
|
242
|
+
#All children should be spawned.
|
243
|
+
assert_equal(5, @environment.objects.length)
|
244
|
+
#Childrens' starting location should match actor's.
|
245
|
+
assert_equal(@environment.objects[-1].location, @actor.location)
|
246
|
+
#Spawned objects should be copy of originals.
|
247
|
+
assert_not_same(prototypes[0], @environment.objects[-2])
|
248
|
+
#Spawned objects' vectors should be same as originals'.
|
249
|
+
assert_equal(prototypes[0].vector, @environment.objects[-2].vector)
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_explode_action
|
253
|
+
#Set up prototypes.
|
254
|
+
prototypes = [Creature.new, GameObject.new]
|
255
|
+
prototypes[0].vector = Vector.new(1, 45)
|
256
|
+
#Add prototypes to new ExplodeAction.
|
257
|
+
add_action(ExplodeAction.new(@environment, prototypes), @actor)
|
258
|
+
#Interact.
|
259
|
+
@environment.interact
|
260
|
+
#Actor should be removed from environment.
|
261
|
+
assert(! @environment.objects.include?(@actor))
|
262
|
+
#All children should be spawned.
|
263
|
+
assert_equal(4, @environment.objects.length)
|
264
|
+
children = @environment.objects[-2, 2]
|
265
|
+
#Spawned objects' vectors should be sum of originals' plus actor's.
|
266
|
+
assert_equal(prototypes[0].vector + @actor.vector, children[0].vector)
|
267
|
+
assert_equal(prototypes[1].vector + @actor.vector, children[1].vector)
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_shoot_action
|
271
|
+
#Set up prototypes.
|
272
|
+
prototypes = [[Creature.new, GameObject.new], Creature.new(:name => '2')]
|
273
|
+
prototypes[0][0].vector.pitch = 5
|
274
|
+
#Add prototypes to new ShootAction.
|
275
|
+
add_action(ShootAction.new(@environment, prototypes), @actor)
|
276
|
+
#Interact with both targets.
|
277
|
+
@environment.interact
|
278
|
+
#Both objects in first group should have been spawned.
|
279
|
+
assert_equal(5, @environment.objects.length)
|
280
|
+
#First spawned object's vector should match angle to first target plus prototype's vector angle.
|
281
|
+
children = @environment.objects[-2, 2]
|
282
|
+
assert_equal(45 + 5, children[0].vector.pitch)
|
283
|
+
#Second spawned object's vector should match angle to first target.
|
284
|
+
assert_equal(45, children[1].vector.pitch)
|
285
|
+
#Fire second set of bullets.
|
286
|
+
@environment.interact
|
287
|
+
#Only second set should have been spawned.
|
288
|
+
assert_equal(6, @environment.objects.length)
|
289
|
+
children = @environment.objects[-1, 1]
|
290
|
+
assert_equal('Copy of 2', children[0].name)
|
291
|
+
#Spawned object should be aimed at second target.
|
292
|
+
assert_equal(225, children[0].vector.pitch)
|
293
|
+
end
|
294
|
+
|
234
295
|
end
|
@@ -96,4 +96,16 @@ class TestConditions < Test::Unit::TestCase
|
|
96
96
|
end
|
97
97
|
|
98
98
|
|
99
|
+
def test_elapsed_time_condition
|
100
|
+
condition = ElapsedTimeCondition.new
|
101
|
+
condition.interval = 0.2
|
102
|
+
#Test for falsehood.
|
103
|
+
#On first pass, its clock will only be at 0.1 seconds.
|
104
|
+
assert(! condition.select(@actor, [@target]).include?(@target))
|
105
|
+
#Test for truth.
|
106
|
+
#On first pass, its clock will be at 0.2 seconds, the assigned interval.
|
107
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
108
|
+
end
|
109
|
+
|
110
|
+
|
99
111
|
end
|
metadata
CHANGED
@@ -1,93 +1,87 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.2
|
3
|
+
specification_version: 1
|
2
4
|
name: zyps
|
3
5
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
6
|
+
version: 0.7.6
|
7
|
+
date: 2008-02-29 00:00:00 -07:00
|
8
|
+
summary: A game library for Ruby
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jay@mcgavren.com
|
12
|
+
homepage: http://jay.mcgavren.com/zyps/
|
13
|
+
rubyforge_project: zyps
|
14
|
+
description:
|
15
|
+
autorequire: zyps
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
5
25
|
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
6
29
|
authors:
|
7
30
|
- Jay McGavren
|
8
|
-
autorequire: zyps
|
9
|
-
bindir: bin
|
10
|
-
cert_chain: []
|
11
|
-
|
12
|
-
date: 2008-02-16 00:00:00 -07:00
|
13
|
-
default_executable:
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: wxruby
|
17
|
-
version_requirement:
|
18
|
-
version_requirements: !ruby/object:Gem::Requirement
|
19
|
-
requirements:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.9.2
|
23
|
-
version:
|
24
|
-
description:
|
25
|
-
email: jay@mcgavren.com
|
26
|
-
executables:
|
27
|
-
- zyps
|
28
|
-
extensions: []
|
29
|
-
|
30
|
-
extra_rdoc_files:
|
31
|
-
- README.txt
|
32
|
-
- COPYING.LESSER.txt
|
33
|
-
- COPYING.txt
|
34
31
|
files:
|
35
32
|
- COPYING.LESSER.txt
|
36
33
|
- COPYING.txt
|
37
|
-
- README_windows.txt
|
38
34
|
- README.txt
|
39
|
-
-
|
35
|
+
- README_windows.txt
|
40
36
|
- bin/zyps
|
37
|
+
- bin/zyps-175
|
38
|
+
- bin/zyps_demo
|
41
39
|
- lib/zyps
|
40
|
+
- lib/zyps/actions.rb
|
41
|
+
- lib/zyps/conditions.rb
|
42
|
+
- lib/zyps/environmental_factors.rb
|
43
|
+
- lib/zyps/remote.rb
|
42
44
|
- lib/zyps/views
|
43
45
|
- lib/zyps/views/canvas
|
44
46
|
- lib/zyps/views/canvas/wx.rb
|
45
47
|
- lib/zyps/views/trails.rb
|
46
|
-
- lib/zyps/conditions.rb
|
47
|
-
- lib/zyps/remote.rb
|
48
|
-
- lib/zyps/actions.rb
|
49
|
-
- lib/zyps/environmental_factors.rb
|
50
48
|
- lib/zyps.rb
|
49
|
+
- test/test_zyps.rb
|
51
50
|
- test/zyps
|
52
|
-
- test/zyps/test_behaviors.rb
|
53
51
|
- test/zyps/test_actions.rb
|
52
|
+
- test/zyps/test_behaviors.rb
|
54
53
|
- test/zyps/test_conditions.rb
|
55
|
-
- test/zyps/test_remote.rb
|
56
54
|
- test/zyps/test_environmental_factors.rb
|
55
|
+
- test/zyps/test_remote.rb
|
56
|
+
test_files:
|
57
57
|
- test/test_zyps.rb
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
- test/zyps/test_actions.rb
|
59
|
+
- test/zyps/test_behaviors.rb
|
60
|
+
- test/zyps/test_conditions.rb
|
61
|
+
- test/zyps/test_environmental_factors.rb
|
62
|
+
- test/zyps/test_remote.rb
|
61
63
|
rdoc_options:
|
62
64
|
- --title
|
63
65
|
- Zyps - A game library for Ruby
|
64
66
|
- --main
|
65
67
|
- README.txt
|
66
|
-
|
67
|
-
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
-
requirements:
|
76
|
-
- - ">="
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: "0"
|
79
|
-
version:
|
68
|
+
extra_rdoc_files:
|
69
|
+
- README.txt
|
70
|
+
- COPYING.LESSER.txt
|
71
|
+
- COPYING.txt
|
72
|
+
executables:
|
73
|
+
- zyps
|
74
|
+
extensions: []
|
75
|
+
|
80
76
|
requirements: []
|
81
77
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
|
91
|
-
|
92
|
-
- test/zyps/test_environmental_factors.rb
|
93
|
-
- test/test_zyps.rb
|
78
|
+
dependencies:
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: wxruby
|
81
|
+
version_requirement:
|
82
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 1.9.2
|
87
|
+
version:
|