gamebox 0.1.1 → 0.2.1
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/.gitignore +4 -0
- data/Gemfile +9 -0
- data/History.txt +5 -0
- data/README.txt +4 -3
- data/Rakefile +12 -4
- data/TODO.txt +1 -5
- data/VERSION +1 -1
- data/docs/getting_started.rdoc +2 -2
- data/gamebox.gemspec +26 -10
- data/lib/gamebox/actor.rb +10 -3
- data/lib/gamebox/actor_factory.rb +2 -2
- data/lib/gamebox/actor_view.rb +14 -11
- data/lib/gamebox/actors/collidable_debugger.rb +35 -0
- data/lib/gamebox/actors/curtain.rb +2 -2
- data/lib/gamebox/actors/logo.rb +0 -6
- data/lib/gamebox/actors/score.rb +2 -5
- data/lib/gamebox/actors/spatial_debugger.rb +47 -0
- data/lib/gamebox/actors/svg_actor.rb +4 -6
- data/lib/gamebox/arbiter.rb +108 -15
- data/lib/gamebox/behavior.rb +29 -1
- data/lib/gamebox/behaviors/animated.rb +14 -23
- data/lib/gamebox/behaviors/audible.rb +1 -12
- data/lib/gamebox/behaviors/collidable.rb +29 -22
- data/lib/gamebox/behaviors/collidable/aabb_collidable.rb +61 -0
- data/lib/gamebox/behaviors/collidable/circle_collidable.rb +17 -0
- data/lib/gamebox/behaviors/collidable/collidable_shape.rb +35 -0
- data/lib/gamebox/behaviors/collidable/polygon_collidable.rb +85 -0
- data/lib/gamebox/behaviors/graphical.rb +13 -10
- data/lib/gamebox/behaviors/layered.rb +6 -20
- data/lib/gamebox/behaviors/physical.rb +116 -93
- data/lib/gamebox/class_finder.rb +6 -2
- data/lib/gamebox/config_manager.rb +24 -4
- data/lib/gamebox/data/config/objects.yml +5 -3
- data/lib/gamebox/ftor.rb +372 -0
- data/lib/gamebox/gamebox_application.rb +2 -8
- data/lib/gamebox/hooked_gosu_window.rb +30 -0
- data/lib/gamebox/input_manager.rb +78 -79
- data/lib/gamebox/lib/code_statistics.rb +1 -1
- data/lib/gamebox/lib/numbers_ext.rb +1 -1
- data/lib/gamebox/lib/rect.rb +612 -0
- data/lib/gamebox/physical_stage.rb +12 -2
- data/lib/gamebox/physics.rb +14 -3
- data/lib/gamebox/resource_manager.rb +28 -65
- data/lib/gamebox/sound_manager.rb +7 -13
- data/lib/gamebox/spatial_hash.rb +60 -14
- data/lib/gamebox/spatial_stagehand.rb +19 -0
- data/lib/gamebox/stage.rb +16 -1
- data/lib/gamebox/stage_manager.rb +1 -1
- data/lib/gamebox/svg_document.rb +1 -0
- data/lib/gamebox/tasks/gamebox_tasks.rb +23 -11
- data/lib/gamebox/templates/template_app/.gitignore +1 -0
- data/lib/gamebox/templates/template_app/Gemfile +1 -1
- data/lib/gamebox/templates/template_app/Rakefile +6 -21
- data/lib/gamebox/templates/template_app/config/environment.rb +14 -0
- data/lib/gamebox/templates/template_app/config/game.yml +2 -1
- data/lib/gamebox/templates/template_app/script/generate +0 -3
- data/lib/gamebox/templates/template_app/src/demo_stage.rb +1 -11
- data/lib/gamebox/templates/template_app/src/game.rb +0 -1
- data/lib/gamebox/templates/template_app/src/my_actor.rb +2 -2
- data/lib/gamebox/version.rb +1 -1
- data/lib/gamebox/views/graphical_actor_view.rb +15 -9
- data/lib/gamebox/wrapped_screen.rb +114 -7
- data/load_paths.rb +20 -0
- data/script/perf_spatial_hash.rb +73 -0
- data/spec/actor_view_spec.rb +1 -1
- data/spec/arbiter_spec.rb +264 -0
- data/spec/behavior_spec.rb +19 -2
- data/spec/collidable_spec.rb +105 -5
- data/spec/helper.rb +1 -1
- data/spec/label_spec.rb +1 -1
- data/spec/resource_manager_spec.rb +1 -1
- data/spec/spatial_hash_spec.rb +1 -1
- metadata +52 -10
- data/lib/gamebox/lib/surface_ext.rb +0 -76
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
A game template for building and distributing
|
7
|
+
A game template for building and distributing Gosu games. See docs/getting_started.rdoc for help getting started.
|
8
8
|
|
9
9
|
== FEATURES/PROBLEMS:
|
10
10
|
|
@@ -12,13 +12,14 @@
|
|
12
12
|
|
13
13
|
== SYNOPSIS:
|
14
14
|
|
15
|
-
A game template for building and distributing
|
15
|
+
A game template for building and distributing Gosu games.
|
16
16
|
|
17
17
|
== REQUIREMENTS:
|
18
18
|
|
19
|
-
*
|
19
|
+
* Gosu
|
20
20
|
* constructor gem
|
21
21
|
* publisher gem
|
22
|
+
* bundler
|
22
23
|
* rspec (for gamebox tests)
|
23
24
|
* algorithms gem (optional for line of site and A*)
|
24
25
|
|
data/Rakefile
CHANGED
@@ -5,14 +5,15 @@ begin
|
|
5
5
|
gem.name = "gamebox"
|
6
6
|
gem.executables = "gamebox"
|
7
7
|
gem.rubyforge_project = "gamebox"
|
8
|
-
gem.summary = %Q{Framework for building and distributing games using
|
9
|
-
gem.description = %Q{Framework for building and distributing games using
|
8
|
+
gem.summary = %Q{Framework for building and distributing games using Gosu}
|
9
|
+
gem.description = %Q{Framework for building and distributing games using Gosu}
|
10
10
|
gem.email = "shawn42@gmail.com"
|
11
11
|
gem.homepage = "http://shawn42.github.com/gamebox"
|
12
12
|
gem.authors = ["Shawn Anderson","Jason Roelofs","Karlin Fox"]
|
13
13
|
gem.add_development_dependency "rspec"
|
14
14
|
gem.add_development_dependency "jeweler"
|
15
|
-
gem.add_dependency '
|
15
|
+
gem.add_dependency 'gosu'
|
16
|
+
gem.add_dependency 'bundler'
|
16
17
|
gem.add_dependency 'constructor'
|
17
18
|
gem.add_dependency 'publisher'
|
18
19
|
gem.files.exclude 'examples'
|
@@ -24,8 +25,15 @@ rescue LoadError
|
|
24
25
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
25
26
|
end
|
26
27
|
|
28
|
+
begin
|
29
|
+
require 'metric_fu'
|
30
|
+
rescue LoadError
|
31
|
+
puts "metric_fu (or a dependency) not available. Install it with: sudo gem install metric_fu"
|
32
|
+
end
|
33
|
+
|
27
34
|
STATS_DIRECTORIES = [
|
28
|
-
%w(Source lib/)
|
35
|
+
%w(Source lib/),
|
36
|
+
%w(Unit\ tests spec/)
|
29
37
|
].collect { |name, dir| [ name, "#{dir}" ] }.select { |name, dir| File.directory?(dir) }
|
30
38
|
|
31
39
|
desc "Report code statistics (KLOCs, etc) from the application"
|
data/TODO.txt
CHANGED
@@ -7,9 +7,6 @@ on_update do |time|
|
|
7
7
|
# do stuff?
|
8
8
|
end
|
9
9
|
|
10
|
-
allow easy pausing of game and physics
|
11
|
-
- fire :pause event w/ a new Director of actors?
|
12
|
-
change Polaris to return partial path when step max is reached
|
13
10
|
update physical objects to use chipmunk_object.rb
|
14
11
|
|
15
12
|
make complex Phyiscal behaviors
|
@@ -25,8 +22,7 @@ add Extra; actor with a short time to live (TTL); useful for special effects (ma
|
|
25
22
|
|
26
23
|
static deployment bundles (crate, love-clone; custom C project)
|
27
24
|
ruby
|
28
|
-
|
29
|
-
rubygame
|
25
|
+
gosu
|
30
26
|
possible features:
|
31
27
|
AI
|
32
28
|
state machine
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.1
|
data/docs/getting_started.rdoc
CHANGED
@@ -14,8 +14,8 @@ The reason I wrote Gamebox is twofold: first, to aid in 48 hour game writing com
|
|
14
14
|
- or tar from http://shawn42.github.com/gamebox
|
15
15
|
- or git pull from git://github.com/shawn42/gamebox.git
|
16
16
|
- required gems
|
17
|
-
-
|
18
|
-
-
|
17
|
+
- bundler
|
18
|
+
- gosu
|
19
19
|
- constructor
|
20
20
|
- publisher
|
21
21
|
- rspec for unit tests
|
data/gamebox.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gamebox}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Shawn Anderson", "Jason Roelofs", "Karlin Fox"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-11-02}
|
13
13
|
s.default_executable = %q{gamebox}
|
14
|
-
s.description = %q{Framework for building and distributing games using
|
14
|
+
s.description = %q{Framework for building and distributing games using Gosu}
|
15
15
|
s.email = %q{shawn42@gmail.com}
|
16
16
|
s.executables = ["gamebox"]
|
17
17
|
s.extra_rdoc_files = [
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
]
|
20
20
|
s.files = [
|
21
21
|
".gitignore",
|
22
|
+
"Gemfile",
|
22
23
|
"History.txt",
|
23
24
|
"README.txt",
|
24
25
|
"Rakefile",
|
@@ -35,11 +36,13 @@ Gem::Specification.new do |s|
|
|
35
36
|
"lib/gamebox/actor.rb",
|
36
37
|
"lib/gamebox/actor_factory.rb",
|
37
38
|
"lib/gamebox/actor_view.rb",
|
39
|
+
"lib/gamebox/actors/collidable_debugger.rb",
|
38
40
|
"lib/gamebox/actors/curtain.rb",
|
39
41
|
"lib/gamebox/actors/fps.rb",
|
40
42
|
"lib/gamebox/actors/label.rb",
|
41
43
|
"lib/gamebox/actors/logo.rb",
|
42
44
|
"lib/gamebox/actors/score.rb",
|
45
|
+
"lib/gamebox/actors/spatial_debugger.rb",
|
43
46
|
"lib/gamebox/actors/svg_actor.rb",
|
44
47
|
"lib/gamebox/arbiter.rb",
|
45
48
|
"lib/gamebox/backstage.rb",
|
@@ -47,6 +50,10 @@ Gem::Specification.new do |s|
|
|
47
50
|
"lib/gamebox/behaviors/animated.rb",
|
48
51
|
"lib/gamebox/behaviors/audible.rb",
|
49
52
|
"lib/gamebox/behaviors/collidable.rb",
|
53
|
+
"lib/gamebox/behaviors/collidable/aabb_collidable.rb",
|
54
|
+
"lib/gamebox/behaviors/collidable/circle_collidable.rb",
|
55
|
+
"lib/gamebox/behaviors/collidable/collidable_shape.rb",
|
56
|
+
"lib/gamebox/behaviors/collidable/polygon_collidable.rb",
|
50
57
|
"lib/gamebox/behaviors/graphical.rb",
|
51
58
|
"lib/gamebox/behaviors/layered.rb",
|
52
59
|
"lib/gamebox/behaviors/physical.rb",
|
@@ -63,10 +70,12 @@ Gem::Specification.new do |s|
|
|
63
70
|
"lib/gamebox/data/sounds/GAMEBOX_SOUND_FX_GO_HERE",
|
64
71
|
"lib/gamebox/director.rb",
|
65
72
|
"lib/gamebox/event_compat.rb",
|
73
|
+
"lib/gamebox/ftor.rb",
|
66
74
|
"lib/gamebox/gamebox_application.rb",
|
67
75
|
"lib/gamebox/gamebox_generator.rb",
|
68
76
|
"lib/gamebox/generators/actor_generator.rb",
|
69
77
|
"lib/gamebox/generators/view_generator.rb",
|
78
|
+
"lib/gamebox/hooked_gosu_window.rb",
|
70
79
|
"lib/gamebox/input_manager.rb",
|
71
80
|
"lib/gamebox/lib/aliasing.rb",
|
72
81
|
"lib/gamebox/lib/code_statistics.rb",
|
@@ -78,8 +87,8 @@ Gem::Specification.new do |s|
|
|
78
87
|
"lib/gamebox/lib/numbers_ext.rb",
|
79
88
|
"lib/gamebox/lib/platform.rb",
|
80
89
|
"lib/gamebox/lib/publisher_ext.rb",
|
90
|
+
"lib/gamebox/lib/rect.rb",
|
81
91
|
"lib/gamebox/lib/sorted_list.rb",
|
82
|
-
"lib/gamebox/lib/surface_ext.rb",
|
83
92
|
"lib/gamebox/physical_director.rb",
|
84
93
|
"lib/gamebox/physical_stage.rb",
|
85
94
|
"lib/gamebox/physics.rb",
|
@@ -119,10 +128,13 @@ Gem::Specification.new do |s|
|
|
119
128
|
"lib/gamebox/viewport.rb",
|
120
129
|
"lib/gamebox/views/graphical_actor_view.rb",
|
121
130
|
"lib/gamebox/wrapped_screen.rb",
|
131
|
+
"load_paths.rb",
|
122
132
|
"script/perf_polaris.rb",
|
133
|
+
"script/perf_spatial_hash.rb",
|
123
134
|
"spec/actor_spec.rb",
|
124
135
|
"spec/actor_view_spec.rb",
|
125
136
|
"spec/animated_spec.rb",
|
137
|
+
"spec/arbiter_spec.rb",
|
126
138
|
"spec/backstage_spec.rb",
|
127
139
|
"spec/behavior_spec.rb",
|
128
140
|
"spec/collidable_spec.rb",
|
@@ -139,12 +151,13 @@ Gem::Specification.new do |s|
|
|
139
151
|
s.rdoc_options = ["--charset=UTF-8"]
|
140
152
|
s.require_paths = ["lib"]
|
141
153
|
s.rubyforge_project = %q{gamebox}
|
142
|
-
s.rubygems_version = %q{1.3.
|
143
|
-
s.summary = %q{Framework for building and distributing games using
|
154
|
+
s.rubygems_version = %q{1.3.7}
|
155
|
+
s.summary = %q{Framework for building and distributing games using Gosu}
|
144
156
|
s.test_files = [
|
145
157
|
"spec/actor_spec.rb",
|
146
158
|
"spec/actor_view_spec.rb",
|
147
159
|
"spec/animated_spec.rb",
|
160
|
+
"spec/arbiter_spec.rb",
|
148
161
|
"spec/backstage_spec.rb",
|
149
162
|
"spec/behavior_spec.rb",
|
150
163
|
"spec/collidable_spec.rb",
|
@@ -162,23 +175,26 @@ Gem::Specification.new do |s|
|
|
162
175
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
163
176
|
s.specification_version = 3
|
164
177
|
|
165
|
-
if Gem::Version.new(Gem::
|
178
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
166
179
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
167
180
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
168
|
-
s.add_runtime_dependency(%q<
|
181
|
+
s.add_runtime_dependency(%q<gosu>, [">= 0"])
|
182
|
+
s.add_runtime_dependency(%q<bundler>, [">= 0"])
|
169
183
|
s.add_runtime_dependency(%q<constructor>, [">= 0"])
|
170
184
|
s.add_runtime_dependency(%q<publisher>, [">= 0"])
|
171
185
|
else
|
172
186
|
s.add_dependency(%q<rspec>, [">= 0"])
|
173
187
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
174
|
-
s.add_dependency(%q<
|
188
|
+
s.add_dependency(%q<gosu>, [">= 0"])
|
189
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
175
190
|
s.add_dependency(%q<constructor>, [">= 0"])
|
176
191
|
s.add_dependency(%q<publisher>, [">= 0"])
|
177
192
|
end
|
178
193
|
else
|
179
194
|
s.add_dependency(%q<rspec>, [">= 0"])
|
180
195
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
181
|
-
s.add_dependency(%q<
|
196
|
+
s.add_dependency(%q<gosu>, [">= 0"])
|
197
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
182
198
|
s.add_dependency(%q<constructor>, [">= 0"])
|
183
199
|
s.add_dependency(%q<publisher>, [">= 0"])
|
184
200
|
end
|
data/lib/gamebox/actor.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'publisher'
|
2
|
+
require 'inflector'
|
3
|
+
|
2
4
|
# Actor represent a game object.
|
3
5
|
# Actors can have behaviors added and removed from them. Such as :physical or :animated.
|
4
6
|
# They are created and hooked up to their optional View class in Stage#create_actor.
|
@@ -48,7 +50,7 @@ class Actor
|
|
48
50
|
end
|
49
51
|
|
50
52
|
ordered_behaviors.each do |behavior|
|
51
|
-
is behavior_defs[behavior]
|
53
|
+
is behavior_defs[behavior] unless is? behavior
|
52
54
|
end
|
53
55
|
setup
|
54
56
|
end
|
@@ -82,8 +84,13 @@ class Actor
|
|
82
84
|
# :range=>3 to it
|
83
85
|
# Actor#is does try to require 'shootable' but will not throw an error if shootable cannot be required.
|
84
86
|
def is(behavior_def)
|
85
|
-
|
86
|
-
|
87
|
+
if behavior_def.is_a?(Hash)
|
88
|
+
behavior_sym = behavior_def.keys.first
|
89
|
+
behavior_opts = behavior_def.values.first
|
90
|
+
else
|
91
|
+
behavior_sym = behavior_def
|
92
|
+
behavior_opts = {}
|
93
|
+
end
|
87
94
|
begin
|
88
95
|
require behavior_sym.to_s;
|
89
96
|
rescue LoadError
|
@@ -5,7 +5,7 @@ require 'graphical_actor_view'
|
|
5
5
|
# stage, input_manager, director, resource_manager. It also creates the ActorView
|
6
6
|
# associated with the Actor and registers it to the Stage be drawn.
|
7
7
|
class ActorFactory
|
8
|
-
constructor :input_manager
|
8
|
+
constructor :input_manager, :wrapped_screen
|
9
9
|
|
10
10
|
attr_accessor :stage_manager, :director
|
11
11
|
|
@@ -49,7 +49,7 @@ class ActorFactory
|
|
49
49
|
view_klass ||= GraphicalActorView
|
50
50
|
end
|
51
51
|
|
52
|
-
view_klass.new stage, model if view_klass
|
52
|
+
view_klass.new stage, model, @wrapped_screen if view_klass
|
53
53
|
|
54
54
|
model.show unless opts[:hide]
|
55
55
|
|
data/lib/gamebox/actor_view.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
class ActorView
|
2
|
-
attr_accessor :actor, :stage, :layer, :parallax
|
3
|
-
def initialize(stage, actor)
|
2
|
+
attr_accessor :actor, :stage, :layer, :parallax, :wrapped_screen
|
3
|
+
def initialize(stage, actor, wrapped_screen)
|
4
4
|
@stage = stage
|
5
5
|
@actor = actor
|
6
|
+
@wrapped_screen = wrapped_screen
|
6
7
|
|
7
8
|
@layer = 0
|
8
9
|
@parallax = 1
|
@@ -11,20 +12,22 @@ class ActorView
|
|
11
12
|
@parallax = @actor.parallax
|
12
13
|
end
|
13
14
|
|
14
|
-
actor.when :remove_me do
|
15
|
-
@stage.unregister_drawable self
|
16
|
-
end
|
15
|
+
actor.when :remove_me do unregister end
|
17
16
|
|
18
|
-
actor.when :hide_me do
|
19
|
-
@stage.unregister_drawable self
|
20
|
-
end
|
17
|
+
actor.when :hide_me do unregister end
|
21
18
|
|
22
|
-
actor.when :show_me do
|
23
|
-
@stage.register_drawable self
|
24
|
-
end
|
19
|
+
actor.when :show_me do register end
|
25
20
|
|
26
21
|
setup
|
27
22
|
end
|
23
|
+
|
24
|
+
def register
|
25
|
+
@stage.register_drawable self
|
26
|
+
end
|
27
|
+
|
28
|
+
def unregister
|
29
|
+
@stage.unregister_drawable self
|
30
|
+
end
|
28
31
|
|
29
32
|
def setup
|
30
33
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'actor'
|
2
|
+
require 'actor_view'
|
3
|
+
|
4
|
+
class CollidableDebugger < Actor
|
5
|
+
|
6
|
+
attr_reader :actor
|
7
|
+
def setup
|
8
|
+
@actor = opts[:collider]
|
9
|
+
@actor.when :remove_me do
|
10
|
+
remove_self
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class CollidableDebuggerView < ActorView
|
17
|
+
|
18
|
+
def setup
|
19
|
+
@color = Color[:white]
|
20
|
+
end
|
21
|
+
|
22
|
+
def draw(target,x_off,y_off)
|
23
|
+
collider = @actor.actor
|
24
|
+
case collider.collidable_shape
|
25
|
+
when :circle
|
26
|
+
target.draw_circle [x_off+collider.center_x, y_off+collider.center_y], collider.radius, @color
|
27
|
+
else
|
28
|
+
collider.cw_world_lines.each do |line|
|
29
|
+
f = line.first
|
30
|
+
l = line.last
|
31
|
+
target.draw_line [x_off+f[0],y_off+f[1]],[x_off+l[0],y_off+l[1]], @color
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -3,8 +3,8 @@ require 'publisher'
|
|
3
3
|
require 'actor_view'
|
4
4
|
|
5
5
|
class CurtainView < ActorView
|
6
|
-
def draw(target,x_off,y_off)
|
7
|
-
target.
|
6
|
+
def draw(target,x_off,y_off,z)
|
7
|
+
target.fill 0,0,1024,800, [0,0,0,@actor.height]
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
data/lib/gamebox/actors/logo.rb
CHANGED
data/lib/gamebox/actors/score.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
class ScoreView < ActorView
|
2
|
-
def draw(target,x_off,y_off)
|
2
|
+
def draw(target,x_off,y_off,z)
|
3
3
|
text = @actor.score.to_s
|
4
4
|
text = '0'*(6-text.size)+text
|
5
5
|
|
6
6
|
font = @stage.resource_manager.load_font 'Asimov.ttf', 30
|
7
|
-
text_image = font.render text, true, [250,250,250,255]
|
8
|
-
|
9
7
|
x = @actor.x
|
10
8
|
y = @actor.y
|
11
|
-
|
12
|
-
text_image.blit target.screen, [x,y]
|
9
|
+
font.draw text, x,y,z#, 1,1,target.convert_color([250,250,250,255])
|
13
10
|
end
|
14
11
|
end
|
15
12
|
class Score < Actor
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'actor'
|
2
|
+
require 'actor_view'
|
3
|
+
|
4
|
+
class SpatialDebugger < Actor
|
5
|
+
|
6
|
+
has_behavior :updatable
|
7
|
+
|
8
|
+
attr_reader :spatial, :ratio
|
9
|
+
def setup
|
10
|
+
@spatial = stage.stagehand(:spatial)
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(time)
|
14
|
+
super
|
15
|
+
if stage.checks && stage.checks > 0
|
16
|
+
@ratio = "size:#{@spatial.cell_size} #{stage.collisions} / #{stage.checks} ("
|
17
|
+
@ratio += "#{stage.collisions / stage.checks.to_f})"
|
18
|
+
else
|
19
|
+
@ratio = "N/A"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class SpatialDebuggerView < ActorView
|
26
|
+
def setup
|
27
|
+
size = 30
|
28
|
+
font = "Asimov.ttf"
|
29
|
+
@font = @actor.resource_manager.load_font font, size
|
30
|
+
end
|
31
|
+
|
32
|
+
def draw(target,x_off,y_off)
|
33
|
+
cell_size = @actor.spatial.cell_size
|
34
|
+
max = 0
|
35
|
+
@actor.spatial.buckets.each do |x_bucket,stuff|
|
36
|
+
stuff.each do |y_bucket,items|
|
37
|
+
max = items.size if items.size > max
|
38
|
+
x = x_bucket * cell_size + x_off
|
39
|
+
y = y_bucket * cell_size + y_off
|
40
|
+
target.draw_box [x,y], [x+cell_size,y+cell_size], Color[:white]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
@text_image = @font.render "#{@actor.ratio} [#{max}]", true, Color[:white]
|
45
|
+
@text_image.blit target.screen, [@actor.x, @actor.y]
|
46
|
+
end
|
47
|
+
end
|