chingu 0.8.0.5 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/benchmarks/array_vs_hash.rb +20 -0
- data/benchmarks/game_object_list_benchmark.rb +92 -0
- data/benchmarks/game_objects_benchmark.rb +48 -12
- data/benchmarks/lookup_benchmark.rb +9 -0
- data/benchmarks/trait_benchmark.rb +62 -0
- data/benchmarks/window_benchmark.rb +37 -0
- data/chingu.gemspec +10 -2
- data/examples/example17_gosu_tutorial.rb +3 -2
- data/examples/example21_sidescroller_with_edit.rb +6 -4
- data/examples/example23_chipmunk.rb +1 -0
- data/lib/chingu.rb +1 -1
- data/lib/chingu/animation.rb +2 -1
- data/lib/chingu/basic_game_object.rb +25 -9
- data/lib/chingu/game_object_list.rb +42 -26
- data/lib/chingu/game_object_map.rb +31 -8
- data/lib/chingu/helpers/game_object.rb +14 -0
- data/lib/chingu/traits/retrofy.rb +18 -10
- data/lib/chingu/traits/simple_sprite.rb +252 -0
- data/lib/chingu/traits/sprite.rb +22 -11
- data/spec/chingu/basic_game_object_spec.rb +27 -11
- data/spec/chingu/console_spec.rb +5 -1
- data/spec/chingu/game_object_list_spec.rb +19 -1
- data/spec/chingu/game_object_map_spec.rb +96 -0
- data/spec/chingu/game_object_spec.rb +2 -0
- metadata +11 -4
data/lib/chingu/traits/sprite.rb
CHANGED
@@ -28,7 +28,6 @@ module Chingu
|
|
28
28
|
# :x, :y, :angle, :factor_x, :factor_y, :center_x, :center_y, :zorder, :mode, :visible
|
29
29
|
#
|
30
30
|
module Sprite
|
31
|
-
include Chingu::Helpers::OptionsSetter
|
32
31
|
include Chingu::Helpers::RotationCenter # Adds easy and verbose modification of @center_x and @center_y
|
33
32
|
|
34
33
|
module ClassMethods
|
@@ -37,21 +36,31 @@ module Chingu
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
attr_accessor :x, :y, :angle, :factor_x, :factor_y, :center_x, :center_y, :zorder, :mode, :
|
39
|
+
attr_accessor :x, :y, :angle, :factor_x, :factor_y, :center_x, :center_y, :zorder, :mode, :color
|
41
40
|
attr_reader :factor, :center, :height, :width, :image
|
41
|
+
attr_accessor :visible # kill this? force use of setter
|
42
42
|
|
43
43
|
def setup_trait(object_options = {})
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
@visible = true unless options[:visible] == false
|
45
|
+
self.image = options[:image] if options[:image]
|
46
|
+
self.color = options[:color] || ::Gosu::Color::WHITE.dup
|
47
|
+
self.alpha = options[:alpha] if options[:alpha]
|
48
|
+
self.mode = options[:mode] || :default
|
49
|
+
self.x = options[:x] || 0
|
50
|
+
self.y = options[:y] || 0
|
51
|
+
self.zorder = options[:zorder] || 100
|
52
|
+
self.angle = options[:angle] || 0
|
50
53
|
|
51
|
-
|
52
|
-
self.
|
54
|
+
self.factor = options[:factor] || options[:scale] || $window.factor || 1.0
|
55
|
+
self.factor_x = options[:factor_x].to_f if options[:factor_x]
|
56
|
+
self.factor_y = options[:factor_y].to_f if options[:factor_y]
|
57
|
+
self.rotation_center = options[:rotation_center] || :center_center
|
53
58
|
|
54
|
-
|
59
|
+
if self.image
|
60
|
+
self.width = options[:width] if options[:width]
|
61
|
+
self.height = options[:height] if options[:height]
|
62
|
+
self.size = options[:size] if options[:size]
|
63
|
+
end
|
55
64
|
|
56
65
|
super
|
57
66
|
end
|
@@ -196,6 +205,7 @@ module Chingu
|
|
196
205
|
# Disable automatic calling of draw and draw_trait each game loop
|
197
206
|
#
|
198
207
|
def hide!
|
208
|
+
@parent.game_objects.hide_game_object(self) if @parent && @visible == true
|
199
209
|
@visible = false
|
200
210
|
end
|
201
211
|
|
@@ -203,6 +213,7 @@ module Chingu
|
|
203
213
|
# Enable automatic calling of draw and draw_trait each game loop
|
204
214
|
#
|
205
215
|
def show!
|
216
|
+
@parent.game_objects.show_game_object(self) if @parent && @visible == false
|
206
217
|
@visible = true
|
207
218
|
end
|
208
219
|
|
@@ -3,6 +3,9 @@ require 'spec_helper'
|
|
3
3
|
class MyBasicGameObject < Chingu::BasicGameObject
|
4
4
|
end
|
5
5
|
|
6
|
+
class MyBasicGameObject2 < Chingu::BasicGameObject
|
7
|
+
end
|
8
|
+
|
6
9
|
class MyBasicGameObjectWithSetup < Chingu::BasicGameObject
|
7
10
|
def setup
|
8
11
|
@paused = true
|
@@ -28,10 +31,11 @@ module Chingu
|
|
28
31
|
it { should respond_to(:draw_trait) }
|
29
32
|
it { should respond_to(:filename) }
|
30
33
|
|
31
|
-
context "A class inherited from BasicGameObject" do
|
34
|
+
context "A class inherited from BasicGameObject using classmethod create" do
|
35
|
+
|
32
36
|
it "should be automatically stored in $window.game_objects" do
|
37
|
+
MyBasicGameObject.instances = []
|
33
38
|
3.times { go = MyBasicGameObject.create }
|
34
|
-
$window.update
|
35
39
|
$window.game_objects.size.should == 3
|
36
40
|
end
|
37
41
|
|
@@ -41,34 +45,47 @@ module Chingu
|
|
41
45
|
end
|
42
46
|
|
43
47
|
it "should keep track of its instances in class#all" do
|
48
|
+
MyBasicGameObject.instances = []
|
44
49
|
3.times { MyBasicGameObject.create }
|
45
50
|
#
|
46
51
|
# Can/should we remove the dependency on #update here before the created objects gets saved?
|
47
52
|
# We mostly protect against adding to the object array while iterating over it
|
48
53
|
#
|
49
|
-
$window.update
|
50
54
|
MyBasicGameObject.all.size.should == 3
|
51
55
|
MyBasicGameObject.size.should == 3
|
52
56
|
end
|
53
57
|
|
54
58
|
it "should be removed from game_objects list when destroy() is called" do
|
59
|
+
MyBasicGameObject.instances = []
|
55
60
|
go = MyBasicGameObject.create
|
56
|
-
$window.update
|
57
61
|
$window.game_objects.size.should == 1
|
58
62
|
go.destroy
|
59
|
-
$window.update
|
60
63
|
$window.game_objects.size.should == 0
|
61
64
|
end
|
62
65
|
|
63
|
-
it "should have all
|
66
|
+
it "should have all internal list cleared with classmethod destroy_all()" do
|
67
|
+
MyBasicGameObject.instances = []
|
64
68
|
3.times { MyBasicGameObject.create }
|
65
|
-
$window.update
|
66
69
|
MyBasicGameObject.destroy_all
|
67
|
-
|
68
|
-
$window.game_objects.size.should == 0
|
70
|
+
MyBasicGameObject.size.should == 0
|
69
71
|
end
|
70
72
|
|
73
|
+
it "should have all instances removed from parent-list with classmethod destroy_all()" do
|
74
|
+
MyBasicGameObject.instances = []
|
75
|
+
3.times { MyBasicGameObject.create }
|
76
|
+
MyBasicGameObject.destroy_all
|
77
|
+
$window.game_objects.size.should == 0
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "A class inherited from BasicGameObject" do
|
82
|
+
it "should return empty array on classmethod all() if no objects have been created" do
|
83
|
+
# Only place MyBasicGameObject2 is used
|
84
|
+
MyBasicGameObject2.all.should == []
|
85
|
+
end
|
86
|
+
|
71
87
|
it "should take hash-argument, parse it and save in options" do
|
88
|
+
MyBasicGameObject.instances = []
|
72
89
|
game_object = MyBasicGameObject.new(:paused => false, :foo => :bar)
|
73
90
|
game_object.paused?.should == false
|
74
91
|
game_object.options.should == {:paused => false, :foo => :bar}
|
@@ -96,8 +113,7 @@ module Chingu
|
|
96
113
|
|
97
114
|
end
|
98
115
|
|
99
|
-
context "when created with defaults in Chingu::Window" do
|
100
|
-
|
116
|
+
context "when created with defaults in Chingu::Window" do
|
101
117
|
it "should belong to main window it not created inside a game state" do
|
102
118
|
subject.parent.should == @game
|
103
119
|
end
|
data/spec/chingu/console_spec.rb
CHANGED
@@ -4,7 +4,7 @@ module Chingu
|
|
4
4
|
|
5
5
|
describe GameObjectList do
|
6
6
|
before :each do
|
7
|
-
@game = Chingu::Window.new
|
7
|
+
@game = Chingu::Window.new
|
8
8
|
end
|
9
9
|
|
10
10
|
after :each do
|
@@ -45,6 +45,24 @@ module Chingu
|
|
45
45
|
@game.game_objects.update
|
46
46
|
end
|
47
47
|
|
48
|
+
it "should keep track of unpaused game objects" do
|
49
|
+
go = GameObject.create
|
50
|
+
go.should_receive(:update)
|
51
|
+
@game.game_objects.update
|
52
|
+
go.pause
|
53
|
+
go.should_not_receive(:update)
|
54
|
+
@game.game_objects.update
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should keep track of visible game objects" do
|
58
|
+
go = GameObject.create
|
59
|
+
go.should_receive(:draw)
|
60
|
+
@game.game_objects.draw
|
61
|
+
go.hide!
|
62
|
+
go.should_not_receive(:draw)
|
63
|
+
@game.game_objects.draw
|
64
|
+
end
|
65
|
+
|
48
66
|
it "should call draw() on all visible game objects" do
|
49
67
|
GameObject.create.should_receive(:draw)
|
50
68
|
GameObject.create(:visible => false).should_not_receive(:draw)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
include Chingu
|
3
|
+
|
4
|
+
|
5
|
+
# Creates 20x20 pixel sized objects
|
6
|
+
class MyGameObject < Chingu::GameObject
|
7
|
+
trait :bounding_box
|
8
|
+
def setup
|
9
|
+
@image = Gosu::Image["rect_20x20.png"]
|
10
|
+
self.rotation_center = :top_left
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Creates 40x40 pixel sized objects
|
15
|
+
class MyBigGameObject < Chingu::GameObject
|
16
|
+
trait :bounding_box
|
17
|
+
def setup
|
18
|
+
@image = Gosu::Image["rect_20x20.png"]
|
19
|
+
self.rotation_center = :top_left
|
20
|
+
self.size = [40,40]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module Chingu
|
25
|
+
|
26
|
+
describe "GameObjectMap with grid [20,20]" do
|
27
|
+
before :each do
|
28
|
+
@game = Chingu::Window.new
|
29
|
+
|
30
|
+
# Gosu uses the paths based on where rspec is, not where this file is, so we need to do it manually!
|
31
|
+
Gosu::Image::autoload_dirs.unshift File.join(File.dirname(File.expand_path(__FILE__)), 'images')
|
32
|
+
|
33
|
+
MyGameObject.destroy_all
|
34
|
+
MyBigGameObject.destroy_all
|
35
|
+
@game_object = MyGameObject.create
|
36
|
+
@big_game_object = MyBigGameObject.create
|
37
|
+
end
|
38
|
+
|
39
|
+
after :each do
|
40
|
+
@game.close
|
41
|
+
end
|
42
|
+
|
43
|
+
context "setup of test should consist of" do
|
44
|
+
it "should contain 1 MyGameObject" do
|
45
|
+
MyGameObject.size.should == 1
|
46
|
+
end
|
47
|
+
it "should contain 1 MyBigGameObject" do
|
48
|
+
MyBigGameObject.size.should == 1
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
context "containing a game object size 20x20 postion 0,0" do
|
54
|
+
before :each do
|
55
|
+
@game_object_map = GameObjectMap.new(:game_objects => MyGameObject.all, :grid => [20,20])
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should be found at 0,0" do
|
59
|
+
@game_object_map.at(0,0).should == @game_object
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be found at 10,10" do
|
63
|
+
@game_object_map.at(10,10).should == @game_object
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be found at 20,20" do
|
67
|
+
@game_object_map.at(20,20).should == nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should Not be found at 21,21" do
|
71
|
+
@game_object_map.at(21,21).should == nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context "containing a game object size 40x40 postion 0,0" do
|
76
|
+
before :each do
|
77
|
+
@game_object_map = GameObjectMap.new(:game_objects => MyBigGameObject.all, :grid => [20,20])
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should be found at 0,0" do
|
81
|
+
@game_object_map.at(0,0).should == @big_game_object
|
82
|
+
end
|
83
|
+
it "should be found at 20,20" do
|
84
|
+
@game_object_map.at(20,20).should == @big_game_object
|
85
|
+
end
|
86
|
+
it "should be found at 39,39" do
|
87
|
+
@game_object_map.at(39,39).should == @big_game_object
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should Not be found at 40,40" do
|
91
|
+
@game_object_map.at(40,40).should == nil
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -171,6 +171,7 @@ module Chingu
|
|
171
171
|
|
172
172
|
context "class methods" do
|
173
173
|
it "should go through all instances of class on #each" do
|
174
|
+
GameObject.destroy_all
|
174
175
|
go1 = GameObject.create
|
175
176
|
go2 = GameObject.create
|
176
177
|
|
@@ -183,6 +184,7 @@ module Chingu
|
|
183
184
|
end
|
184
185
|
|
185
186
|
it "should go through all instances of class on #each_with_index" do
|
187
|
+
GameObject.destroy_all
|
186
188
|
go1 = GameObject.create
|
187
189
|
go2 = GameObject.create
|
188
190
|
|
metadata
CHANGED
@@ -5,9 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 8
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.8.0.5
|
8
|
+
- 1
|
9
|
+
version: 0.8.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- ippa
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-08 00:00:00 +01:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -116,15 +115,20 @@ files:
|
|
116
115
|
- README.rdoc
|
117
116
|
- Rakefile
|
118
117
|
- benchmarks/README.txt
|
118
|
+
- benchmarks/array_vs_hash.rb
|
119
119
|
- benchmarks/arrays_bench.rb
|
120
120
|
- benchmarks/benchmark.rb
|
121
121
|
- benchmarks/benchmark3.rb
|
122
122
|
- benchmarks/benchmark4.rb
|
123
123
|
- benchmarks/benchmark5.rb
|
124
124
|
- benchmarks/benchmark6.rb
|
125
|
+
- benchmarks/game_object_list_benchmark.rb
|
125
126
|
- benchmarks/game_objects_benchmark.rb
|
127
|
+
- benchmarks/lookup_benchmark.rb
|
126
128
|
- benchmarks/meta_benchmark.rb
|
127
129
|
- benchmarks/meta_benchmark2.rb
|
130
|
+
- benchmarks/trait_benchmark.rb
|
131
|
+
- benchmarks/window_benchmark.rb
|
128
132
|
- chingu.gemspec
|
129
133
|
- examples/example10_traits_retrofy.rb
|
130
134
|
- examples/example11_animation.rb
|
@@ -248,6 +252,7 @@ files:
|
|
248
252
|
- lib/chingu/traits/collision_detection.rb
|
249
253
|
- lib/chingu/traits/effect.rb
|
250
254
|
- lib/chingu/traits/retrofy.rb
|
255
|
+
- lib/chingu/traits/simple_sprite.rb
|
251
256
|
- lib/chingu/traits/sprite.rb
|
252
257
|
- lib/chingu/traits/timer.rb
|
253
258
|
- lib/chingu/traits/velocity.rb
|
@@ -260,6 +265,7 @@ files:
|
|
260
265
|
- spec/chingu/console_spec.rb
|
261
266
|
- spec/chingu/fpscounter_spec.rb
|
262
267
|
- spec/chingu/game_object_list_spec.rb
|
268
|
+
- spec/chingu/game_object_map_spec.rb
|
263
269
|
- spec/chingu/game_object_spec.rb
|
264
270
|
- spec/chingu/game_state_manager_spec.rb
|
265
271
|
- spec/chingu/helpers/input_client_spec.rb
|
@@ -343,6 +349,7 @@ test_files:
|
|
343
349
|
- spec/chingu/console_spec.rb
|
344
350
|
- spec/chingu/fpscounter_spec.rb
|
345
351
|
- spec/chingu/game_object_list_spec.rb
|
352
|
+
- spec/chingu/game_object_map_spec.rb
|
346
353
|
- spec/chingu/game_object_spec.rb
|
347
354
|
- spec/chingu/game_state_manager_spec.rb
|
348
355
|
- spec/chingu/helpers/input_client_spec.rb
|