gamebox 0.1.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|