chingu 0.8rc1 → 0.8rc2

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.
@@ -123,8 +123,6 @@ module Chingu
123
123
  #
124
124
  def draw
125
125
  @layers.each do |layer|
126
- #layer.draw
127
-
128
126
  save_x, save_y = layer.x, layer.y
129
127
 
130
128
  # If layer lands inside our window and repeat_x is true (defaults to true), draw it until window ends
@@ -183,15 +181,19 @@ module Chingu
183
181
  :zorder => (@@zorder_counter+=1)
184
182
  }.merge(options)
185
183
 
186
-
187
184
  @repeat_x = options[:repeat_x]
188
185
  @repeat_y = options[:repeat_y]
189
-
186
+
190
187
  super(options)
191
188
 
192
189
  @damping = options[:damping] || 1
193
190
  end
194
191
 
192
+ def draw
193
+ super
194
+ #p "draw @ #{x} / #{y}: #{image} - #{zorder} - #{color}"
195
+ end
196
+
195
197
  #
196
198
  # Gets pixel from layers image
197
199
  # The pixel is from the window point of view, so coordinates are converted:
data/lib/chingu/text.rb CHANGED
@@ -65,18 +65,20 @@ module Chingu
65
65
  text = nil
66
66
  end
67
67
 
68
+ # We remove the :size param so it doesn't get to GameObject where it means something else
69
+ @size = options.delete(:size) || options.delete(:height) || @@size || 15
70
+
68
71
  super(options)
69
72
 
70
73
  @text = text || options[:text] || "-No text specified-"
71
74
  @font = options[:font] || @@font || Gosu::default_font_name()
72
- @size = options[:size] || options[:height] || @@size || 15
73
75
  @line_spacing = options[:line_spacing] || 1
74
76
  @align = options[:align] || :left
75
77
  @max_width = options[:max_width]
76
78
  @padding = options[:padding] || @@padding
77
79
  self.rotation_center = :top_left
78
80
 
79
- @gosu_font = Gosu::Font.new($window, @font, @size)
81
+ @gosu_font = Gosu::Font[@font, @size]
80
82
  create_image unless @image
81
83
 
82
84
  if options[:background]
@@ -28,8 +28,8 @@ 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
-
32
31
  include Chingu::Helpers::OptionsSetter
32
+ include Chingu::Helpers::RotationCenter # Adds easy and verbose modification of @center_x and @center_y
33
33
 
34
34
  module ClassMethods
35
35
  def initialize_trait(options = {})
@@ -37,19 +37,23 @@ module Chingu
37
37
  end
38
38
  end
39
39
 
40
- attr_accessor :x, :y, :angle, :factor_x, :factor_y, :center_x, :center_y, :zorder, :mode, :visible
41
-
42
- # default settings for all variables unless set in constructor
43
- DEFAULTS = {
44
- :x => 0, :y => 0, :angle => 0,
45
- :factor_x => 1.0, :factor_y => 1.0,
46
- :zorder => 100, :center_x => 0.5, :center_y => 0.5,
47
- :mode => :default,
48
- :color => nil
49
- }
50
-
51
- def setup_trait(object_options = {})
52
- set_options(trait_options[:sprite].merge(object_options), DEFAULTS)
40
+ attr_accessor :x, :y, :angle, :factor_x, :factor_y, :center_x, :center_y, :zorder, :mode, :visible, :color
41
+ attr_reader :factor, :center, :height, :width, :image
42
+
43
+ def setup_trait(object_options = {})
44
+ # default settings for all variables unless set in constructor
45
+ defaults = {
46
+ :x => 0, :y => 0, :angle => 0,
47
+ :factor => ($window.factor||1.0),
48
+ :zorder => 100, :center_x => 0.5, :center_y => 0.5,
49
+ :mode => :default, :color => nil
50
+ }
51
+
52
+ # if user specs :image take care of it first since width, height etc depends on it.
53
+ self.image = object_options.delete(:image) if object_options[:image]
54
+
55
+ set_options(trait_options[:sprite].merge(object_options), defaults)
56
+
53
57
  super
54
58
  end
55
59
 
@@ -139,14 +143,13 @@ module Chingu
139
143
  [self.width, self.height]
140
144
  end
141
145
 
142
-
143
146
  # Quick way of setting both factor_x and factor_y
144
147
  def factor=(factor)
145
- @factor_x = @factor_y = factor
148
+ @factor = @factor_x = @factor_y = factor
146
149
  end
147
150
  alias scale= factor=
148
- # alias scale factor
149
-
151
+ alias scale factor
152
+
150
153
  # Quick way of setting both center_x and center_y
151
154
  def center=(center)
152
155
  @center_x = @center_y = center
@@ -220,7 +223,7 @@ module Chingu
220
223
  # Works as #draw() but takes offsets for all draw_rot()-arguments. Used among others by the viewport-trait.
221
224
  #
222
225
  def draw_relative(x=0, y=0, zorder=0, angle=0, center_x=0, center_y=0, factor_x=0, factor_y=0)
223
- @image.draw_rot(@x+x, @y+y, @zorder+zorder, @angle+angle, @center_x+center_x, @center_y+center_y, @factor_x+factor_x, @factor_y+factor_y, @color, @mode) if @visible
226
+ @image.draw_rot(@x+x, @y+y, @zorder+zorder, @angle+angle, @center_x+center_x, @center_y+center_y, @factor_x+factor_x, @factor_y+factor_y, @color, @mode)
224
227
  end
225
228
 
226
229
  #
data/lib/chingu/window.rb CHANGED
@@ -42,6 +42,8 @@ module Chingu
42
42
  attr_accessor :factor, :cursor
43
43
 
44
44
  def initialize(width = 800, height = 600, fullscreen = false, update_interval = 16.666666)
45
+ raise "Cannot create a new #{self.class} before the old one has been closed" if $window
46
+
45
47
  fullscreen ||= ARGV.include?("--fullscreen")
46
48
  $window = super(width, height, fullscreen, update_interval)
47
49
 
@@ -51,6 +53,7 @@ module Chingu
51
53
  Gosu::Image.autoload_dirs += [".", File.join(@root, "images"), File.join(@root, "gfx"), File.join(@root, "media")]
52
54
  Gosu::Sample.autoload_dirs += [".", File.join(@root, "sounds"), File.join(@root, "sfx"), File.join(@root, "media")]
53
55
  Gosu::Song.autoload_dirs += [".", File.join(@root, "songs"), File.join(@root, "sounds"), File.join(@root, "sfx"), File.join(@root, "media")]
56
+ Gosu::Font.autoload_dirs += [".", File.join(@root, "fonts"), File.join(@root, "media")]
54
57
 
55
58
  @game_objects = GameObjectList.new
56
59
  @input_clients = Array.new
@@ -198,5 +201,19 @@ module Chingu
198
201
  @input_clients.each { |object| dispatch_button_down(id, object) unless object.paused? }
199
202
  @game_state_manager.button_down(id)
200
203
  end
204
+
205
+ #
206
+ # Close the window when it is no longer required. Ensure this is done before a new window is initialized.
207
+ #
208
+ def close
209
+ super
210
+
211
+ # Clear out all assets, tied to this $window, so that a new instance can create more.
212
+ [Gosu::Image, Gosu::Song, Gosu::Font, Gosu::Sample].each do |asset|
213
+ asset.clear
214
+ end
215
+
216
+ $window = nil
217
+ end
201
218
  end
202
219
  end
@@ -20,6 +20,10 @@ module Chingu
20
20
  it { should respond_to(:zorder) }
21
21
  it { should respond_to(:mode) }
22
22
  it { should respond_to(:color) }
23
+ it { should respond_to(:attributes) }
24
+ it { should respond_to(:draw) }
25
+ it { should respond_to(:draw_at) }
26
+ it { should respond_to(:draw_relative) }
23
27
 
24
28
  context "when created with defaults" do
25
29
  it "should have default values" do
@@ -54,10 +58,55 @@ module Chingu
54
58
  subject.alpha.should == 255
55
59
  end
56
60
  end
61
+
62
+ it "should have the same value for self.alpha as self.color.alpha" do
63
+ subject.alpha.should == subject.color.alpha
64
+ end
65
+
66
+ it "should have a corrent filename created from class name" do
67
+ subject.filename.should == "game_object"
68
+ end
57
69
 
58
70
  it "should raise an exception if the image fails to load" do
59
71
  lambda { described_class.new(:image => "monkey_with_a_nuclear_tail.png") }.should raise_error Exception
60
72
  end
73
+
74
+ context "position" do
75
+ it "inside_window?" do
76
+ subject.x = 1
77
+ subject.y = 1
78
+ subject.inside_window?.should == true
79
+ subject.outside_window?.should == false
80
+ end
81
+ it "outside_window?" do
82
+ subject.x = @game.width + 1
83
+ subject.y = @game.height + 1
84
+ subject.inside_window?.should == false
85
+ subject.outside_window?.should == true
86
+ end
87
+ end
88
+
89
+ context "setters" do
90
+ it "factor should set both factor_x and factor_y" do
91
+ subject.factor = 4
92
+ subject.factor_x.should == 4
93
+ subject.factor_y.should == 4
94
+ end
95
+
96
+ it "scale should work as alias for factor" do
97
+ subject.scale = 5
98
+ subject.factor.should == 5
99
+ end
100
+ end
101
+
102
+ context "visibility" do
103
+ it "should hide/show object on self.hide! and self.show!" do
104
+ subject.hide!
105
+ subject.visible?.should == false
106
+ subject.show!
107
+ subject.visible?.should == true
108
+ end
109
+ end
61
110
 
62
111
  context "when created with an image named in a string" do
63
112
  subject { described_class.new(:image => "rect_20x20.png") }
@@ -81,9 +130,28 @@ module Chingu
81
130
  subject.height.should == 40
82
131
  subject.factor_x.should == 0.5
83
132
  subject.factor_y.should == 2
133
+ end
134
+ end
135
+
136
+ context "when created with multiple arguments" do
137
+ subject { described_class.new(:image => "rect_20x20.png", :size => [10, 10]) }
138
+ it "should initialize values correclty" do
139
+ subject.width.should == 10
140
+ subject.height.should == 10
84
141
  end
85
-
86
142
  end
143
+
144
+ #context "when there's a global factor/scale" do
145
+ # $window = Chingu::Window.new
146
+ # $window.factor = 2
147
+ # subject { described_class.new(:image => "rect_20x20.png") }
148
+ # it "should use global factor/scale" do
149
+ # subject.factor_x.should == 2
150
+ # subject.factor_y.should == 2
151
+ # subject.width.should == 40
152
+ # subject.height.should == 40
153
+ # end
154
+ #end
87
155
 
88
156
  after(:all) do
89
157
  $window.close
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Chingu
4
+
5
+ describe Parallax do
6
+ before :all do
7
+ @game = Chingu::Window.new
8
+
9
+ # Gosu uses the paths based on where rspec is, not where this file is, so we need to do it manually!
10
+ Gosu::Image::autoload_dirs.unshift File.join(File.dirname(File.expand_path(__FILE__)), 'images')
11
+ end
12
+
13
+ context "layers" do
14
+ before :all do
15
+ @parallax = Parallax.new
16
+ @parallax << {:image => "rect_20x20.png", :repeat_x => true, :repeat_y => true}
17
+ @parallax.add_layer(:image => "rect_20x20.png", :repeat_x => true, :repeat_y => true)
18
+ @parallax << ParallaxLayer.new(:image => "rect_20x20.png", :repeat_x => true, :repeat_y => true)
19
+ end
20
+
21
+ it "should have 3 different ways of adding layers" do
22
+ @parallax.layers.count.should == 3
23
+ end
24
+
25
+ it "should have incrementing zorder" do
26
+ @parallax.layers[0].zorder == 0
27
+ @parallax.layers[1].zorder == 1
28
+ @parallax.layers[2].zorder == 2
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
metadata CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: true
5
5
  segments:
6
6
  - 0
7
- - 8rc1
8
- version: 0.8rc1
7
+ - 8rc2
8
+ version: 0.8rc2
9
9
  platform: ruby
10
10
  authors:
11
11
  - ippa
@@ -13,7 +13,7 @@ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
15
 
16
- date: 2010-11-14 00:00:00 +01:00
16
+ date: 2010-11-17 00:00:00 +01:00
17
17
  default_executable:
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
@@ -27,8 +27,8 @@ dependencies:
27
27
  segments:
28
28
  - 0
29
29
  - 7
30
- - 24
31
- version: 0.7.24
30
+ - 25
31
+ version: 0.7.25
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
34
  - !ruby/object:Gem::Dependency
@@ -41,9 +41,9 @@ dependencies:
41
41
  - !ruby/object:Gem::Version
42
42
  segments:
43
43
  - 2
44
+ - 1
44
45
  - 0
45
- - 0
46
- version: 2.0.0
46
+ version: 2.1.0
47
47
  type: :development
48
48
  version_requirements: *id002
49
49
  - !ruby/object:Gem::Dependency
@@ -108,7 +108,6 @@ extra_rdoc_files:
108
108
  - LICENSE
109
109
  - README.rdoc
110
110
  files:
111
- - .gitignore
112
111
  - .rspec
113
112
  - History.txt
114
113
  - LICENSE
@@ -142,9 +141,9 @@ files:
142
141
  - examples/example22_text.rb
143
142
  - examples/example23_chipmunk.rb
144
143
  - examples/example24_enter_name.rb
145
- - examples/example24_input_codes.rb
146
144
  - examples/example25.yml
147
145
  - examples/example25_fibers_state_machine.rb
146
+ - examples/example26_splash_screen.rb
148
147
  - examples/example2_gamestate_basics.rb
149
148
  - examples/example3_parallax.rb
150
149
  - examples/example4_gamestates.rb
@@ -199,10 +198,12 @@ files:
199
198
  - examples/media/tube.png
200
199
  - examples/media/video_games.png
201
200
  - examples/media/wood.png
201
+ - examples/tool1_input_codes.rb
202
202
  - lib/chingu.rb
203
203
  - lib/chingu/animation.rb
204
204
  - lib/chingu/assets.rb
205
205
  - lib/chingu/basic_game_object.rb
206
+ - lib/chingu/classic_game_object.rb
206
207
  - lib/chingu/core_ext/array.rb
207
208
  - lib/chingu/fpscounter.rb
208
209
  - lib/chingu/game_object.rb
@@ -256,6 +257,7 @@ files:
256
257
  - spec/chingu/images/rect_20x20.png
257
258
  - spec/chingu/inflector_spec.rb
258
259
  - spec/chingu/input_spec.rb
260
+ - spec/chingu/parallax_spec.rb
259
261
  - spec/chingu/text_spec.rb
260
262
  - spec/spec_helper.rb
261
263
  - specs.watchr
@@ -264,8 +266,8 @@ homepage: http://github.com/ippa/chingu
264
266
  licenses: []
265
267
 
266
268
  post_install_message:
267
- rdoc_options:
268
- - --charset=UTF-8
269
+ rdoc_options: []
270
+
269
271
  require_paths:
270
272
  - lib
271
273
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -294,15 +296,6 @@ signing_key:
294
296
  specification_version: 3
295
297
  summary: OpenGL accelerated 2D game framework for Ruby
296
298
  test_files:
297
- - spec/chingu/fpscounter_spec.rb
298
- - spec/chingu/game_object_spec.rb
299
- - spec/chingu/helpers/input_client_spec.rb
300
- - spec/chingu/helpers/input_dispatcher_spec.rb
301
- - spec/chingu/helpers/options_setter_spec.rb
302
- - spec/chingu/inflector_spec.rb
303
- - spec/chingu/input_spec.rb
304
- - spec/chingu/text_spec.rb
305
- - spec/spec_helper.rb
306
299
  - examples/example10_traits_retrofy.rb
307
300
  - examples/example11_animation.rb
308
301
  - examples/example12_trait_timer.rb
@@ -319,8 +312,8 @@ test_files:
319
312
  - examples/example22_text.rb
320
313
  - examples/example23_chipmunk.rb
321
314
  - examples/example24_enter_name.rb
322
- - examples/example24_input_codes.rb
323
315
  - examples/example25_fibers_state_machine.rb
316
+ - examples/example26_splash_screen.rb
324
317
  - examples/example2_gamestate_basics.rb
325
318
  - examples/example3_parallax.rb
326
319
  - examples/example4_gamestates.rb
@@ -331,3 +324,14 @@ test_files:
331
324
  - examples/example9_collision_detection.rb
332
325
  - examples/game1.rb
333
326
  - examples/game_of_life.rb
327
+ - examples/tool1_input_codes.rb
328
+ - spec/chingu/fpscounter_spec.rb
329
+ - spec/chingu/game_object_spec.rb
330
+ - spec/chingu/helpers/input_client_spec.rb
331
+ - spec/chingu/helpers/input_dispatcher_spec.rb
332
+ - spec/chingu/helpers/options_setter_spec.rb
333
+ - spec/chingu/inflector_spec.rb
334
+ - spec/chingu/input_spec.rb
335
+ - spec/chingu/parallax_spec.rb
336
+ - spec/chingu/text_spec.rb
337
+ - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- *.gem
2
- pkg
3
- .gem
4
- .git
5
- .idea
6
- coverage