zyps 0.6.3 → 0.7.0
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/README.txt +11 -27
- data/bin/zyps +355 -296
- data/bin/zyps_demo +267 -249
- data/lib/zyps/actions.rb +104 -139
- data/lib/zyps/conditions.rb +39 -15
- data/lib/zyps/environmental_factors.rb +60 -48
- data/lib/zyps/views/canvas/gtk2.rb +152 -0
- data/lib/zyps/views/canvas/wx.rb +191 -0
- data/lib/zyps/views/trails.rb +56 -59
- data/lib/zyps.rb +101 -84
- data/test/test_zyps.rb +48 -75
- data/test/zyps/test_actions.rb +24 -73
- data/test/zyps/test_conditions.rb +30 -11
- data/test/zyps/test_environmental_factors.rb +28 -22
- data/test/zyps/test_remote.rb +3 -3
- metadata +16 -8
- data/bin/zyps_server +0 -235
@@ -28,18 +28,18 @@ class TestConditions < Test::Unit::TestCase
|
|
28
28
|
|
29
29
|
|
30
30
|
def setup
|
31
|
-
@actor = Creature.new('name', Location.new(1, 1))
|
32
|
-
@target = GameObject.new('name', Location.new(2, 2))
|
31
|
+
@actor = Creature.new(:name => 'name', :location => Location.new(1, 1))
|
32
|
+
@target = GameObject.new(:name => 'name', :location => Location.new(2, 2))
|
33
33
|
end
|
34
34
|
|
35
35
|
|
36
36
|
def test_tag_condition
|
37
37
|
condition = TagCondition.new("tag")
|
38
38
|
#Test for falsehood.
|
39
|
-
assert(! condition.
|
39
|
+
assert(! condition.select(@actor, [@target]).include?(@target))
|
40
40
|
#Test for truth.
|
41
41
|
@target.tags << "tag"
|
42
|
-
assert(condition.
|
42
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
43
43
|
end
|
44
44
|
|
45
45
|
|
@@ -47,22 +47,22 @@ class TestConditions < Test::Unit::TestCase
|
|
47
47
|
condition = AgeCondition.new(0.2)
|
48
48
|
#Test for falsehood.
|
49
49
|
@target.age = 0.1
|
50
|
-
assert(! condition.
|
50
|
+
assert(! condition.select(@actor, [@target]).include?(@target))
|
51
51
|
#Test for truth.
|
52
52
|
@target.age = 0.2
|
53
|
-
assert(condition.
|
53
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
54
54
|
@target.age = 0.3
|
55
|
-
assert(condition.
|
55
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
56
56
|
end
|
57
57
|
|
58
58
|
|
59
59
|
def test_proximity_condition
|
60
60
|
condition = ProximityCondition.new(1)
|
61
61
|
#Test for falsehood.
|
62
|
-
assert(! condition.
|
62
|
+
assert(! condition.select(@actor, [@target]).include?(@target))
|
63
63
|
#Test for truth.
|
64
64
|
@target.location = Location.new(0.5, 0.5)
|
65
|
-
assert(condition.
|
65
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
66
66
|
end
|
67
67
|
|
68
68
|
|
@@ -70,10 +70,29 @@ class TestConditions < Test::Unit::TestCase
|
|
70
70
|
condition = CollisionCondition.new
|
71
71
|
#Test for falsehood.
|
72
72
|
@actor.size, @target.size = 0.196, 0.196 #Radius = 0.25
|
73
|
-
assert(! condition.
|
73
|
+
assert(! condition.select(@actor, [@target]).include?(@target))
|
74
74
|
#Test for truth.
|
75
75
|
@actor.size, @target.size = 1.766, 1.766 #Radius = 0.75
|
76
|
-
assert(condition.
|
76
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
def test_strength_condition
|
81
|
+
condition = StrengthCondition.new
|
82
|
+
#For now, "strength" is based merely on size.
|
83
|
+
#Test for falsehood.
|
84
|
+
@actor.size = 1
|
85
|
+
@target.size = 2
|
86
|
+
assert(! condition.select(@actor, [@target]).include?(@target))
|
87
|
+
#Test for truth.
|
88
|
+
#Equally strong objects cause the condition to return true.
|
89
|
+
@actor.size = 2
|
90
|
+
@target.size = 2
|
91
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
92
|
+
#As will cases where the actor is stronger, of course.
|
93
|
+
@actor.size = 3
|
94
|
+
@target.size = 2
|
95
|
+
assert(condition.select(@actor, [@target]).include?(@target))
|
77
96
|
end
|
78
97
|
|
79
98
|
|
@@ -35,40 +35,42 @@ class TestEnclosure < Test::Unit::TestCase
|
|
35
35
|
def test_enclosure
|
36
36
|
|
37
37
|
creature = Creature.new
|
38
|
+
environment = Environment.new(:objects => [creature])
|
38
39
|
|
39
40
|
#Create an enclosure.
|
40
|
-
enclosure = Enclosure.new
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
enclosure = Enclosure.new(
|
42
|
+
:left => 1,
|
43
|
+
:top => 3,
|
44
|
+
:right => 3,
|
45
|
+
:bottom => 1
|
46
|
+
)
|
45
47
|
|
46
48
|
#Place creature outside the walls, and act on it.
|
47
49
|
#Ensure it's moved inside and its heading reflects off the walls.
|
48
50
|
creature.location = Location.new(0, 2) #Too far left.
|
49
51
|
creature.vector.pitch = 170
|
50
|
-
enclosure.act(
|
52
|
+
enclosure.act(environment)
|
51
53
|
assert_equal(1, creature.location.x)
|
52
54
|
assert_equal(2, creature.location.y)
|
53
55
|
assert_equal(10, creature.vector.pitch)
|
54
56
|
|
55
57
|
creature.location = Location.new(4, 2) #Too far right.
|
56
58
|
creature.vector.pitch = 10
|
57
|
-
enclosure.act(
|
59
|
+
enclosure.act(environment)
|
58
60
|
assert_equal(3, creature.location.x)
|
59
61
|
assert_equal(2, creature.location.y)
|
60
62
|
assert_equal(170, creature.vector.pitch)
|
61
63
|
|
62
64
|
creature.location = Location.new(2, 0) #Too far down.
|
63
65
|
creature.vector.pitch = 280
|
64
|
-
enclosure.act(
|
66
|
+
enclosure.act(environment)
|
65
67
|
assert_equal(2, creature.location.x)
|
66
68
|
assert_equal(1, creature.location.y)
|
67
69
|
assert_equal(80, creature.vector.pitch)
|
68
70
|
|
69
71
|
creature.location = Location.new(2, 4) #Too far up.
|
70
72
|
creature.vector.pitch = 80
|
71
|
-
enclosure.act(
|
73
|
+
enclosure.act(environment)
|
72
74
|
assert_equal(2, creature.location.x)
|
73
75
|
assert_equal(3, creature.location.y)
|
74
76
|
assert_equal(280, creature.vector.pitch)
|
@@ -76,7 +78,7 @@ class TestEnclosure < Test::Unit::TestCase
|
|
76
78
|
#Place creature inside the walls, and ensure it's unaffected.
|
77
79
|
creature.location = Location.new(2, 2) #Inside.
|
78
80
|
creature.vector.pitch = 45
|
79
|
-
enclosure.act(
|
81
|
+
enclosure.act(environment)
|
80
82
|
assert_equal(2, creature.location.x)
|
81
83
|
assert_equal(2, creature.location.y)
|
82
84
|
assert_equal(45, creature.vector.pitch)
|
@@ -92,23 +94,24 @@ class TestSpeedLimit < Test::Unit::TestCase
|
|
92
94
|
def test_speed_limit
|
93
95
|
|
94
96
|
creature = Creature.new
|
97
|
+
environment = Environment.new(:objects => [creature])
|
95
98
|
|
96
99
|
#Create a speed limit.
|
97
100
|
limit = SpeedLimit.new(10)
|
98
101
|
|
99
102
|
#Act on a creature going under the limit, and ensure it's unaffected.
|
100
103
|
creature.vector.speed = 1
|
101
|
-
limit.act(
|
104
|
+
limit.act(environment)
|
102
105
|
assert_equal(1, creature.vector.speed)
|
103
106
|
|
104
107
|
#Act on a creature going over the limit, and ensure its speed is reduced.
|
105
108
|
creature.vector.speed = 11
|
106
|
-
limit.act(
|
109
|
+
limit.act(environment)
|
107
110
|
assert_equal(10, creature.vector.speed)
|
108
111
|
|
109
112
|
#Act on a creature going in reverse, and ensure its speed is reduced.
|
110
113
|
creature.vector.speed = -11
|
111
|
-
limit.act(
|
114
|
+
limit.act(environment)
|
112
115
|
assert_equal(-10, creature.vector.speed)
|
113
116
|
|
114
117
|
end
|
@@ -121,11 +124,12 @@ class TestAccelerator < Test::Unit::TestCase
|
|
121
124
|
|
122
125
|
def test_standing_start
|
123
126
|
creature = Creature.new
|
127
|
+
environment = Environment.new(:objects => [creature])
|
124
128
|
creature.vector = Vector.new(0, 0)
|
125
129
|
#Create an accelerator that pushes downwards by 1 unit/sec.
|
126
130
|
accelerator = Accelerator.new(Vector.new(1, 270))
|
127
131
|
#Act on a creature, and ensure its vector is modified appropriately.
|
128
|
-
accelerator.act(
|
132
|
+
accelerator.act(environment)
|
129
133
|
assert_equal(ELAPSED_TIME, creature.vector.speed)
|
130
134
|
assert_equal(270, creature.vector.pitch)
|
131
135
|
end
|
@@ -133,11 +137,12 @@ class TestAccelerator < Test::Unit::TestCase
|
|
133
137
|
|
134
138
|
def test_cancellation
|
135
139
|
creature = Creature.new
|
140
|
+
environment = Environment.new(:objects => [creature])
|
136
141
|
creature.vector = Vector.new(1, 45)
|
137
142
|
#Create an accelerator pushing opposite to the creature's direction of travel.
|
138
143
|
accelerator = Accelerator.new(Vector.new(0.5, 225))
|
139
144
|
#Act on a creature, and ensure its vector is modified appropriately.
|
140
|
-
accelerator.act(
|
145
|
+
accelerator.act(environment)
|
141
146
|
assert_equal(0.95, creature.vector.speed)
|
142
147
|
assert_equal(45, creature.vector.pitch)
|
143
148
|
end
|
@@ -151,14 +156,15 @@ class TestFriction < Test::Unit::TestCase
|
|
151
156
|
|
152
157
|
def test_slowing
|
153
158
|
creature = Creature.new
|
159
|
+
environment = Environment.new(:objects => [creature])
|
154
160
|
creature.vector = Vector.new(STARTING_SPEED, 0)
|
155
161
|
#Create friction that slows objects by 1 unit/sec.
|
156
162
|
friction = Friction.new(1)
|
157
163
|
#Act on a creature, and ensure its vector is modified appropriately.
|
158
|
-
friction.act(
|
164
|
+
friction.act(environment)
|
159
165
|
assert_equal(STARTING_SPEED - ELAPSED_TIME, creature.vector.speed)
|
160
166
|
#Test cumulative effect.
|
161
|
-
friction.act(
|
167
|
+
friction.act(environment)
|
162
168
|
assert_equal(STARTING_SPEED - ELAPSED_TIME * 2, creature.vector.speed)
|
163
169
|
end
|
164
170
|
|
@@ -172,26 +178,26 @@ class TestPopulationLimit < Test::Unit::TestCase
|
|
172
178
|
#Create an environment.
|
173
179
|
environment = Environment.new
|
174
180
|
#Create a population limit for the environment.
|
175
|
-
limit = PopulationLimit.new(
|
181
|
+
limit = PopulationLimit.new(2)
|
176
182
|
|
177
183
|
#Ensure population is not affected when under/at the limit.
|
178
184
|
creature_1 = Creature.new
|
179
185
|
environment.objects << creature_1
|
180
|
-
limit.act(
|
186
|
+
limit.act(environment)
|
181
187
|
assert(environment.objects.include?(creature_1))
|
182
188
|
creature_2 = Creature.new
|
183
189
|
environment.objects << creature_2
|
184
|
-
limit.act(
|
190
|
+
limit.act(environment)
|
185
191
|
assert(environment.objects.include?(creature_1))
|
186
192
|
assert(environment.objects.include?(creature_2))
|
187
|
-
limit.act(
|
193
|
+
limit.act(environment)
|
188
194
|
assert(environment.objects.include?(creature_1))
|
189
195
|
assert(environment.objects.include?(creature_2))
|
190
196
|
|
191
197
|
#Ensure first creature is removed when limit is exceeded.
|
192
198
|
creature_3 = Creature.new
|
193
199
|
environment.objects << creature_3
|
194
|
-
limit.act(
|
200
|
+
limit.act(environment)
|
195
201
|
assert(! environment.objects.include?(creature_1))
|
196
202
|
|
197
203
|
#Ensure other creatures aren't touched.
|
data/test/zyps/test_remote.rb
CHANGED
@@ -79,12 +79,12 @@ class TestRemote < Test::Unit::TestCase
|
|
79
79
|
creature = Creature.new
|
80
80
|
creature.vector = Vector.new(SPEED, PITCH)
|
81
81
|
behavior = Behavior.new
|
82
|
-
behavior.actions << TurnAction.new(RATE)
|
82
|
+
behavior.actions << TurnAction.new(RATE, 90)
|
83
83
|
creature.behaviors << behavior
|
84
84
|
@client.objects << creature
|
85
85
|
@client.objects << Creature.new #Second creature to interact with.
|
86
86
|
@environment.interact
|
87
|
-
|
87
|
+
assert(@client.objects[0].vector.pitch > PITCH)
|
88
88
|
end
|
89
89
|
|
90
90
|
#Place Creature with Condition and ensure it's followed.
|
@@ -92,7 +92,7 @@ class TestRemote < Test::Unit::TestCase
|
|
92
92
|
creature = Creature.new
|
93
93
|
creature.vector = Vector.new(SPEED, PITCH)
|
94
94
|
behavior = Behavior.new
|
95
|
-
behavior.actions << TurnAction.new(RATE)
|
95
|
+
behavior.actions << TurnAction.new(RATE, 90)
|
96
96
|
behavior.conditions << TagCondition.new('foobar') #Will return false.
|
97
97
|
creature.behaviors << behavior
|
98
98
|
@client.objects << creature
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: zyps
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date:
|
6
|
+
version: 0.7.0
|
7
|
+
date: 2008-01-23 00:00:00 -07:00
|
8
8
|
summary: A game library for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -34,13 +34,15 @@ files:
|
|
34
34
|
- README.txt
|
35
35
|
- bin/zyps
|
36
36
|
- bin/zyps_demo
|
37
|
-
- bin/zyps_server
|
38
37
|
- lib/zyps
|
39
38
|
- lib/zyps/actions.rb
|
40
39
|
- lib/zyps/conditions.rb
|
41
40
|
- lib/zyps/environmental_factors.rb
|
42
41
|
- lib/zyps/remote.rb
|
43
42
|
- lib/zyps/views
|
43
|
+
- lib/zyps/views/canvas
|
44
|
+
- lib/zyps/views/canvas/gtk2.rb
|
45
|
+
- lib/zyps/views/canvas/wx.rb
|
44
46
|
- lib/zyps/views/trails.rb
|
45
47
|
- lib/zyps.rb
|
46
48
|
- test/test_zyps.rb
|
@@ -63,11 +65,17 @@ extra_rdoc_files:
|
|
63
65
|
- COPYING.txt
|
64
66
|
executables:
|
65
67
|
- zyps
|
66
|
-
- zyps_demo
|
67
|
-
- zyps_server
|
68
68
|
extensions: []
|
69
69
|
|
70
|
-
requirements:
|
71
|
-
- - Ruby-GNOME2
|
72
|
-
dependencies: []
|
70
|
+
requirements: []
|
73
71
|
|
72
|
+
dependencies:
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: wxruby
|
75
|
+
version_requirement:
|
76
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.9.2
|
81
|
+
version:
|
data/bin/zyps_server
DELETED
@@ -1,235 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
# Copyright 2007 Jay McGavren, jay@mcgavren.com.
|
4
|
-
#
|
5
|
-
# This file is part of Zyps.
|
6
|
-
#
|
7
|
-
# Zyps is free software; you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
-
# the Free Software Foundation; either version 3 of the License, or
|
10
|
-
# (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Lesser General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
|
21
|
-
gems_loaded = false
|
22
|
-
begin
|
23
|
-
require 'optparse'
|
24
|
-
require 'zyps'
|
25
|
-
require 'zyps/actions'
|
26
|
-
require 'zyps/conditions'
|
27
|
-
require 'zyps/environmental_factors'
|
28
|
-
require 'zyps/remote'
|
29
|
-
require 'zyps/views/trails'
|
30
|
-
require 'drb'
|
31
|
-
rescue LoadError
|
32
|
-
if gems_loaded == false
|
33
|
-
require 'rubygems'
|
34
|
-
gems_loaded = true
|
35
|
-
retry
|
36
|
-
else
|
37
|
-
raise
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
include Zyps
|
43
|
-
|
44
|
-
|
45
|
-
DEFAULT_VIEW_WIDTH = 800
|
46
|
-
DEFAULT_VIEW_HEIGHT = 600
|
47
|
-
DEFAULT_MAX_SPEED = 500
|
48
|
-
DEFAULT_MAX_POPULATION = 100
|
49
|
-
DEFAULT_FPS = 60
|
50
|
-
|
51
|
-
|
52
|
-
#A server for a Zyps Environment.
|
53
|
-
class ZypsServer
|
54
|
-
|
55
|
-
#Port to open service on.
|
56
|
-
attr_accessor :uri
|
57
|
-
#Maximum allowed number of objects.
|
58
|
-
attr_accessor :max_population
|
59
|
-
#View dimensions.
|
60
|
-
attr_accessor :view_width, :view_height
|
61
|
-
|
62
|
-
#Set up default values.
|
63
|
-
def initialize(
|
64
|
-
uri = nil,
|
65
|
-
view_width = DEFAULT_VIEW_WIDTH,
|
66
|
-
view_height = DEFAULT_VIEW_HEIGHT,
|
67
|
-
fps = DEFAULT_FPS,
|
68
|
-
max_population = DEFAULT_MAX_POPULATION,
|
69
|
-
max_speed = DEFAULT_MAX_SPEED,
|
70
|
-
enclosure = true
|
71
|
-
)
|
72
|
-
@uri, @view_width, @view_height, @fps, @max_population, @max_speed, @enclosure =
|
73
|
-
uri, view_width, view_height, fps, max_population, max_speed, enclosure
|
74
|
-
end
|
75
|
-
|
76
|
-
#Create app window, game environment, view, and network service.
|
77
|
-
def main
|
78
|
-
|
79
|
-
#A clock to track frames to draw this second.
|
80
|
-
clock = Clock.new
|
81
|
-
time_per_frame = 1.0 / @fps
|
82
|
-
|
83
|
-
#Create a window, and set GTK up to quit when it is closed.
|
84
|
-
window = Gtk::Window.new
|
85
|
-
window.signal_connect("delete_event") {false}
|
86
|
-
window.signal_connect("destroy") {Gtk.main_quit}
|
87
|
-
|
88
|
-
#Add view to window.
|
89
|
-
view = TrailsView.new(@view_width, @view_height)
|
90
|
-
window.add(view.canvas)
|
91
|
-
window.show_all
|
92
|
-
|
93
|
-
#Create environment.
|
94
|
-
environment = Environment.new
|
95
|
-
|
96
|
-
#Point view at environment.
|
97
|
-
environment.add_observer(view)
|
98
|
-
|
99
|
-
#Limit population.
|
100
|
-
environment.environmental_factors << PopulationLimit.new(environment, @max_population) if @max_population
|
101
|
-
|
102
|
-
#Limit speed of objects.
|
103
|
-
environment.environmental_factors << SpeedLimit.new(@max_speed) if @max_speed
|
104
|
-
|
105
|
-
#Keep objects on screen.
|
106
|
-
if @enclosure
|
107
|
-
enclosure = Enclosure.new()
|
108
|
-
enclosure.left = 0
|
109
|
-
enclosure.bottom = 0
|
110
|
-
enclosure.top = @view_height
|
111
|
-
enclosure.right = @view_width
|
112
|
-
environment.environmental_factors << enclosure
|
113
|
-
end
|
114
|
-
|
115
|
-
#Create thread to update environment.
|
116
|
-
update_thread = Thread.new do
|
117
|
-
|
118
|
-
begin
|
119
|
-
|
120
|
-
loop do
|
121
|
-
|
122
|
-
begin
|
123
|
-
environment.interact
|
124
|
-
rescue Exception => exception
|
125
|
-
puts exception, exception.backtrace
|
126
|
-
puts environment.inspect
|
127
|
-
end
|
128
|
-
|
129
|
-
#Control population.
|
130
|
-
environment.objects.shift while environment.objects.length > @max_population
|
131
|
-
|
132
|
-
#Determine how much time is left in this frame.
|
133
|
-
time_left_in_frame = time_per_frame - clock.elapsed_time
|
134
|
-
#Sleep for the remaining time.
|
135
|
-
if time_left_in_frame > 0
|
136
|
-
sleep time_left_in_frame
|
137
|
-
#Skip a frame if things are going too slow.
|
138
|
-
else
|
139
|
-
sleep time_per_frame
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
rescue Exception => exception
|
145
|
-
puts exception, exception.backtrace
|
146
|
-
end
|
147
|
-
|
148
|
-
end
|
149
|
-
|
150
|
-
#Start a network service.
|
151
|
-
server = EnvironmentServer.new(environment, @uri)
|
152
|
-
server.start
|
153
|
-
#Display our URI.
|
154
|
-
puts "Zyps server active at #{server.uri}"
|
155
|
-
|
156
|
-
#Disable file system access.
|
157
|
-
$SAFE = 2
|
158
|
-
|
159
|
-
#Activate the GUI.
|
160
|
-
Gtk.main
|
161
|
-
|
162
|
-
end
|
163
|
-
|
164
|
-
|
165
|
-
#Set attributes according to command-line arguments.
|
166
|
-
def process_options(arguments)
|
167
|
-
|
168
|
-
#Set up option parser.
|
169
|
-
options = OptionParser.new
|
170
|
-
|
171
|
-
#Define valid options.
|
172
|
-
options.on("-h", "--help", TrueClass, "Display program help.") {
|
173
|
-
puts options.help
|
174
|
-
exit
|
175
|
-
}
|
176
|
-
options.on(
|
177
|
-
"-m",
|
178
|
-
"--max-population [number]",
|
179
|
-
Integer,
|
180
|
-
"The maximum number of allowed game objects. #{DEFAULT_MAX_POPULATION} by default."
|
181
|
-
) {|value| @max_population = value}
|
182
|
-
options.on(
|
183
|
-
"-s",
|
184
|
-
"--max-speed [number]",
|
185
|
-
Integer,
|
186
|
-
"The fastest an object can go. #{DEFAULT_MAX_SPEED ? DEFAULT_MAX_SPEED : 'No limit'} by default."
|
187
|
-
) {|value| @max_speed = value}
|
188
|
-
options.on(
|
189
|
-
"-n",
|
190
|
-
"--no-enclosure",
|
191
|
-
"Disables the barrier that normally keeps objects on the screen."
|
192
|
-
) {|value| @enclosure = false}
|
193
|
-
options.on(
|
194
|
-
"-u",
|
195
|
-
"--uri [uri]",
|
196
|
-
String,
|
197
|
-
"dRuby URI to run the server on. If not defined, one will be selected and printed to STDOUT."
|
198
|
-
) {|value| @uri = value}
|
199
|
-
options.on(
|
200
|
-
"-f",
|
201
|
-
"--fps [frames]",
|
202
|
-
Integer,
|
203
|
-
"Number of frames to draw per second. #{DEFAULT_FPS} by default."
|
204
|
-
) {|value| @fps = value}
|
205
|
-
options.on(
|
206
|
-
"--view-width [pixels]",
|
207
|
-
Integer,
|
208
|
-
"Window width. #{DEFAULT_VIEW_WIDTH} by default."
|
209
|
-
) {|value| @view_width = value}
|
210
|
-
options.on(
|
211
|
-
"--view-height [pixels]",
|
212
|
-
Integer,
|
213
|
-
"Window height. #{DEFAULT_VIEW_HEIGHT} by default."
|
214
|
-
) {|value| @view_height = value}
|
215
|
-
|
216
|
-
#Parse the options, printing usage if parsing fails.
|
217
|
-
options.parse(arguments) rescue puts "#{$!}\nType '#{$0} --help' for valid options."
|
218
|
-
|
219
|
-
end
|
220
|
-
|
221
|
-
|
222
|
-
end
|
223
|
-
|
224
|
-
|
225
|
-
begin
|
226
|
-
#Create a server.
|
227
|
-
server = ZypsServer.new
|
228
|
-
#Parse the command line.
|
229
|
-
server.process_options(ARGV)
|
230
|
-
#Start the server.
|
231
|
-
server.main
|
232
|
-
rescue => exception
|
233
|
-
#Print error to STDERR and exit with an abnormal status.
|
234
|
-
abort "Error: " + exception.message + exception.backtrace.join("\n")
|
235
|
-
end
|