chingu 0.7.6.7 → 0.7.6.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -456,33 +456,39 @@ The biggest and most usable is GameStates::Edit which enables fast 'n easy level
456
456
  Start example19 and press 'E' to get a full example.
457
457
 
458
458
  Edit commands / shortcuts:
459
+ F1: Help screen
459
460
  1-5: create object 1..5 shown in toolbar at mousecursor
460
- DEL: delete selected objects
461
- BACKSPACE: reset selected objects to default values
462
- CTRL+A: select all objects (not code-created ones though)
461
+ CTRL+A: select all objects (not in-code-created ones though)
463
462
  CTRL+S: Save
464
463
  E: Save and Quit
464
+ Q: Quit (without saving)
465
465
  ESC: Deselect all objects
466
- Right Mouse Button Click: Copy object that was clicked on for fast duplication
466
+ Right Mouse Button Click: Copy object bellow cursor for fast duplication
467
467
  Arrow-keys (with selected objects): Move objects 1 pixel at the time
468
468
  Arrow-keys (with no selected objects): Scroll within a viewport
469
- Page up/down: Modify the zorder of selected game objects
470
-
471
- # The bellow keys works on all selected game objects
472
- r: scale up
473
- f: scale down
474
- t: tilt left
475
- g: tilt right
476
- y: inc zorder
477
- h: dec zorder
478
- u: less transparency
479
- j: more transparencty
480
469
 
470
+
471
+ Bellow keys operates on all currently selected game objects
472
+ -----------------------------------------------------------------------------------
473
+ DEL: delete selected objects
474
+ BACKSPACE: reset angle and scale to default values
475
+ Page Up: Increase zorder
476
+ Page Down: Decrease zorder
477
+
478
+ R: scale up
479
+ F: scale down
480
+ T: tilt left
481
+ G: tilt right
482
+ Y: inc zorder
483
+ H: dec zorder
484
+ U: less transparency
485
+ J: more transparency
486
+
481
487
  Mouse Wheel (with no selected objects): Scroll viewport up/down
482
488
  Mouse Wheel: Scale up/down
483
489
  SHIFT + Mouse Wheel: Tilt left/right
484
490
  CTRL + Mouse Wheel: Zorder up/down
485
- ALT + Mouse Wheel: Transperency less/more
491
+ ALT + Mouse Wheel: Transparency less/more
486
492
 
487
493
  Move mouse cursor close to the window border to scroll a viewport if your game state has one.
488
494
 
data/chingu.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{chingu}
8
- s.version = "0.7.6.7"
8
+ s.version = "0.7.6.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ippa"]
12
- s.date = %q{2010-08-11}
12
+ s.date = %q{2010-08-15}
13
13
  s.description = %q{OpenGL accelerated 2D game framework for Ruby. Builds on Gosu (Ruby/C++) which provides all the core functionality. Chingu adds simple yet powerful game states, prettier input handling, deployment safe asset-handling, a basic re-usable game object and stackable game logic.}
14
14
  s.email = %q{ippa@rubylicio.us}
15
15
  s.extra_rdoc_files = [
@@ -119,6 +119,7 @@ Gem::Specification.new do |s|
119
119
  "lib/chingu/game_states/edit.rb",
120
120
  "lib/chingu/game_states/fade_to.rb",
121
121
  "lib/chingu/game_states/pause.rb",
122
+ "lib/chingu/game_states/popup.rb",
122
123
  "lib/chingu/gosu_ext/image.rb",
123
124
  "lib/chingu/helpers/class_inheritable_accessor.rb",
124
125
  "lib/chingu/helpers/game_object.rb",
data/lib/chingu.rb CHANGED
@@ -33,7 +33,7 @@ require_all "#{CHINGU_ROOT}/chingu/traits"
33
33
  require_all "#{CHINGU_ROOT}/chingu"
34
34
 
35
35
  module Chingu
36
- VERSION = "0.7.6.7"
36
+ VERSION = "0.7.6.8"
37
37
 
38
38
  DEBUG_COLOR = Gosu::Color.new(0xFFFF0000)
39
39
  DEBUG_ZORDER = 9999
@@ -34,7 +34,7 @@ module Chingu
34
34
  # ** This class is under heavy development, API will most likely change! **
35
35
  #
36
36
  class GameObjectMap
37
- attr_reader :map
37
+ attr_reader :map, :game_object_positions
38
38
 
39
39
  def initialize(options = {})
40
40
  @game_objects = options[:game_objects]
@@ -49,15 +49,26 @@ module Chingu
49
49
  #
50
50
  def create_map
51
51
  @map = []
52
+ @game_object_positions = {}
53
+
52
54
  @game_objects.each do |game_object|
53
55
  puts "#{game_object.class} @ #{game_object.x} / #{game_object.y}" if @debug
54
-
56
+
55
57
  start_x = (game_object.bb.left / @grid[0]).to_i
56
- stop_x = (game_object.bb.right / @grid[0]).to_i
57
-
58
+ stop_x = ( (game_object.bb.right-1) / @grid[0] ).to_i
59
+
60
+ #if game_object.zorder == 80
61
+ # puts "x: #{game_object.x}, y: #{game_object.y}"
62
+ # puts "width: #{game_object.width}, height: #{game_object.height}"
63
+ # puts "start_x: #{start_x}, stop_x: #{stop_x}"
64
+ #end
65
+
66
+
58
67
  (start_x .. stop_x).each do |x|
59
- start_y = (game_object.bb.top / @grid[1]).to_i
60
- stop_y = (game_object.bb.bottom / @grid[1]).to_i
68
+ start_y = (game_object.bb.top / @grid[1] ).to_i
69
+ stop_y = ( (game_object.bb.bottom-1) / @grid[1] ).to_i
70
+
71
+ @game_object_positions[game_object] = [(start_x .. stop_x), (start_y .. stop_y)]
61
72
 
62
73
  @map[x] ||= []
63
74
  (start_y .. stop_y).each do |y|
@@ -67,6 +78,28 @@ module Chingu
67
78
  end
68
79
  end
69
80
 
81
+ #
82
+ # Removes a specific game object from the map
83
+ #
84
+ def clear_game_object(game_object)
85
+ range_x, range_y = @game_object_positions[game_object]
86
+
87
+ range_x.each do |x|
88
+ range_y.each do |y|
89
+ @map[x][y] = nil
90
+ end
91
+ end
92
+ end
93
+
94
+ #
95
+ # Clear game object from the array-map on a certain X/Y
96
+ #
97
+ def clear_at(x, y)
98
+ lookup_x = (x / @grid[0]).to_i
99
+ lookup_y = (y / @grid[1]).to_i
100
+ @map[lookup_x][lookup_y] = nil
101
+ end
102
+
70
103
  #
71
104
  # Gets a game object from the array-map on a certain X/Y
72
105
  #
@@ -57,7 +57,7 @@ module Chingu
57
57
  include Chingu::Helpers::ClassInheritableAccessor # adds classmethod class_inheritable_accessor
58
58
 
59
59
  attr_reader :options
60
- attr_accessor :game_objects, :game_state_manager
60
+ attr_accessor :game_objects, :game_state_manager, :previous_game_state
61
61
 
62
62
  class_inheritable_accessor :trait_options
63
63
  @trait_options = Hash.new
@@ -107,9 +107,14 @@ module Chingu
107
107
  @options = options
108
108
  @game_objects = GameObjectList.new
109
109
  @input_clients = Array.new
110
-
111
- # Game state mamanger can be run alone
110
+
111
+ # Game state manager can be run alone
112
112
  if defined?($window) && $window.respond_to?(:game_state_manager)
113
+
114
+ # Since we place the init of previous_game_state here, game states can use it even
115
+ # in initialize() if they call super first.
116
+ @previous_game_state = $window.game_state_manager.current_game_state
117
+
113
118
  $window.game_state_manager.inside_state = self
114
119
  end
115
120
 
@@ -49,7 +49,7 @@ module Chingu
49
49
 
50
50
  def initialize(options = {})
51
51
  super
52
-
52
+
53
53
  options = {:draw_grid => true, :snap_to_grid => true, :resize_to_grid => true}.merge(options)
54
54
 
55
55
  @grid = options[:grid] || [8,8]
@@ -69,6 +69,7 @@ module Chingu
69
69
  @hud_color = Gosu::Color.new(200,70,70,70)
70
70
  @selected_game_object = nil
71
71
  self.input = {
72
+ :f1 => :display_help,
72
73
  :left_mouse_button => :left_mouse_button,
73
74
  :released_left_mouse_button => :released_left_mouse_button,
74
75
  :right_mouse_button => :right_mouse_button,
@@ -128,6 +129,7 @@ module Chingu
128
129
  }
129
130
 
130
131
  @hud_height = 140
132
+ @toolbar_icon_size = [32,32]
131
133
  x = 20
132
134
  y = 60
133
135
  @classes.each do |klass|
@@ -137,17 +139,18 @@ module Chingu
137
139
  # so they're not overwritten by the class initialize/setup or simular
138
140
  begin
139
141
  game_object = klass.create(:paused => true)
140
- game_object.x = x
142
+ game_object.x = x + 10
141
143
  game_object.y = y
142
144
  game_object.zorder = @zorder
143
145
  game_object.options[:toolbar] = true
146
+ game_object.rotation_center = :center_center
144
147
 
145
148
  # Scale down object to fit our toolbar
146
149
  if game_object.image
147
- Text.create("#{klass}\n#{game_object.width.to_i}x#{game_object.height.to_i}", :size => 13, :x=>x-16, :y=>y+18, :zorder => @zorder)
148
- game_object.size = [32,32]
150
+ Text.create("#{klass.to_s[0..9]}\n#{game_object.width.to_i}x#{game_object.height.to_i}", :size => 12, :x=>x-16, :y=>y+18, :zorder => @zorder, :max_width => 55, :rotation_center => :top_left, :align => :center, :factor => 1)
151
+ game_object.size = @toolbar_icon_size
149
152
  game_object.cache_bounding_box if game_object.respond_to?(:cache_bounding_box)
150
- x += 60
153
+ x += 50
151
154
  else
152
155
  puts "Skipping #{klass} - no image" if @debug
153
156
  game_object.destroy
@@ -158,10 +161,52 @@ module Chingu
158
161
  end
159
162
  end
160
163
 
164
+ def display_help
165
+ text = <<END_OF_STRING
166
+ F1: This help screen
167
+ ESC: Return to Edit
168
+
169
+ 1-5: create object 1..5 shown in toolbar at mousecursor
170
+ CTRL+A: select all objects (not in-code-created ones though)
171
+ CTRL+S: Save
172
+ E: Save and Quit
173
+ Q: Quit (without saving)
174
+ ESC: Deselect all objects
175
+ Right Mouse Button Click: Copy object bellow cursor for fast duplication
176
+ Arrow-keys (with selected objects): Move objects 1 pixel at the time
177
+ Arrow-keys (with no selected objects): Scroll within a viewport
178
+
179
+
180
+ Bellow keys operates on all currently selected game objects
181
+ -----------------------------------------------------------------------------------
182
+ DEL: delete selected objects
183
+ BACKSPACE: reset angle and scale to default values
184
+ Page Up: Increase zorder
185
+ Page Down: Decrease zorder
186
+
187
+ R: scale up
188
+ F: scale down
189
+ T: tilt left
190
+ G: tilt right
191
+ Y: inc zorder
192
+ H: dec zorder
193
+ U: less transparency
194
+ J: more transparencty
195
+
196
+ Mouse Wheel (with no selected objects): Scroll viewport up/down
197
+ Mouse Wheel: Scale up/down
198
+ SHIFT + Mouse Wheel: Tilt left/right
199
+ CTRL + Mouse Wheel: Zorder up/down
200
+ ALT + Mouse Wheel: Transparency less/more
201
+ END_OF_STRING
202
+
203
+ push_game_state( GameStates::Popup.new(:text => text) )
204
+ end
205
+
161
206
  def draw_grid
162
207
  return unless @grid
163
208
 
164
- start_x = start_y = 0,0
209
+ start_x, start_y = 0,0
165
210
  if defined?(previous_game_state.viewport)
166
211
  start_x = -previous_game_state.viewport.x % @grid.first
167
212
  start_y = -previous_game_state.viewport.y % @grid.last
@@ -190,7 +235,7 @@ module Chingu
190
235
  @game_area_backup = previous_game_state.viewport.game_area.dup
191
236
  previous_game_state.viewport.game_area.x -= @hud_height
192
237
  previous_game_state.viewport.game_area.y -= @hud_height
193
- end
238
+ end
194
239
  end
195
240
 
196
241
  #
@@ -243,7 +288,6 @@ module Chingu
243
288
  scroll_up if $window.mouse_y < @scroll_border_thickness
244
289
  scroll_down if $window.mouse_y > $window.height - @scroll_border_thickness
245
290
  end
246
-
247
291
  end
248
292
 
249
293
  #
@@ -256,7 +300,7 @@ module Chingu
256
300
  super
257
301
 
258
302
  draw_grid if @draw_grid
259
-
303
+
260
304
  #
261
305
  # Draw an edit HUD
262
306
  #
@@ -264,7 +308,7 @@ module Chingu
264
308
  $window.width,0,@hud_color,
265
309
  $window.width,@hud_height,@hud_color,
266
310
  0,@hud_height,@hud_color, @zorder-1)
267
-
311
+
268
312
  #
269
313
  # Draw red rectangles/circles around all selected game objects
270
314
  #
@@ -279,6 +323,7 @@ module Chingu
279
323
  else
280
324
  draw_cursor_at($window.mouse_x, $window.mouse_y)
281
325
  end
326
+
282
327
  end
283
328
 
284
329
  #
@@ -589,13 +634,17 @@ module Chingu
589
634
  def scroll_right(amount = 10)
590
635
  self.previous_game_state.viewport.x += amount if defined?(self.previous_game_state.viewport)
591
636
  end
637
+
592
638
  def mouse_x
593
639
  x = $window.mouse_x
594
640
  x += self.previous_game_state.viewport.x if defined?(self.previous_game_state.viewport)
641
+ return x
595
642
  end
643
+
596
644
  def mouse_y
597
645
  y = $window.mouse_y
598
646
  y += self.previous_game_state.viewport.y if defined?(self.previous_game_state.viewport)
647
+ return y
599
648
  end
600
649
 
601
650
  def inside_window?(x = $window.mouse_x, y = $window.mouse_y)
@@ -609,7 +658,7 @@ module Chingu
609
658
  game_object.options[:created_with_editor] = true
610
659
  game_object.x = self.mouse_x
611
660
  game_object.y = self.mouse_y
612
-
661
+
613
662
  unless template.options[:toolbar]
614
663
  game_object.angle = template.angle
615
664
  game_object.factor_x = template.factor_x
@@ -625,8 +674,8 @@ module Chingu
625
674
  game_object.factor_y = wanted_height.to_f / game_object.image.height.to_f
626
675
  end
627
676
 
628
- game_object.options[:mouse_x_offset] = game_object.x - self.mouse_x
629
- game_object.options[:mouse_y_offset] = game_object.y - self.mouse_y
677
+ game_object.options[:mouse_x_offset] = (game_object.x - self.mouse_x) rescue 0
678
+ game_object.options[:mouse_y_offset] = (game_object.y - self.mouse_y) rescue 0
630
679
 
631
680
  game_object.cache_bounding_box if game_object.respond_to?(:cache_bounding_box)
632
681
  return game_object
@@ -30,16 +30,17 @@ module Chingu
30
30
  # requires the global $window set to the instance of Gosu::Window (automaticly handled if you use Chingu::Window)
31
31
  #
32
32
  class Pause < Chingu::GameState
33
+
33
34
  def initialize(options = {})
34
35
  super
35
36
  @white = Color.new(255,255,255,255)
36
37
  @color = Gosu::Color.new(200,0,0,0)
37
38
  @font = Gosu::Font.new($window, default_font_name, 35)
38
- @text = "PAUSED - press key to continue"
39
+ @text = "PAUSED - press ESC to return to game."
39
40
  end
40
41
 
41
- def button_down(id)
42
- pop_game_state(:setup => false) # Return the previous game state, dont call setup()
42
+ def button_up(id)
43
+ pop_game_state(:setup => false) if id == Gosu::KbEscape # Return the previous game state, dont call setup()
43
44
  end
44
45
 
45
46
  def draw
@@ -47,9 +48,9 @@ module Chingu
47
48
  $window.draw_quad( 0,0,@color,
48
49
  $window.width,0,@color,
49
50
  $window.width,$window.height,@color,
50
- 0,$window.height,@color,10)
51
+ 0,$window.height,@color, Chingu::DEBUG_ZORDER)
51
52
 
52
- @font.draw(@text, ($window.width/2 - @font.text_width(@text)/2), $window.height/2 - @font.height, 999)
53
+ @font.draw(@text, ($window.width/2 - @font.text_width(@text)/2), $window.height/2 - @font.height, Chingu::DEBUG_ZORDER + 1)
53
54
  end
54
55
  end
55
56
  end
@@ -0,0 +1,56 @@
1
+ #--
2
+ #
3
+ # Chingu -- OpenGL accelerated 2D game framework for Ruby
4
+ # Copyright (C) 2009 ippa / ippa@rubylicio.us
5
+ #
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License as published by the Free Software Foundation; either
9
+ # version 2.1 of the License, or (at your option) any later version.
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with this library; if not, write to the Free Software
18
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ #
20
+ #++
21
+
22
+ module Chingu
23
+ module GameStates
24
+
25
+ #
26
+ # Premade game state for chingu - A simple way if pausing the game + displaying a text.
27
+ # Usage:
28
+ # push_game_state(Chingu::GameStates::Popup.new(:text => "bla bla bla"))
29
+ #
30
+ # TODO: Use Gosu's new flush() instead of mucking around with ZORDER + 1000...
31
+ #
32
+ class Popup < Chingu::GameState
33
+
34
+ def initialize(options = {})
35
+ super
36
+ @white = Color.new(255,255,255,255)
37
+ @color = Gosu::Color.new(200,0,0,0)
38
+ @string = options[:text] || "Press ESC to return."
39
+ @text = Text.new(@string, :x => 20, :y => 10, :align => :left, :zorder => Chingu::DEBUG_ZORDER + 1001, :factor => 1)
40
+ end
41
+
42
+ def button_up(id)
43
+ pop_game_state(:setup => false) if id == Gosu::KbEscape # Return the previous game state, dont call setup()
44
+ end
45
+
46
+ def draw
47
+ previous_game_state.draw # Draw prev game state
48
+ $window.draw_quad( 0,0,@color,
49
+ $window.width,0,@color,
50
+ $window.width,$window.height,@color,
51
+ 0,$window.height,@color, Chingu::DEBUG_ZORDER + 1000)
52
+ @text.draw
53
+ end
54
+ end
55
+ end
56
+ end
@@ -34,37 +34,30 @@ module Chingu
34
34
  end
35
35
 
36
36
  def push_game_state(state, options = {})
37
- #$window.game_state_manager.push_game_state(state, options)
38
37
  game_state_manager.push_game_state(state, options)
39
38
  end
40
39
 
41
40
  def pop_game_state(options = {})
42
- #$window.game_state_manager.pop_game_state(options)
43
41
  game_state_manager.pop_game_state(options)
44
42
  end
45
43
 
46
44
  def switch_game_state(state, options = {})
47
- #$window.game_state_manager.switch_game_state(state, options)
48
45
  game_state_manager.switch_game_state(state, options)
49
46
  end
50
47
 
51
48
  def transitional_game_state(state, options = {})
52
- ##$window.game_state_manager.transitional_game_state(state, options)
53
49
  game_state_manager.transitional_game_state(state, options)
54
50
  end
55
51
 
56
52
  def current_game_state
57
- ##$window.game_state_manager.current_game_state
58
53
  game_state_manager.current_game_state
59
54
  end
60
55
 
61
- def previous_game_state
62
- ##$window.game_state_manager.previous_game_state
63
- game_state_manager.previous_game_state
64
- end
56
+ #def previous_game_state
57
+ # game_state_manager.previous_game_state
58
+ #end
65
59
 
66
60
  def clear_game_states
67
- #$window.game_state_manager.clear_game_states
68
61
  game_state_manager.clear_game_states
69
62
  end
70
63
  end
@@ -86,7 +86,8 @@ module Chingu
86
86
  # * GameState-inherited class, create a new instance, cache it and push it on top of stack
87
87
  #
88
88
  def dispatch_action(action, object)
89
- # puts "Dispatch Action: #{action} - Objects class: #{object.class.to_s}"
89
+ #puts "Dispatch Action: #{action} - Objects class: #{object.class.to_s}"
90
+
90
91
  case action
91
92
  when Symbol, String
92
93
  object.send(action)
data/lib/chingu/rect.rb CHANGED
@@ -49,8 +49,6 @@
49
49
  # union, union!
50
50
  # union_all, union_all!
51
51
  #
52
- # class Surface
53
- # make_rect
54
52
  #
55
53
  #++
56
54
 
@@ -105,7 +103,6 @@ class Rect < Array
105
103
  # 3. Elsif it has a +rect+ attribute., perform (1) and (2) on that.
106
104
  # 4. Otherwise, raise TypeError.
107
105
  #
108
- # See also Surface#make_rect()
109
106
  def Rect.new_from_object(object)
110
107
  case(object)
111
108
  when Rect
@@ -620,12 +617,4 @@ class Rect < Array
620
617
  end # class Rect
621
618
 
622
619
 
623
- class Surface
624
- # Return a Rect with the same width and height as the Surface, positioned
625
- # at (0,0).
626
- def make_rect()
627
- return Rect.new(0,0,self.width,self.height)
628
- end
629
- end
630
-
631
- end # module Rubygame
620
+ end # module Chingu
data/lib/chingu/text.rb CHANGED
@@ -109,11 +109,11 @@ module Chingu
109
109
  end
110
110
 
111
111
  #
112
- #
112
+ # Draws @background if present + our text in @image
113
113
  #
114
114
  def draw
115
115
  @background.draw if @background # draw our background, if any
116
- super # super -> GameObject#draw which draws out text
116
+ super # super -> GameObject#draw which draws out text in form of @image
117
117
  end
118
118
 
119
119
  private
@@ -146,8 +146,11 @@ module Chingu
146
146
  end
147
147
  end
148
148
 
149
+ #
150
+ # Apply the X/Y viewport-translation, used by trait "viewport"
151
+ #
149
152
  def apply(&block)
150
- $window.translate(-@x, -@y, &block)
153
+ $window.translate(-@x.to_i, -@y.to_i, &block)
151
154
  end
152
155
 
153
156
  def to_s
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chingu
3
3
  version: !ruby/object:Gem::Version
4
- hash: 97
4
+ hash: 127
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
9
  - 6
10
- - 7
11
- version: 0.7.6.7
10
+ - 8
11
+ version: 0.7.6.8
12
12
  platform: ruby
13
13
  authors:
14
14
  - ippa
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-08-11 00:00:00 +02:00
19
+ date: 2010-08-15 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- hash: -389188292
46
+ hash: -957518095
47
47
  segments:
48
48
  - 2
49
49
  - 0
@@ -193,6 +193,7 @@ files:
193
193
  - lib/chingu/game_states/edit.rb
194
194
  - lib/chingu/game_states/fade_to.rb
195
195
  - lib/chingu/game_states/pause.rb
196
+ - lib/chingu/game_states/popup.rb
196
197
  - lib/chingu/gosu_ext/image.rb
197
198
  - lib/chingu/helpers/class_inheritable_accessor.rb
198
199
  - lib/chingu/helpers/game_object.rb