gamebox 0.4.0.rc4 → 0.4.0.rc5
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/TODO.txt +0 -2
- data/bin/gamebox +28 -5
- data/gamebox.gemspec +1 -2
- data/lib/gamebox.rb +4 -0
- data/lib/gamebox/behaviors/{input_stater.rb → input_mapper.rb} +1 -1
- data/lib/gamebox/behaviors/physical.rb +11 -0
- data/lib/gamebox/core/actor.rb +2 -0
- data/lib/gamebox/core/behavior_factory.rb +3 -4
- data/lib/gamebox/core/configuration.rb +0 -1
- data/lib/gamebox/core/hooked_gosu_window.rb +9 -1
- data/lib/gamebox/core/physics_manager.rb +39 -19
- data/lib/gamebox/core/stage.rb +8 -13
- data/lib/gamebox/spec/helper.rb +6 -0
- data/lib/gamebox/version.rb +1 -1
- data/spec/acceptance/basic_actor_lifecycle_spec.rb +11 -1
- data/spec/acceptance/built_in_collision_handling_spec.rb +3 -3
- data/spec/acceptance/chipmunk_collision_handling_spec.rb +0 -2
- data/spec/acceptance/{input_stater_spec.rb → input_mapper_spec.rb} +1 -1
- data/spec/acceptance/pausing_spec.rb +29 -8
- data/spec/acceptance/timer_usage_spec.rb +5 -5
- data/spec/behaviors/animated_spec.rb +0 -2
- data/spec/behaviors/positioned_spec.rb +41 -2
- data/spec/core/arbiter_spec.rb +19 -1
- data/spec/core/hooked_gosu_window_spec.rb +10 -0
- data/spec/core/stage_spec.rb +74 -46
- data/{app_generators/templates → templates/app}/.gitignore +0 -0
- data/{app_generators/templates/Gemfile → templates/app/Gemfile.tt} +1 -1
- data/{app_generators/templates → templates/app}/NEXT_STEPS.txt +0 -0
- data/{app_generators/templates → templates/app}/README.rdoc +0 -0
- data/{app_generators/templates → templates/app}/Rakefile +0 -0
- data/{app_generators/templates → templates/app}/config/boot.rb +0 -0
- data/{app_generators/templates → templates/app}/config/environment.rb +2 -2
- data/{app_generators/templates → templates/app}/config/game.yml +0 -0
- data/{app_generators/templates → templates/app}/data/fonts/FONTS_GO_HERE +0 -0
- data/{app_generators/templates → templates/app}/data/graphics/GRAPHICS_GO_HERE +0 -0
- data/{app_generators/templates → templates/app}/data/music/MUSIC_GOES_HERE +0 -0
- data/{app_generators/templates → templates/app}/data/sounds/SOUND_FX_GO_HERE +0 -0
- data/{app_generators/templates → templates/app}/spec/helper.rb +0 -0
- data/{app_generators/templates → templates/app}/src/actors/player.rb +0 -0
- data/{app_generators/templates → templates/app}/src/app.rb +0 -0
- data/{app_generators/templates → templates/app}/src/demo_stage.rb +0 -0
- metadata +24 -46
- data/app_generators/gamebox_generator.rb +0 -95
- data/app_generators/templates/script/actor.erb +0 -10
- data/app_generators/templates/script/actor_spec.erb +0 -11
- data/app_generators/templates/script/actor_view.erb +0 -6
- data/app_generators/templates/script/actor_view_spec.erb +0 -10
- data/app_generators/templates/script/generate +0 -12
data/TODO.txt
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
TAKE YOUR PICK:
|
2
|
-
- convert generators to thor
|
3
2
|
- update README.rdoc in template app
|
4
3
|
- generate sample Gemfile with current gamebox version
|
5
4
|
|
@@ -7,7 +6,6 @@ TAKE YOUR PICK:
|
|
7
6
|
- game.yml settings .. ^^^
|
8
7
|
|
9
8
|
- nice helpers for testing behaviors
|
10
|
-
|
11
9
|
- add define_style that defines a bucket of behaviors
|
12
10
|
- add helper for has_required_attributes on an actor from a behavior (checking that opts for the behavior has said key)
|
13
11
|
|
data/bin/gamebox
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'rubigen'
|
3
|
+
require 'thor'
|
5
4
|
require 'gamebox'
|
6
5
|
|
7
6
|
def print_version
|
@@ -13,6 +12,30 @@ if ARGV.include?('-v') || ARGV.include?('--version')
|
|
13
12
|
exit 0
|
14
13
|
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
class GameboxThorCommand < Thor
|
16
|
+
include Thor::Actions
|
17
|
+
|
18
|
+
def self.source_root
|
19
|
+
File.join(File.dirname(__FILE__), "../templates/")
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "new PATH", "Generates a new gamebox game at PATH."
|
23
|
+
def new(*args)
|
24
|
+
game_name = args[0]
|
25
|
+
self.destination_root = game_name
|
26
|
+
|
27
|
+
if Gamebox::VERSION::RC > 0
|
28
|
+
@gamebox_version = Gamebox::VERSION::STRING
|
29
|
+
else
|
30
|
+
@gamebox_version = "~> "+[Gamebox::VERSION::MAJOR, Gamebox::VERSION::MINOR, '0'].join('.')
|
31
|
+
end
|
32
|
+
|
33
|
+
directory "app", "."
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
GameboxThorCommand.start
|
data/gamebox.gemspec
CHANGED
@@ -22,9 +22,8 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency "publisher"
|
23
23
|
s.add_dependency "conject", ">= 0.0.5"
|
24
24
|
s.add_dependency "tween"
|
25
|
-
s.add_dependency "activesupport", '3.0.0'
|
26
25
|
s.add_dependency "i18n"
|
27
|
-
s.add_dependency "
|
26
|
+
s.add_dependency "thor", ">= 0.15.2"
|
28
27
|
s.add_dependency "require_all"
|
29
28
|
s.add_dependency "kvo", ">= 0.0.2"
|
30
29
|
|
data/lib/gamebox.rb
CHANGED
@@ -105,6 +105,13 @@ Behavior.define :physical do
|
|
105
105
|
verts = @opts[:verts].dup
|
106
106
|
verts << @opts[:verts][0]
|
107
107
|
actor.segment_groups << verts
|
108
|
+
|
109
|
+
when :segment
|
110
|
+
@radius = @opts[:radius] || 0
|
111
|
+
@endpoints = @opts[:endpoints].collect{ |pt| vec2(*pt.to_a) }
|
112
|
+
@moment_of_inertia ||= @opts[:fixed] ? Float::INFINITY : CP::moment_for_segment(@mass, @endpoints[0], @endpoints[1])
|
113
|
+
actor.body = CP::Body.new(@mass, @moment_of_inertia)
|
114
|
+
actor.shape = CP::Shape::Segment.new(actor.body, @endpoints[0], @endpoints[1], @radius)
|
108
115
|
end
|
109
116
|
|
110
117
|
actor.shape.actor = actor
|
@@ -133,6 +140,10 @@ Behavior.define :physical do
|
|
133
140
|
actor.segment_groups << verts
|
134
141
|
when :circle
|
135
142
|
part_shape = CP::Shape::Circle.new(actor.body, part_def[:radius], part_def[:offset])
|
143
|
+
when :segment
|
144
|
+
radius = part_def[:radius] || 0
|
145
|
+
endpoints = part_def[:endpoints].collect{ |pt| vec2(*pt.to_a) }
|
146
|
+
part_shape = CP::Shape::Segment.new(endpoints[0], endpoints[1], radius)
|
136
147
|
else
|
137
148
|
raise "unsupported sub shape type"
|
138
149
|
end
|
data/lib/gamebox/core/actor.rb
CHANGED
@@ -5,10 +5,9 @@
|
|
5
5
|
# or by dynamically creating one at runtime via another behavior.
|
6
6
|
class BehaviorFactory
|
7
7
|
|
8
|
-
# Build a behavior.
|
9
|
-
# add_behavior(:shootable) or add_behavior(:shootable
|
10
|
-
# this will create a new instance of Shootable and pass
|
11
|
-
# :range=>3 to it
|
8
|
+
# Build a behavior.
|
9
|
+
# add_behavior(actor, :shootable) or add_behavior(actor, :shootable, :range=>3)
|
10
|
+
# this will create a new instance of Shootable and pass :range=>3 to it
|
12
11
|
def add_behavior(actor, behavior_name, opts = {})
|
13
12
|
raise "nil actor" if actor.nil?
|
14
13
|
raise "nil behavior definition" if behavior_name.nil?
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module GosuWindowAPI
|
2
|
+
MAX_UPDATE_SIZE_IN_MILLIS = 500
|
2
3
|
def initialize(width, height, fullscreen)
|
3
4
|
super(width, height, fullscreen)
|
4
5
|
end
|
@@ -7,7 +8,14 @@ module GosuWindowAPI
|
|
7
8
|
millis = Gosu::milliseconds
|
8
9
|
|
9
10
|
# ignore the first update
|
10
|
-
|
11
|
+
if @last_millis
|
12
|
+
delta = millis
|
13
|
+
delta -= @last_millis if millis > @last_millis
|
14
|
+
delta = MAX_UPDATE_SIZE_IN_MILLIS if delta > MAX_UPDATE_SIZE_IN_MILLIS
|
15
|
+
|
16
|
+
fire :update, delta
|
17
|
+
end
|
18
|
+
|
11
19
|
@last_millis = millis
|
12
20
|
end
|
13
21
|
|
@@ -1,27 +1,56 @@
|
|
1
1
|
# PhysicsManager creates and manages chipmunks space.
|
2
2
|
class PhysicsManager
|
3
3
|
extend Forwardable
|
4
|
-
def_delegators :@space,
|
4
|
+
def_delegators( :@space,
|
5
|
+
:damping, :damping=,
|
6
|
+
:gravity, :gravity=,
|
7
|
+
:iterations, :iterations= )
|
5
8
|
|
6
9
|
attr_accessor :space
|
10
|
+
|
11
|
+
# Time per physics step, in milliseconds (default 15). Small steps
|
12
|
+
# make the simulation more stable than large steps, but if the step
|
13
|
+
# is too small, it may negatively affect performance, i.e. cause
|
14
|
+
# very high CPU use and/or low framerate.
|
15
|
+
attr_reader :step_size
|
16
|
+
def step_size=(new_step_size)
|
17
|
+
@step_size = new_step_size.to_f
|
18
|
+
@step_size_seconds = @step_size / 1000
|
19
|
+
end
|
20
|
+
|
21
|
+
|
7
22
|
def configure
|
8
23
|
@space = CP::Space.new
|
9
|
-
@space.iterations =
|
10
|
-
|
24
|
+
@space.iterations = 10
|
25
|
+
self.step_size = 15
|
26
|
+
@leftover_step_time = 0
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def update(time)
|
31
|
+
update_physics time
|
11
32
|
end
|
12
33
|
|
13
|
-
PHYSICS_STEP = 25.0
|
14
34
|
def update_physics(time)
|
15
35
|
unless @physics_paused
|
16
|
-
|
17
|
-
|
18
|
-
dt = 1.0/60/steps
|
36
|
+
@leftover_step_time += time
|
37
|
+
steps = (@leftover_step_time / @step_size).ceil
|
19
38
|
steps.times do
|
20
|
-
@space.step
|
39
|
+
@space.step @step_size_seconds
|
21
40
|
end
|
41
|
+
@leftover_step_time -= (steps * @step_size).round
|
22
42
|
end
|
23
43
|
end
|
24
44
|
|
45
|
+
|
46
|
+
def pause
|
47
|
+
pause_physics
|
48
|
+
end
|
49
|
+
|
50
|
+
def unpause
|
51
|
+
restart_physics
|
52
|
+
end
|
53
|
+
|
25
54
|
def pause_physics
|
26
55
|
@physics_paused = true
|
27
56
|
end
|
@@ -30,9 +59,6 @@ class PhysicsManager
|
|
30
59
|
@physics_paused = false
|
31
60
|
end
|
32
61
|
|
33
|
-
def update(time)
|
34
|
-
update_physics time
|
35
|
-
end
|
36
62
|
|
37
63
|
# allows for passing arrays of collision types not just single ones
|
38
64
|
# add_collision_func([:foo,:bar], [:baz,:yar]) becomes:
|
@@ -71,6 +97,7 @@ class PhysicsManager
|
|
71
97
|
end
|
72
98
|
end
|
73
99
|
|
100
|
+
|
74
101
|
def register_physical_constraint(constraint)
|
75
102
|
@space.add_constraint constraint
|
76
103
|
end
|
@@ -93,6 +120,7 @@ class PhysicsManager
|
|
93
120
|
end
|
94
121
|
end
|
95
122
|
|
123
|
+
|
96
124
|
# Find any / all objects who's bounding box currently contains
|
97
125
|
# the passed in screen position. Requires a block as this sets
|
98
126
|
# a callback all the way down in Chipmunk and could be called
|
@@ -105,12 +133,4 @@ class PhysicsManager
|
|
105
133
|
# block.call(actor)
|
106
134
|
# end
|
107
135
|
# end
|
108
|
-
|
109
|
-
def pause
|
110
|
-
pause_physics
|
111
|
-
end
|
112
|
-
|
113
|
-
def unpause
|
114
|
-
restart_physics
|
115
|
-
end
|
116
136
|
end
|
data/lib/gamebox/core/stage.rb
CHANGED
@@ -13,7 +13,7 @@ class Stage
|
|
13
13
|
kid.construct_with *self.object_definition.component_names
|
14
14
|
end
|
15
15
|
|
16
|
-
attr_accessor :
|
16
|
+
attr_accessor :opts, :viewport, :backstage
|
17
17
|
|
18
18
|
def configure(backstage, opts)
|
19
19
|
res = config_manager[:screen_resolution]
|
@@ -133,19 +133,14 @@ class Stage
|
|
133
133
|
# move all actors from one layer to another
|
134
134
|
# note, this will remove all actors in that layer!
|
135
135
|
def move_layer(from_parallax, from_layer, to_parallax, to_layer)
|
136
|
-
drawable_list = @drawables[from_parallax].
|
136
|
+
drawable_list = @drawables[from_parallax][from_layer].dup
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
drawable.parallax = to_parallax
|
144
|
-
drawable.layer = to_layer
|
145
|
-
end
|
138
|
+
drawable_list.each do |drawable|
|
139
|
+
unregister_drawable drawable
|
140
|
+
drawable.parallax = to_parallax
|
141
|
+
drawable.layer = to_layer
|
142
|
+
register_drawable drawable
|
146
143
|
end
|
147
|
-
prev_drawable_list
|
148
|
-
|
149
144
|
end
|
150
145
|
|
151
146
|
def on_pause(&block)
|
@@ -194,7 +189,7 @@ class Stage
|
|
194
189
|
# modal_actor :dialog, x: 40, y: 50, message: "WOW"
|
195
190
|
def modal_actor(*args)
|
196
191
|
on_pause do
|
197
|
-
pause_actor =
|
192
|
+
pause_actor = create_actor *args
|
198
193
|
pause_actor.when :remove_me do
|
199
194
|
@pause_listeners = nil
|
200
195
|
unpause
|
data/lib/gamebox/spec/helper.rb
CHANGED
@@ -272,6 +272,12 @@ module GameboxAcceptanceSpecHelpers
|
|
272
272
|
game.current_stage.unpause
|
273
273
|
end
|
274
274
|
|
275
|
+
def remove_actor(actor_type)
|
276
|
+
act = game.actor(actor_type)
|
277
|
+
act.should be
|
278
|
+
act.remove
|
279
|
+
end
|
280
|
+
|
275
281
|
def see_actor_attrs(actor_type, attrs)
|
276
282
|
act = game.actor(actor_type)
|
277
283
|
act.should be
|
data/lib/gamebox/version.rb
CHANGED
@@ -65,6 +65,10 @@ describe "The basic life cycle of an actor", acceptance: true do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
define_actor :monkey do
|
69
|
+
has_attributes bananas: 3
|
70
|
+
end
|
71
|
+
|
68
72
|
|
69
73
|
it 'creates an actor from within stage with the correct behaviors and updates' do
|
70
74
|
game.stage do |stage|
|
@@ -98,6 +102,12 @@ describe "The basic life cycle of an actor", acceptance: true do
|
|
98
102
|
see_actor_attrs :mc_bane, x: 500, y: 30
|
99
103
|
end
|
100
104
|
|
101
|
-
it 'uses default values from actor definition'
|
105
|
+
it 'uses default values from actor definition' do
|
106
|
+
game.stage do |stage|
|
107
|
+
create_actor :monkey
|
108
|
+
end
|
109
|
+
see_actor_attrs :monkey, bananas: 3
|
110
|
+
end
|
111
|
+
|
102
112
|
end
|
103
113
|
|
@@ -16,7 +16,7 @@ describe "Using gamebox's built in collision handling", acceptance: true do
|
|
16
16
|
laser = nil
|
17
17
|
alien = nil
|
18
18
|
game.stage do |stage| # instance of TestingStage
|
19
|
-
laser = create_actor :frickin_laser, x: 0, y: 0, vel_x:
|
19
|
+
laser = create_actor :frickin_laser, x: 0, y: 0, vel_x: 50, vel_y: 1
|
20
20
|
alien = create_actor :alien, x: 0, y: 0
|
21
21
|
on_collision_of :frickin_laser, :alien do |collision_laser, collision_alien|
|
22
22
|
@collision_laser = collision_laser
|
@@ -34,7 +34,7 @@ describe "Using gamebox's built in collision handling", acceptance: true do
|
|
34
34
|
laser = nil
|
35
35
|
alien = nil
|
36
36
|
game.stage do |stage| # instance of TestingStage
|
37
|
-
laser = create_actor :frickin_laser, x: 0, y: 0, vel_x:
|
37
|
+
laser = create_actor :frickin_laser, x: 0, y: 0, vel_x: 50, vel_y: 0
|
38
38
|
alien = create_actor :alien, x: 31, y: 0
|
39
39
|
on_collision_of :frickin_laser, :alien do |collision_laser, collision_alien|
|
40
40
|
@collision_laser = collision_laser
|
@@ -45,7 +45,7 @@ describe "Using gamebox's built in collision handling", acceptance: true do
|
|
45
45
|
# now the laser moved and will be checked for collisions _next_ update
|
46
46
|
update 1
|
47
47
|
# trigger the next round of collision detection
|
48
|
-
update
|
48
|
+
update 200
|
49
49
|
# TODO not sure about this one..
|
50
50
|
update 1
|
51
51
|
see_stage_ivars collision_laser: laser, collision_alien: alien
|
@@ -35,7 +35,6 @@ describe "Using chipmunks collision handling", acceptance: true do
|
|
35
35
|
@physics_manager = this_object_context[:physics_manager]
|
36
36
|
@physics_manager.configure
|
37
37
|
# TODO move these optionally to configure?
|
38
|
-
@physics_manager.elastic_iterations = 4
|
39
38
|
@physics_manager.damping = 0.4
|
40
39
|
|
41
40
|
rock = create_actor :rock, x: 0, y: 0
|
@@ -63,7 +62,6 @@ describe "Using chipmunks collision handling", acceptance: true do
|
|
63
62
|
@physics_manager = this_object_context[:physics_manager]
|
64
63
|
@physics_manager.configure
|
65
64
|
# TODO move these optionally to configure?
|
66
|
-
@physics_manager.elastic_iterations = 4
|
67
65
|
@physics_manager.damping = 0.4
|
68
66
|
@physics_manager.gravity = vec2(0,500)
|
69
67
|
|
@@ -6,7 +6,7 @@ describe "pausing in gamebox", acceptance: true do
|
|
6
6
|
beh.requires :timer_manager
|
7
7
|
beh.setup do
|
8
8
|
actor.has_attributes rocks_shot: 0
|
9
|
-
timer_manager.add_timer 'shoot_rock',
|
9
|
+
timer_manager.add_timer 'shoot_rock', 100 do
|
10
10
|
actor.react_to :shoot_rock
|
11
11
|
end
|
12
12
|
end
|
@@ -22,9 +22,9 @@ describe "pausing in gamebox", acceptance: true do
|
|
22
22
|
|
23
23
|
|
24
24
|
it 'allows timers and all updates from the director to be paused / unpaused' do
|
25
|
-
game.stage do |stage|
|
25
|
+
game.stage do |stage|
|
26
26
|
@counter = 0
|
27
|
-
timer_manager.add_timer 'stage_timer',
|
27
|
+
timer_manager.add_timer 'stage_timer', 200 do
|
28
28
|
@counter += 1
|
29
29
|
end
|
30
30
|
create_actor :mountain
|
@@ -48,30 +48,51 @@ describe "pausing in gamebox", acceptance: true do
|
|
48
48
|
see_actor_attrs :mountain, rocks_shot: 0
|
49
49
|
see_stage_ivars counter: 0
|
50
50
|
|
51
|
-
update
|
51
|
+
update 10
|
52
52
|
see_actor_attrs :mountain, rocks_shot: 0
|
53
53
|
see_stage_ivars counter: 0
|
54
54
|
|
55
|
-
update
|
55
|
+
update 91
|
56
56
|
see_actor_attrs :mountain, rocks_shot: 1
|
57
57
|
see_stage_ivars counter: 0
|
58
58
|
|
59
59
|
press_key KbP
|
60
60
|
game.should have_actor(:label)
|
61
|
-
update
|
61
|
+
update 201
|
62
62
|
see_actor_attrs :mountain, rocks_shot: 1
|
63
63
|
see_stage_ivars counter: 0
|
64
64
|
|
65
|
-
update
|
65
|
+
update 201
|
66
66
|
see_actor_attrs :mountain, rocks_shot: 1
|
67
67
|
see_stage_ivars counter: 0
|
68
68
|
|
69
69
|
press_key KbP
|
70
70
|
game.should_not have_actor(:label)
|
71
|
-
update
|
71
|
+
update 201
|
72
72
|
see_actor_attrs :mountain, rocks_shot: 2
|
73
73
|
see_stage_ivars counter: 1
|
74
74
|
end
|
75
75
|
|
76
|
+
it 'modal actor pauses, shows actor, unpauses when that actor dies' do
|
77
|
+
game.stage do |stage|
|
78
|
+
modal_actor :label, text: "pause" do
|
79
|
+
@some_unpause_indicator = true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
see_stage_ivars some_unpause_indicator: nil
|
84
|
+
game.should have_actor(:label)
|
85
|
+
see_actor_attrs :label, text: "pause"
|
86
|
+
|
87
|
+
remove_actor :label
|
88
|
+
|
89
|
+
game.should_not have_actor(:label)
|
90
|
+
see_stage_ivars some_unpause_indicator: true
|
91
|
+
end
|
92
|
+
|
76
93
|
end
|
77
94
|
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
@@ -6,7 +6,7 @@ describe "Using timers", acceptance: true do
|
|
6
6
|
beh.requires :timer_manager
|
7
7
|
beh.setup do
|
8
8
|
actor.has_attributes rocks_shot: 0
|
9
|
-
timer_manager.add_timer 'shoot_rock',
|
9
|
+
timer_manager.add_timer 'shoot_rock', 100 do
|
10
10
|
actor.react_to :shoot_rock
|
11
11
|
end
|
12
12
|
end
|
@@ -24,7 +24,7 @@ describe "Using timers", acceptance: true do
|
|
24
24
|
it 'allows behaviors to get fired from timers' do
|
25
25
|
game.stage do |stage| # instance of TestingStage
|
26
26
|
@counter = 0
|
27
|
-
timer_manager.add_timer 'stage_timer',
|
27
|
+
timer_manager.add_timer 'stage_timer', 200 do
|
28
28
|
@counter += 1
|
29
29
|
end
|
30
30
|
create_actor :volcano
|
@@ -32,15 +32,15 @@ describe "Using timers", acceptance: true do
|
|
32
32
|
see_actor_attrs :volcano, rocks_shot: 0
|
33
33
|
see_stage_ivars counter: 0
|
34
34
|
|
35
|
-
update
|
35
|
+
update 10
|
36
36
|
see_actor_attrs :volcano, rocks_shot: 0
|
37
37
|
see_stage_ivars counter: 0
|
38
38
|
|
39
|
-
update
|
39
|
+
update 91
|
40
40
|
see_actor_attrs :volcano, rocks_shot: 1
|
41
41
|
see_stage_ivars counter: 0
|
42
42
|
|
43
|
-
update
|
43
|
+
update 201
|
44
44
|
see_actor_attrs :volcano, rocks_shot: 2
|
45
45
|
see_stage_ivars counter: 1
|
46
46
|
|
@@ -1,6 +1,45 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
describe :positioned do
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
subject { subcontext[:behavior_factory].add_behavior actor, :positioned, opts }
|
6
|
+
let(:director) { evented_stub(stub_everything('director')) }
|
7
|
+
let(:subcontext) do
|
8
|
+
it = nil
|
9
|
+
Conject.default_object_context.in_subcontext{|ctx|it = ctx};
|
10
|
+
_mocks = create_mocks *(Actor.object_definition.component_names + ActorView.object_definition.component_names - [:actor, :behavior, :this_object_context])
|
11
|
+
_mocks.each do |k,v|
|
12
|
+
it[k] = v
|
13
|
+
it[:director] = director
|
14
|
+
end
|
15
|
+
it
|
16
|
+
end
|
17
|
+
let!(:actor) { subcontext[:actor] }
|
18
|
+
let(:opts) { {} }
|
19
|
+
|
20
|
+
context "empty options" do
|
21
|
+
it 'defines x,y on actor' do
|
22
|
+
subject
|
23
|
+
actor.x.should == 0
|
24
|
+
actor.y.should == 0
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'rolls up x and y changes to position_changed on update' do
|
29
|
+
subject
|
30
|
+
actor.x = 99
|
31
|
+
|
32
|
+
expects_event(actor, :position_changed) do
|
33
|
+
director.fire :update, 50
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "options passed in" do
|
38
|
+
let(:opts) { { x: 5, y: 8} }
|
39
|
+
it 'defines x,y on actor' do
|
40
|
+
subject
|
41
|
+
actor.x.should == 5
|
42
|
+
actor.y.should == 8
|
43
|
+
end
|
44
|
+
end
|
6
45
|
end
|
data/spec/core/arbiter_spec.rb
CHANGED
@@ -241,7 +241,25 @@ describe 'Arbiter' do
|
|
241
241
|
end
|
242
242
|
|
243
243
|
describe '#collide_aabb_circle' do
|
244
|
-
it 'should collide overlapping box and circle'
|
244
|
+
it 'should collide overlapping box and circle' do
|
245
|
+
a = stub(:center_x => 0, :center_y => 0, :width => 30, :height => 20,
|
246
|
+
:shape_type => :aabb, :radius => 10,
|
247
|
+
:cw_world_points => [
|
248
|
+
[-15,10],[15,10],
|
249
|
+
[15,-10], [-15,10]
|
250
|
+
],
|
251
|
+
:cw_world_lines => [
|
252
|
+
[[-15,10],[15,10]],
|
253
|
+
[[15,10],[15,-10]],
|
254
|
+
[[15,-10],[-15,10]],
|
255
|
+
[[-15,10],[-15,10]]
|
256
|
+
],
|
257
|
+
:cw_world_edge_normals => [[1,0],[0,1]])
|
258
|
+
b = stub(:center_x => 5, :center_y => 5, :width => 10, :height => 2,
|
259
|
+
:shape_type => :circle, :radius => 10)
|
260
|
+
|
261
|
+
@arbiter.collide_aabb_circle?(a,b).should be_true
|
262
|
+
end
|
245
263
|
end
|
246
264
|
|
247
265
|
describe "#find_collisions" do
|
@@ -28,6 +28,16 @@ describe HookedGosuWindow do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
it 'truncates an update to 500 millis in case of computer sleep' do
|
32
|
+
subject.instance_variable_set('@last_millis', 0)
|
33
|
+
Gosu.stubs(:milliseconds).returns 501
|
34
|
+
|
35
|
+
expects_event subject, :update, [[500]] do
|
36
|
+
subject.update
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
31
41
|
it 'fires initial update with deltas' do
|
32
42
|
subject.instance_variable_set('@last_millis', 30)
|
33
43
|
Gosu.stubs(:milliseconds).returns 58
|
data/spec/core/stage_spec.rb
CHANGED
@@ -4,15 +4,35 @@ describe Stage do
|
|
4
4
|
inject_mocks :input_manager, :actor_factory, :resource_manager,
|
5
5
|
:sound_manager, :config_manager, :director, :this_object_context,
|
6
6
|
:timer_manager
|
7
|
-
|
7
|
+
|
8
|
+
let(:a) { stub('a', layer: 0, parallax: 0) }
|
9
|
+
let(:b) { stub('b', layer: 0, parallax: 0) }
|
10
|
+
|
11
|
+
let(:c) { stub('c', layer: 1, parallax: 0) }
|
12
|
+
let(:d) { stub('d', layer: 2, parallax: 0) }
|
13
|
+
let(:e) { stub('e', layer: 3, parallax: 0) }
|
14
|
+
let(:f) { stub('f', layer: 4, parallax: 0) }
|
15
|
+
|
16
|
+
let(:x) { stub('x', layer: 0, parallax: 1) }
|
17
|
+
let(:y) { stub('y', layer: 2, parallax: 1) }
|
18
|
+
|
19
|
+
let(:z) { stub('z', layer: 0, parallax: 3) }
|
20
|
+
let(:target) { stub }
|
21
|
+
let(:viewport) { stub }
|
8
22
|
|
9
23
|
before do
|
10
24
|
@config_manager.stubs(:[]).with(:screen_resolution).returns([800,600])
|
11
25
|
@actor_factory.stubs(:director=)
|
12
|
-
|
13
|
-
|
14
|
-
@this_object_context.expects(:[]=).with(:viewport, @viewport)
|
26
|
+
Viewport.stubs(:new).with(800, 600).returns(viewport)
|
27
|
+
@this_object_context.expects(:[]=).with(:viewport, viewport)
|
15
28
|
subject.configure(:backstage, {})
|
29
|
+
|
30
|
+
viewport.stubs(:x_offset).with(0).returns(:trans_x_zero)
|
31
|
+
viewport.stubs(:y_offset).with(0).returns(:trans_y_zero)
|
32
|
+
viewport.stubs(:x_offset).with(1).returns(:trans_x_one)
|
33
|
+
viewport.stubs(:y_offset).with(1).returns(:trans_y_one)
|
34
|
+
viewport.stubs(:x_offset).with(3).returns(:trans_x_three)
|
35
|
+
viewport.stubs(:y_offset).with(3).returns(:trans_y_three)
|
16
36
|
end
|
17
37
|
|
18
38
|
it 'should construct' do
|
@@ -23,51 +43,59 @@ describe Stage do
|
|
23
43
|
subject.backstage.should == :backstage
|
24
44
|
end
|
25
45
|
|
26
|
-
it '
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
it 'registers and draws drawables by parallax and layers' do
|
47
|
+
subject.register_drawable a
|
48
|
+
subject.register_drawable b
|
49
|
+
subject.register_drawable c
|
50
|
+
subject.register_drawable d
|
51
|
+
subject.register_drawable e
|
52
|
+
subject.register_drawable f
|
53
|
+
subject.register_drawable x
|
54
|
+
subject.register_drawable y
|
55
|
+
subject.register_drawable z
|
56
|
+
|
57
|
+
a.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 4)
|
58
|
+
b.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 4)
|
59
|
+
c.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 5)
|
60
|
+
d.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 6)
|
61
|
+
e.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 7)
|
62
|
+
f.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 8)
|
63
|
+
x.expects(:draw).with(target, :trans_x_one, :trans_y_one, 2)
|
64
|
+
y.expects(:draw).with(target, :trans_x_one, :trans_y_one, 3)
|
65
|
+
z.expects(:draw).with(target, :trans_x_three, :trans_y_three, 1)
|
66
|
+
|
67
|
+
subject.draw(target)
|
47
68
|
end
|
48
|
-
it 'should move drawables layers' do
|
49
69
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
z = FakeDrawable.new
|
59
|
-
subject.drawables = {
|
60
|
-
2 => {3=> [a,b,c]},
|
61
|
-
6 => {7=> [d,e,f]},
|
62
|
-
9 => {13=> [x,y,z]},
|
63
|
-
}
|
64
|
-
subject.move_layer(2, 3, 6, 7).should == [d,e,f]
|
65
|
-
subject.drawables[6][7].should_not be_nil
|
66
|
-
subject.drawables[6][7].should == [a,b,c]
|
67
|
-
subject.drawables[2][3].should be_nil
|
70
|
+
it 'should unregister drawables by parallax and layer' do
|
71
|
+
subject.register_drawable a
|
72
|
+
subject.register_drawable b
|
73
|
+
|
74
|
+
subject.unregister_drawable a
|
75
|
+
b.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 1)
|
76
|
+
|
77
|
+
subject.draw(target)
|
68
78
|
end
|
69
79
|
|
70
|
-
|
71
|
-
|
80
|
+
it 'should move drawables layers' do
|
81
|
+
subject.register_drawable a
|
82
|
+
subject.register_drawable b
|
83
|
+
subject.register_drawable x
|
84
|
+
subject.register_drawable y
|
85
|
+
|
86
|
+
a.expects(:parallax=).with(1)
|
87
|
+
b.expects(:parallax=).with(1)
|
88
|
+
a.expects(:layer=).with(4)
|
89
|
+
b.expects(:layer=).with(4)
|
90
|
+
|
91
|
+
subject.move_layer 0, 0, 1, 4
|
92
|
+
|
93
|
+
a.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 3)
|
94
|
+
b.expects(:draw).with(target, :trans_x_zero, :trans_y_zero, 3)
|
95
|
+
x.expects(:draw).with(target, :trans_x_one, :trans_y_one, 1)
|
96
|
+
y.expects(:draw).with(target, :trans_x_one, :trans_y_one, 2)
|
97
|
+
|
98
|
+
subject.draw(target)
|
72
99
|
end
|
100
|
+
|
73
101
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -8,14 +8,14 @@ Gamebox.configure do |config|
|
|
8
8
|
config.music_path = APP_ROOT + "data/music/"
|
9
9
|
config.sound_path = APP_ROOT + "data/sounds/"
|
10
10
|
config.gfx_path = APP_ROOT + "data/graphics/"
|
11
|
-
config.fonts_path = APP_ROOT + "data/fonts"
|
11
|
+
config.fonts_path = APP_ROOT + "data/fonts/"
|
12
12
|
|
13
13
|
config.gb_config_path = GAMEBOX_PATH + "config/"
|
14
14
|
config.gb_data_path = GAMEBOX_PATH + "data/"
|
15
15
|
config.gb_music_path = GAMEBOX_PATH + "data/music/"
|
16
16
|
config.gb_sound_path = GAMEBOX_PATH + "data/sounds/"
|
17
17
|
config.gb_gfx_path = GAMEBOX_PATH + "data/graphics/"
|
18
|
-
config.gb_fonts_path = GAMEBOX_PATH + "data/fonts"
|
18
|
+
config.gb_fonts_path = GAMEBOX_PATH + "data/fonts/"
|
19
19
|
|
20
20
|
# config.stages = [:demo]
|
21
21
|
# config.game_name = "Untitled Game"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gamebox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.0.
|
4
|
+
version: 0.4.0.rc5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-06-22 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: gosu
|
@@ -77,22 +77,6 @@ dependencies:
|
|
77
77
|
- - ! '>='
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '0'
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: activesupport
|
82
|
-
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
|
-
requirements:
|
85
|
-
- - '='
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: 3.0.0
|
88
|
-
type: :runtime
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
|
-
requirements:
|
93
|
-
- - '='
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 3.0.0
|
96
80
|
- !ruby/object:Gem::Dependency
|
97
81
|
name: i18n
|
98
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,13 +94,13 @@ dependencies:
|
|
110
94
|
- !ruby/object:Gem::Version
|
111
95
|
version: '0'
|
112
96
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
97
|
+
name: thor
|
114
98
|
requirement: !ruby/object:Gem::Requirement
|
115
99
|
none: false
|
116
100
|
requirements:
|
117
101
|
- - ! '>='
|
118
102
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
103
|
+
version: 0.15.2
|
120
104
|
type: :runtime
|
121
105
|
prerelease: false
|
122
106
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -124,7 +108,7 @@ dependencies:
|
|
124
108
|
requirements:
|
125
109
|
- - ! '>='
|
126
110
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
111
|
+
version: 0.15.2
|
128
112
|
- !ruby/object:Gem::Dependency
|
129
113
|
name: require_all
|
130
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -344,28 +328,6 @@ files:
|
|
344
328
|
- README.md
|
345
329
|
- Rakefile
|
346
330
|
- TODO.txt
|
347
|
-
- app_generators/gamebox_generator.rb
|
348
|
-
- app_generators/templates/.gitignore
|
349
|
-
- app_generators/templates/Gemfile
|
350
|
-
- app_generators/templates/NEXT_STEPS.txt
|
351
|
-
- app_generators/templates/README.rdoc
|
352
|
-
- app_generators/templates/Rakefile
|
353
|
-
- app_generators/templates/config/boot.rb
|
354
|
-
- app_generators/templates/config/environment.rb
|
355
|
-
- app_generators/templates/config/game.yml
|
356
|
-
- app_generators/templates/data/fonts/FONTS_GO_HERE
|
357
|
-
- app_generators/templates/data/graphics/GRAPHICS_GO_HERE
|
358
|
-
- app_generators/templates/data/music/MUSIC_GOES_HERE
|
359
|
-
- app_generators/templates/data/sounds/SOUND_FX_GO_HERE
|
360
|
-
- app_generators/templates/script/actor.erb
|
361
|
-
- app_generators/templates/script/actor_spec.erb
|
362
|
-
- app_generators/templates/script/actor_view.erb
|
363
|
-
- app_generators/templates/script/actor_view_spec.erb
|
364
|
-
- app_generators/templates/script/generate
|
365
|
-
- app_generators/templates/spec/helper.rb
|
366
|
-
- app_generators/templates/src/actors/player.rb
|
367
|
-
- app_generators/templates/src/app.rb
|
368
|
-
- app_generators/templates/src/demo_stage.rb
|
369
331
|
- bin/gamebox
|
370
332
|
- component_generators/actor_generator.rb
|
371
333
|
- docs/CODE_REVIEW
|
@@ -392,7 +354,7 @@ files:
|
|
392
354
|
- lib/gamebox/behaviors/collidable/polygon_collidable.rb
|
393
355
|
- lib/gamebox/behaviors/emitting.rb
|
394
356
|
- lib/gamebox/behaviors/graphical.rb
|
395
|
-
- lib/gamebox/behaviors/
|
357
|
+
- lib/gamebox/behaviors/input_mapper.rb
|
396
358
|
- lib/gamebox/behaviors/layered.rb
|
397
359
|
- lib/gamebox/behaviors/physical.rb
|
398
360
|
- lib/gamebox/behaviors/positioned.rb
|
@@ -473,7 +435,7 @@ files:
|
|
473
435
|
- spec/acceptance/built_in_collision_handling_spec.rb
|
474
436
|
- spec/acceptance/chipmunk_collision_handling_spec.rb
|
475
437
|
- spec/acceptance/fps_actor_spec.rb
|
476
|
-
- spec/acceptance/
|
438
|
+
- spec/acceptance/input_mapper_spec.rb
|
477
439
|
- spec/acceptance/pausing_spec.rb
|
478
440
|
- spec/acceptance/timer_usage_spec.rb
|
479
441
|
- spec/actors/emitter_spec.rb
|
@@ -513,6 +475,22 @@ files:
|
|
513
475
|
- spec/lib/class_finder_spec.rb
|
514
476
|
- spec/stagehands/spatial_tree_stagehand_spec.rb
|
515
477
|
- spec/views/graphical_actor_view_spec.rb
|
478
|
+
- templates/app/.gitignore
|
479
|
+
- templates/app/Gemfile.tt
|
480
|
+
- templates/app/NEXT_STEPS.txt
|
481
|
+
- templates/app/README.rdoc
|
482
|
+
- templates/app/Rakefile
|
483
|
+
- templates/app/config/boot.rb
|
484
|
+
- templates/app/config/environment.rb
|
485
|
+
- templates/app/config/game.yml
|
486
|
+
- templates/app/data/fonts/FONTS_GO_HERE
|
487
|
+
- templates/app/data/graphics/GRAPHICS_GO_HERE
|
488
|
+
- templates/app/data/music/MUSIC_GOES_HERE
|
489
|
+
- templates/app/data/sounds/SOUND_FX_GO_HERE
|
490
|
+
- templates/app/spec/helper.rb
|
491
|
+
- templates/app/src/actors/player.rb
|
492
|
+
- templates/app/src/app.rb
|
493
|
+
- templates/app/src/demo_stage.rb
|
516
494
|
homepage: http://shawn42.github.com/gamebox
|
517
495
|
licenses: []
|
518
496
|
post_install_message:
|
@@ -543,7 +521,7 @@ test_files:
|
|
543
521
|
- spec/acceptance/built_in_collision_handling_spec.rb
|
544
522
|
- spec/acceptance/chipmunk_collision_handling_spec.rb
|
545
523
|
- spec/acceptance/fps_actor_spec.rb
|
546
|
-
- spec/acceptance/
|
524
|
+
- spec/acceptance/input_mapper_spec.rb
|
547
525
|
- spec/acceptance/pausing_spec.rb
|
548
526
|
- spec/acceptance/timer_usage_spec.rb
|
549
527
|
- spec/actors/emitter_spec.rb
|
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'rbconfig'
|
2
|
-
|
3
|
-
class GameboxGenerator < RubiGen::Base
|
4
|
-
DEFAULT_SHEBANG = File.join(RbConfig::CONFIG['bindir'],
|
5
|
-
RbConfig::CONFIG['ruby_install_name'])
|
6
|
-
|
7
|
-
default_options :shebang => DEFAULT_SHEBANG
|
8
|
-
|
9
|
-
attr_reader :app_name, :module_name
|
10
|
-
|
11
|
-
def initialize(runtime_args, runtime_options = {})
|
12
|
-
super
|
13
|
-
usage if args.empty?
|
14
|
-
@destination_root = args.shift
|
15
|
-
@app_name = File.basename(File.expand_path(@destination_root))
|
16
|
-
@module_name = app_name.camelize
|
17
|
-
extract_options
|
18
|
-
end
|
19
|
-
|
20
|
-
def manifest
|
21
|
-
# Use /usr/bin/env if no special shebang was specified
|
22
|
-
script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
|
23
|
-
windows = (RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/)
|
24
|
-
|
25
|
-
record do |m|
|
26
|
-
# Root directory and all subdirectories.
|
27
|
-
m.directory ''
|
28
|
-
BASEDIRS.each { |path| m.directory path }
|
29
|
-
|
30
|
-
# Root
|
31
|
-
m.template_copy_each %w( Rakefile
|
32
|
-
README.rdoc
|
33
|
-
config/environment.rb
|
34
|
-
)
|
35
|
-
|
36
|
-
m.file_copy_each %w(
|
37
|
-
Gemfile
|
38
|
-
config/boot.rb
|
39
|
-
config/game.yml
|
40
|
-
|
41
|
-
data/fonts/FONTS_GO_HERE
|
42
|
-
data/graphics/GRAPHICS_GO_HERE
|
43
|
-
data/music/MUSIC_GOES_HERE
|
44
|
-
data/sounds/SOUND_FX_GO_HERE
|
45
|
-
|
46
|
-
spec/helper.rb
|
47
|
-
|
48
|
-
src/app.rb
|
49
|
-
src/demo_stage.rb
|
50
|
-
src/actors/player.rb
|
51
|
-
)
|
52
|
-
|
53
|
-
m.readme 'NEXT_STEPS.txt'
|
54
|
-
|
55
|
-
# Scripts
|
56
|
-
# %w( generate ).each do |file|
|
57
|
-
# m.template "script/#{file}", "script/#{file}", script_options
|
58
|
-
# # m.template "script/win_script.cmd", "script/#{file}.cmd",
|
59
|
-
# # :assigns => { :filename => file } if windows
|
60
|
-
# end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
protected
|
66
|
-
def banner
|
67
|
-
<<-EOS
|
68
|
-
Create a stub for a gamebox game.
|
69
|
-
|
70
|
-
Usage: gamebox /path/to/your/app [options]"
|
71
|
-
EOS
|
72
|
-
end
|
73
|
-
|
74
|
-
def add_options!(opts)
|
75
|
-
opts.separator ''
|
76
|
-
opts.separator "Gamebox options:"
|
77
|
-
opts.on("-v", "--version", "Show the #{File.basename($0)} version number.")
|
78
|
-
end
|
79
|
-
|
80
|
-
def extract_options
|
81
|
-
end
|
82
|
-
|
83
|
-
# Installation skeleton. Intermediate directories are automatically
|
84
|
-
# created so don't sweat their absence here.
|
85
|
-
BASEDIRS = %w(
|
86
|
-
src/actors
|
87
|
-
spec
|
88
|
-
data/fonts
|
89
|
-
data/graphics
|
90
|
-
data/music
|
91
|
-
data/sounds
|
92
|
-
config
|
93
|
-
)
|
94
|
-
end
|
95
|
-
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require '<%= Inflector.underscore @actor_name %>'
|
3
|
-
|
4
|
-
describe 'a new <%= @actor_name %>' do
|
5
|
-
before do
|
6
|
-
# opts = {:stage=>"stage", :input=>"input", :resources=>"resource"}
|
7
|
-
# @test_me = <%= @actor_name %>.new opts
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'should do something'
|
11
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
APP_ROOT = File.join(File.dirname(__FILE__), '..')
|
3
|
-
|
4
|
-
require 'active_support'
|
5
|
-
require 'rubigen'
|
6
|
-
require APP_ROOT + '/config/environment'
|
7
|
-
|
8
|
-
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
9
|
-
|
10
|
-
require 'rubigen/scripts/generate'
|
11
|
-
RubiGen::Base.use_component_sources!
|
12
|
-
RubiGen::Scripts::Generate.new.run(ARGV, source: GAMEBOX_PATH + '/component_generators/templates' )
|