zyps 0.7.4 → 0.7.5
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/bin/zyps +15 -4
- data/lib/zyps/actions.rb +3 -0
- data/lib/zyps/environmental_factors.rb +46 -0
- data/lib/zyps.rb +4 -3
- data/test/test_zyps.rb +21 -0
- data/test/zyps/test_environmental_factors.rb +49 -0
- metadata +11 -6
data/bin/zyps
CHANGED
@@ -164,6 +164,14 @@ class Application < Wx::App
|
|
164
164
|
evt_timer(timer_id) {on_timer}
|
165
165
|
timer.start(milliseconds_per_frame)
|
166
166
|
|
167
|
+
|
168
|
+
if @options[:uri]
|
169
|
+
@log.debug "Start a network service at #{@options[:uri]}."
|
170
|
+
server = EnvironmentServer.new(@environment, @options[:uri])
|
171
|
+
server.start
|
172
|
+
$SAFE = 1
|
173
|
+
end
|
174
|
+
|
167
175
|
@log.debug "Display GUI."
|
168
176
|
frame.send_size_event
|
169
177
|
frame.show
|
@@ -181,7 +189,12 @@ class Application < Wx::App
|
|
181
189
|
@enclosure.right = @drawing_area.size.width
|
182
190
|
end
|
183
191
|
#Update environment.
|
184
|
-
|
192
|
+
begin
|
193
|
+
@environment.interact
|
194
|
+
rescue Exception => exception
|
195
|
+
puts exception, exception.backtrace
|
196
|
+
raise
|
197
|
+
end
|
185
198
|
#If there are no Creatures, show instructions on creating them.
|
186
199
|
if @environment.objects.empty?
|
187
200
|
@view.canvas.buffer.draw do |dc|
|
@@ -711,9 +724,7 @@ class CreatureGenerator
|
|
711
724
|
if options[:turn]
|
712
725
|
color.blue += 1
|
713
726
|
creature.behaviors << Behavior.new(
|
714
|
-
:actions => [TurnAction.new(@turn_rate, @turn_angle)]
|
715
|
-
:conditions => [ProximityCondition.new(options[:action_proximity] * 2)],
|
716
|
-
:condition_frequency => 20
|
727
|
+
:actions => [TurnAction.new(@turn_rate, @turn_angle)]
|
717
728
|
)
|
718
729
|
end
|
719
730
|
if options[:approach]
|
data/lib/zyps/actions.rb
CHANGED
@@ -66,6 +66,7 @@ end
|
|
66
66
|
class FaceAction < Action
|
67
67
|
#Set the actor's heading to point directly at first target.
|
68
68
|
def do(actor, targets)
|
69
|
+
return if targets.empty?
|
69
70
|
actor.vector.pitch = Utility.find_angle(actor.location, targets[0].location)
|
70
71
|
end
|
71
72
|
end
|
@@ -104,6 +105,7 @@ end
|
|
104
105
|
class ApproachAction < TimedAction
|
105
106
|
#Accelerate toward the first target, but limited by rate.
|
106
107
|
def do(actor, targets)
|
108
|
+
return if targets.empty?
|
107
109
|
#Apply thrust to the creature's movement vector, adjusted by elapsed time.
|
108
110
|
actor.vector += Vector.new(
|
109
111
|
delta,
|
@@ -117,6 +119,7 @@ end
|
|
117
119
|
class FleeAction < TimedAction
|
118
120
|
#Accelerate away from the first target, but limited by turn rate.
|
119
121
|
def do(actor, targets)
|
122
|
+
return if targets.empty?
|
120
123
|
#Apply thrust to the creature's movement vector, adjusted by elapsed time.
|
121
124
|
actor.vector += Vector.new(
|
122
125
|
delta,
|
@@ -71,6 +71,52 @@ class Enclosure < EnvironmentalFactor
|
|
71
71
|
end
|
72
72
|
|
73
73
|
|
74
|
+
#When an object crosses its boundary, warps object to opposite boundary.
|
75
|
+
class WrapAround < EnvironmentalFactor
|
76
|
+
|
77
|
+
#X coordinate of left boundary.
|
78
|
+
attr_accessor :left
|
79
|
+
#Y coordinate of top boundary.
|
80
|
+
attr_accessor :top
|
81
|
+
#X coordinate of right boundary.
|
82
|
+
attr_accessor :right
|
83
|
+
#Y coordinate of bottom boundary.
|
84
|
+
attr_accessor :bottom
|
85
|
+
|
86
|
+
#Takes a hash with these keys and defaults:
|
87
|
+
# :left => 0
|
88
|
+
# :top => 0
|
89
|
+
# :right => 0
|
90
|
+
# :bottom => 0
|
91
|
+
def initialize(options = {})
|
92
|
+
options = {
|
93
|
+
:left => 0,
|
94
|
+
:top => 0,
|
95
|
+
:right => 0,
|
96
|
+
:bottom => 0
|
97
|
+
}.merge(options)
|
98
|
+
self.left, self.top, self.right, self.bottom = options[:left], options[:top], options[:right], options[:bottom]
|
99
|
+
end
|
100
|
+
|
101
|
+
#If object is beyond a boundary, set its position to that of opposite boundary.
|
102
|
+
def act(environment)
|
103
|
+
environment.objects.each do |object|
|
104
|
+
if (object.location.x < @left) then
|
105
|
+
object.location.x = @right
|
106
|
+
elsif (object.location.x > @right) then
|
107
|
+
object.location.x = @left
|
108
|
+
end
|
109
|
+
if (object.location.y > @top) then
|
110
|
+
object.location.y = @bottom
|
111
|
+
elsif (object.location.y < @bottom) then
|
112
|
+
object.location.y = @top
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
|
74
120
|
#Keeps all objects at/under the assigned speed.
|
75
121
|
class SpeedLimit < EnvironmentalFactor
|
76
122
|
|
data/lib/zyps.rb
CHANGED
@@ -358,6 +358,7 @@ class Behavior
|
|
358
358
|
#Calls select(actor, targets) on each Condition, each time discarding targets that fail.
|
359
359
|
#Then on each Action, calls Action#start(actor, targets) (if not already started) followed by Action#do(actor, targets).
|
360
360
|
#If no matching targets are found, calls Action#stop(actor, targets) on each Action.
|
361
|
+
#If there are no conditions, actions will occur regardless of targets.
|
361
362
|
def perform(actor, targets)
|
362
363
|
|
363
364
|
if condition_evaluation_turn?
|
@@ -365,11 +366,11 @@ class Behavior
|
|
365
366
|
conditions.each {|condition| @current_targets = condition.select(actor, @current_targets)}
|
366
367
|
end
|
367
368
|
actions.each do |action|
|
368
|
-
if ! @
|
369
|
+
if @current_targets.empty? and ! @conditions.empty?
|
370
|
+
action.stop(actor, targets) #Not @current_targets; that array is empty.
|
371
|
+
else
|
369
372
|
action.start(actor, @current_targets) unless action.started?
|
370
373
|
action.do(actor, @current_targets)
|
371
|
-
else
|
372
|
-
action.stop(actor, targets) #Not @current_targets; that array is empty.
|
373
374
|
end
|
374
375
|
end
|
375
376
|
|
data/test/test_zyps.rb
CHANGED
@@ -574,5 +574,26 @@ class TestBehavior < Test::Unit::TestCase
|
|
574
574
|
assert_not_same(original.conditions[0], copy.conditions[0], "Conditions in list should not be same objects.")
|
575
575
|
end
|
576
576
|
|
577
|
+
def test_no_conditions
|
578
|
+
#Set up a behavior with no conditions.
|
579
|
+
action = MockAction.new
|
580
|
+
behavior = Behavior.new(:conditions => [], :actions => [action])
|
581
|
+
#Perform the behavior with no targets.
|
582
|
+
behavior.perform(@actor, [])
|
583
|
+
assert_equal(1, action.start_count, "start() should have been called on the mock action.")
|
584
|
+
assert_equal(1, action.do_count, "do() should have been called.")
|
585
|
+
assert_equal(0, action.stop_count, "stop() should NOT have been called.")
|
586
|
+
#Add a true condition.
|
587
|
+
behavior.conditions << TrueCondition.new
|
588
|
+
#Perform the behavior with no targets.
|
589
|
+
behavior.perform(@actor, [])
|
590
|
+
assert_equal(1, action.stop_count, "stop() should have been called.")
|
591
|
+
#Perform the behavior WITH targets.
|
592
|
+
behavior.perform(@actor, @targets)
|
593
|
+
assert_equal(2, action.start_count, "start() should have been called.")
|
594
|
+
assert_equal(2, action.do_count, "do() should have been called.")
|
595
|
+
assert_equal(1, action.stop_count, "stop() should NOT have been called.")
|
596
|
+
end
|
597
|
+
|
577
598
|
|
578
599
|
end
|
@@ -89,6 +89,55 @@ end
|
|
89
89
|
|
90
90
|
|
91
91
|
|
92
|
+
class TestWrapAround < Test::Unit::TestCase
|
93
|
+
|
94
|
+
def test_wrap_around
|
95
|
+
|
96
|
+
creature = Creature.new
|
97
|
+
environment = Environment.new(:objects => [creature])
|
98
|
+
|
99
|
+
#Create a WrapAround.
|
100
|
+
wrapper = WrapAround.new(
|
101
|
+
:left => 1,
|
102
|
+
:top => 3,
|
103
|
+
:right => 3,
|
104
|
+
:bottom => 1
|
105
|
+
)
|
106
|
+
|
107
|
+
#Place creature outside the walls, and act on it.
|
108
|
+
#Ensure it's moved inside on opposite side.
|
109
|
+
creature.location = Location.new(0, 2) #Too far left.
|
110
|
+
wrapper.act(environment)
|
111
|
+
assert_equal(3, creature.location.x)
|
112
|
+
assert_equal(2, creature.location.y)
|
113
|
+
|
114
|
+
creature.location = Location.new(4, 2) #Too far right.
|
115
|
+
wrapper.act(environment)
|
116
|
+
assert_equal(1, creature.location.x)
|
117
|
+
assert_equal(2, creature.location.y)
|
118
|
+
|
119
|
+
creature.location = Location.new(2, 0) #Too far down.
|
120
|
+
wrapper.act(environment)
|
121
|
+
assert_equal(2, creature.location.x)
|
122
|
+
assert_equal(3, creature.location.y)
|
123
|
+
|
124
|
+
creature.location = Location.new(2, 4) #Too far up.
|
125
|
+
wrapper.act(environment)
|
126
|
+
assert_equal(2, creature.location.x)
|
127
|
+
assert_equal(1, creature.location.y)
|
128
|
+
|
129
|
+
#Place creature inside the walls, and ensure it's unaffected.
|
130
|
+
creature.location = Location.new(2, 2) #Inside.
|
131
|
+
wrapper.act(environment)
|
132
|
+
assert_equal(2, creature.location.x)
|
133
|
+
assert_equal(2, creature.location.y)
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
|
92
141
|
class TestSpeedLimit < Test::Unit::TestCase
|
93
142
|
|
94
143
|
def test_speed_limit
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zyps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jay McGavren
|
@@ -9,7 +9,7 @@ autorequire: zyps
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-02-
|
12
|
+
date: 2008-02-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -36,24 +36,24 @@ files:
|
|
36
36
|
- COPYING.txt
|
37
37
|
- README_windows.txt
|
38
38
|
- README.txt
|
39
|
-
- bin/zyps
|
40
39
|
- bin/zyps_demo
|
40
|
+
- bin/zyps
|
41
41
|
- lib/zyps
|
42
42
|
- lib/zyps/views
|
43
43
|
- lib/zyps/views/canvas
|
44
44
|
- lib/zyps/views/canvas/wx.rb
|
45
45
|
- lib/zyps/views/trails.rb
|
46
|
-
- lib/zyps/actions.rb
|
47
|
-
- lib/zyps/environmental_factors.rb
|
48
46
|
- lib/zyps/conditions.rb
|
49
47
|
- lib/zyps/remote.rb
|
48
|
+
- lib/zyps/actions.rb
|
49
|
+
- lib/zyps/environmental_factors.rb
|
50
50
|
- lib/zyps.rb
|
51
51
|
- test/zyps
|
52
52
|
- test/zyps/test_behaviors.rb
|
53
53
|
- test/zyps/test_actions.rb
|
54
|
-
- test/zyps/test_environmental_factors.rb
|
55
54
|
- test/zyps/test_conditions.rb
|
56
55
|
- test/zyps/test_remote.rb
|
56
|
+
- test/zyps/test_environmental_factors.rb
|
57
57
|
- test/test_zyps.rb
|
58
58
|
has_rdoc: true
|
59
59
|
homepage: http://jay.mcgavren.com/zyps/
|
@@ -85,4 +85,9 @@ signing_key:
|
|
85
85
|
specification_version: 2
|
86
86
|
summary: A game library for Ruby
|
87
87
|
test_files:
|
88
|
+
- test/zyps/test_behaviors.rb
|
89
|
+
- test/zyps/test_actions.rb
|
90
|
+
- test/zyps/test_conditions.rb
|
91
|
+
- test/zyps/test_remote.rb
|
92
|
+
- test/zyps/test_environmental_factors.rb
|
88
93
|
- test/test_zyps.rb
|