chingu 0.5.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +21 -0
- data/LICENSE +504 -0
- data/Manifest.txt +72 -0
- data/README.rdoc +588 -0
- data/Rakefile +19 -0
- data/benchmarks/README.txt +1 -0
- data/benchmarks/benchmark.rb +6 -0
- data/benchmarks/benchmark3.rb +23 -0
- data/benchmarks/benchmark4.rb +71 -0
- data/benchmarks/benchmark5.rb +91 -0
- data/benchmarks/benchmark6.rb +23 -0
- data/benchmarks/meta_benchmark.rb +67 -0
- data/benchmarks/meta_benchmark2.rb +39 -0
- data/chingu.gemspec +34 -0
- data/examples/example1.rb +37 -0
- data/examples/example10.rb +75 -0
- data/examples/example11.rb +51 -0
- data/examples/example12.rb +67 -0
- data/examples/example2.rb +115 -0
- data/examples/example3.rb +40 -0
- data/examples/example4.rb +175 -0
- data/examples/example5.rb +107 -0
- data/examples/example6.rb +57 -0
- data/examples/example7.rb +133 -0
- data/examples/example8.rb +109 -0
- data/examples/example9.rb +106 -0
- data/examples/media/Parallax-scroll-example-layer-0.png +0 -0
- data/examples/media/Parallax-scroll-example-layer-1.png +0 -0
- data/examples/media/Parallax-scroll-example-layer-2.png +0 -0
- data/examples/media/Parallax-scroll-example-layer-3.png +0 -0
- data/examples/media/background1.png +0 -0
- data/examples/media/fire_bullet.png +0 -0
- data/examples/media/fireball.png +0 -0
- data/examples/media/particle.png +0 -0
- data/examples/media/ruby.png +0 -0
- data/examples/media/spaceship.png +0 -0
- data/examples/media/stickfigure.bmp +0 -0
- data/examples/media/stickfigure.png +0 -0
- data/examples/media/video_games.png +0 -0
- data/lib/chingu.rb +32 -0
- data/lib/chingu/actor.rb +17 -0
- data/lib/chingu/animation.rb +142 -0
- data/lib/chingu/assets.rb +64 -0
- data/lib/chingu/basic_game_object.rb +132 -0
- data/lib/chingu/core_extensions.rb +53 -0
- data/lib/chingu/effects.rb +36 -0
- data/lib/chingu/fpscounter.rb +62 -0
- data/lib/chingu/game_object.rb +127 -0
- data/lib/chingu/game_object_list.rb +91 -0
- data/lib/chingu/game_state.rb +137 -0
- data/lib/chingu/game_state_manager.rb +284 -0
- data/lib/chingu/game_states/debug.rb +65 -0
- data/lib/chingu/game_states/fade_to.rb +91 -0
- data/lib/chingu/game_states/pause.rb +57 -0
- data/lib/chingu/gfx_helpers.rb +89 -0
- data/lib/chingu/helpers.rb +166 -0
- data/lib/chingu/inflector.rb +34 -0
- data/lib/chingu/input.rb +100 -0
- data/lib/chingu/named_resource.rb +254 -0
- data/lib/chingu/parallax.rb +83 -0
- data/lib/chingu/particle.rb +21 -0
- data/lib/chingu/rect.rb +612 -0
- data/lib/chingu/require_all.rb +133 -0
- data/lib/chingu/text.rb +56 -0
- data/lib/chingu/traits/collision_detection.rb +172 -0
- data/lib/chingu/traits/effect.rb +113 -0
- data/lib/chingu/traits/input.rb +38 -0
- data/lib/chingu/traits/retrofy.rb +53 -0
- data/lib/chingu/traits/rotation_center.rb +84 -0
- data/lib/chingu/traits/timer.rb +90 -0
- data/lib/chingu/traits/velocity.rb +67 -0
- data/lib/chingu/window.rb +170 -0
- metadata +162 -0
- metadata.gz.sig +1 -0
@@ -0,0 +1,284 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
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
|
+
|
23
|
+
module Chingu
|
24
|
+
#
|
25
|
+
# GameStateManger is responsible for keeping track of game states with a simple pop/push stack.
|
26
|
+
#
|
27
|
+
# More about the concept of states in games:
|
28
|
+
# http://gamedevgeek.com/tutorials/managing-game-states-in-c/
|
29
|
+
# http://www.gamedev.net/community/forums/topic.asp?topic_id=477320
|
30
|
+
#
|
31
|
+
# Chingu::Window automatically creates a @game_state_manager and makes it accessible in our game loop.
|
32
|
+
# By default the game loop calls update, draw, button_up(id) and button_down(id) on the active state.
|
33
|
+
#
|
34
|
+
# ==== Chingu Examples
|
35
|
+
#
|
36
|
+
# Enter a new game state, Level, don't call finalize() on the game state we're leaving.
|
37
|
+
# push_game_state(Level, :finalize => false)
|
38
|
+
#
|
39
|
+
# Return to the previous game state, don't call setup() on it when it becomes active.
|
40
|
+
# pop_game_state(:setup => false)
|
41
|
+
#
|
42
|
+
# If you want to use Chingus GameStateManager _without_ Chingu::Windoe, see example5.rb
|
43
|
+
#
|
44
|
+
class GameStateManager
|
45
|
+
attr_accessor :inside_state
|
46
|
+
|
47
|
+
def initialize
|
48
|
+
@inside_state = nil
|
49
|
+
@game_states = []
|
50
|
+
@transitional_game_state = nil
|
51
|
+
@transitional_game_state_options = {}
|
52
|
+
@previous_game_state = nil
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# Gets the currently active gamestate (top of stack)
|
57
|
+
#
|
58
|
+
def current_game_state
|
59
|
+
@game_states.last
|
60
|
+
end
|
61
|
+
alias :current current_game_state
|
62
|
+
|
63
|
+
#
|
64
|
+
# Returns all gamestates with currenlty active game state on top.
|
65
|
+
#
|
66
|
+
def game_states
|
67
|
+
@game_states.reverse
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# Sets a game state to be called between the old and the new game state
|
72
|
+
# whenever a game state is switched,pushed or popped.
|
73
|
+
#
|
74
|
+
# The transitional game state is responsible for switching to the "new game state".
|
75
|
+
# It should do so with ":transitional => false" not to create an infinite loop.
|
76
|
+
#
|
77
|
+
# The new game state is the first argument to the transitional game states initialize().
|
78
|
+
#
|
79
|
+
# Example:
|
80
|
+
# transitional_game_state(FadeIn)
|
81
|
+
# push_game_state(Level2)
|
82
|
+
#
|
83
|
+
# would in practice become:
|
84
|
+
#
|
85
|
+
# push_game_state(FadeIn.new(Level2))
|
86
|
+
#
|
87
|
+
# This would be the case for every game state change until the transitional game state is removed:
|
88
|
+
# transitional_game_state(nil) # or false
|
89
|
+
#
|
90
|
+
# Very useful for fading effect between scenes.
|
91
|
+
#
|
92
|
+
def transitional_game_state(game_state, options = {})
|
93
|
+
@transitional_game_state = game_state
|
94
|
+
@transitional_game_state_options = options
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# Switch to a given game state, _replacing_ the current active one.
|
99
|
+
# By default setup() is called on the game state we're switching _to_.
|
100
|
+
# .. and finalize() is called on the game state we're switching _from_.
|
101
|
+
#
|
102
|
+
def switch_game_state(state, options = {})
|
103
|
+
options = {:setup => true, :finalize => true, :transitional => true}.merge(options)
|
104
|
+
|
105
|
+
new_state = game_state_instance(state)
|
106
|
+
|
107
|
+
if new_state
|
108
|
+
# Make sure the game state knows about the manager
|
109
|
+
new_state.game_state_manager = self
|
110
|
+
|
111
|
+
|
112
|
+
# Give the soon-to-be-disabled state a chance to clean up by calling finalize() on it.
|
113
|
+
@previous_game_state = current_game_state
|
114
|
+
current_game_state.finalize if current_game_state.respond_to?(:finalize) && options[:finalize]
|
115
|
+
|
116
|
+
# Call setup
|
117
|
+
new_state.setup if new_state.respond_to?(:setup) && options[:setup]
|
118
|
+
|
119
|
+
if @transitional_game_state && options[:transitional]
|
120
|
+
# If we have a transitional, switch to that instead, with new_state as first argument
|
121
|
+
transitional_game_state = @transitional_game_state.new(new_state, @transitional_game_state_options)
|
122
|
+
self.switch_game_state(transitional_game_state, :transitional => false)
|
123
|
+
else
|
124
|
+
if current_game_state.nil?
|
125
|
+
@game_states << new_state
|
126
|
+
else
|
127
|
+
# Replace last (active) state with new one
|
128
|
+
@game_states[-1] = new_state
|
129
|
+
end
|
130
|
+
end
|
131
|
+
self.inside_state = current_game_state
|
132
|
+
end
|
133
|
+
end
|
134
|
+
alias :switch :switch_game_state
|
135
|
+
|
136
|
+
#
|
137
|
+
# Adds a state to the game state-stack and activates it.
|
138
|
+
# By default setup() is called on the new game state
|
139
|
+
# .. and finalize() is called on the game state we're leaving.
|
140
|
+
#
|
141
|
+
def push_game_state(state, options = {})
|
142
|
+
options = {:setup => true, :finalize => true, :transitional => true}.merge(options)
|
143
|
+
|
144
|
+
new_state = game_state_instance(state)
|
145
|
+
|
146
|
+
if new_state
|
147
|
+
# Call setup
|
148
|
+
new_state.setup if new_state.respond_to?(:setup) && options[:setup]
|
149
|
+
|
150
|
+
# Make sure the game state knows about the manager
|
151
|
+
new_state.game_state_manager = self
|
152
|
+
|
153
|
+
# Give the soon-to-be-disabled state a chance to clean up by calling finalize() on it.
|
154
|
+
@previous_game_state = current_game_state
|
155
|
+
current_game_state.finalize if current_game_state.respond_to?(:finalize) && options[:finalize]
|
156
|
+
|
157
|
+
if @transitional_game_state && options[:transitional]
|
158
|
+
# If we have a transitional, push that instead, with new_state as first argument
|
159
|
+
transitional_game_state = @transitional_game_state.new(new_state, @transitional_game_state_options)
|
160
|
+
self.push_game_state(transitional_game_state, :transitional => false)
|
161
|
+
else
|
162
|
+
# Push new state on top of stack and therefore making it active
|
163
|
+
@game_states.push(new_state)
|
164
|
+
end
|
165
|
+
self.inside_state = current_game_state
|
166
|
+
end
|
167
|
+
end
|
168
|
+
alias :push :push_game_state
|
169
|
+
|
170
|
+
#
|
171
|
+
# Pops a state off the game state-stack, activating the previous one.
|
172
|
+
# By default setup() is called on the game state that becomes active.
|
173
|
+
# .. and finalize() is called on the game state we're leaving.
|
174
|
+
#
|
175
|
+
def pop_game_state(options = {})
|
176
|
+
options = {:setup => true, :finalize => true, :transitional => true}.merge(options)
|
177
|
+
|
178
|
+
#
|
179
|
+
# Give the soon-to-be-disabled state a chance to clean up by calling finalize() on it.
|
180
|
+
#
|
181
|
+
@previous_game_state = current_game_state
|
182
|
+
current_game_state.finalize if current_game_state.respond_to?(:finalize) && options[:finalize]
|
183
|
+
|
184
|
+
#
|
185
|
+
# Activate the game state "bellow" current one with a simple Array.pop
|
186
|
+
#
|
187
|
+
@game_states.pop
|
188
|
+
|
189
|
+
# Call setup on the new current state
|
190
|
+
current_game_state.setup if current_game_state.respond_to?(:setup) && options[:setup]
|
191
|
+
|
192
|
+
if @transitional_game_state && options[:transitional]
|
193
|
+
# If we have a transitional, push that instead, with new_state as first argument
|
194
|
+
transitional_game_state = @transitional_game_state.new(current_game_state, @transitional_game_state_options)
|
195
|
+
self.switch_game_state(transitional_game_state, :transitional => false)
|
196
|
+
end
|
197
|
+
self.inside_state = current_game_state
|
198
|
+
end
|
199
|
+
alias :pop :pop_game_state
|
200
|
+
|
201
|
+
#
|
202
|
+
# Returns the previous game state. Shortcut: "previous"
|
203
|
+
#
|
204
|
+
def previous_game_state
|
205
|
+
@previous_game_state
|
206
|
+
end
|
207
|
+
alias :previous previous_game_state
|
208
|
+
|
209
|
+
#
|
210
|
+
# Remove all game states from stack. Shortcut: "clear"
|
211
|
+
#
|
212
|
+
def clear_game_states
|
213
|
+
@game_states.clear
|
214
|
+
self.inside_state = nil
|
215
|
+
end
|
216
|
+
alias :clear :clear_game_states
|
217
|
+
|
218
|
+
#
|
219
|
+
# Pops through all game states until matching a given game state
|
220
|
+
#
|
221
|
+
def pop_until_game_state(new_state)
|
222
|
+
while (state = @game_states.pop)
|
223
|
+
break if state == new_state
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
#
|
228
|
+
# This method should be called from button_down(id) inside your main loop.
|
229
|
+
# Enables the game state manager to call button_down(id) on active game state.
|
230
|
+
#
|
231
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
232
|
+
#
|
233
|
+
def button_down(id)
|
234
|
+
current_game_state.button_down(id) if current_game_state
|
235
|
+
end
|
236
|
+
|
237
|
+
#
|
238
|
+
# This method should be called from button_up(id) inside your main loop.
|
239
|
+
# Enables the game state manager to call button_up(id) on active game state.
|
240
|
+
#
|
241
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
242
|
+
#
|
243
|
+
def button_up(id)
|
244
|
+
current_game_state.button_up(id) if current_game_state
|
245
|
+
end
|
246
|
+
|
247
|
+
#
|
248
|
+
# This method should be called from update() inside your main loop.
|
249
|
+
# Enables the game state manager to call update() on active game state.
|
250
|
+
#
|
251
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
252
|
+
#
|
253
|
+
def update
|
254
|
+
current_game_state.update if current_game_state
|
255
|
+
end
|
256
|
+
|
257
|
+
#
|
258
|
+
# This method should be called from draw() inside your main loop.
|
259
|
+
# Enables the game state manager to call update() on active game state.
|
260
|
+
#
|
261
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
262
|
+
#
|
263
|
+
def draw
|
264
|
+
current_game_state.draw if current_game_state
|
265
|
+
end
|
266
|
+
|
267
|
+
private
|
268
|
+
|
269
|
+
#
|
270
|
+
# Returns a GameState-instance from either a GameState class or GameState-object
|
271
|
+
#
|
272
|
+
def game_state_instance(state)
|
273
|
+
new_state = state
|
274
|
+
#
|
275
|
+
# If state is a GameState-instance, just queue it.
|
276
|
+
# If state is a GameState-class, instance it.
|
277
|
+
#
|
278
|
+
new_state = state.new if state.is_a? Class
|
279
|
+
|
280
|
+
return new_state # if new_state.kind_of? Chingu::GameState # useless check.
|
281
|
+
end
|
282
|
+
|
283
|
+
end
|
284
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
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
|
+
|
23
|
+
#
|
24
|
+
# Debug game state (F1 is default key to start/exit debug win, 'p' to pause game)
|
25
|
+
#
|
26
|
+
module Chingu
|
27
|
+
module GameStates
|
28
|
+
class Debug < Chingu::GameState
|
29
|
+
def initialize(options)
|
30
|
+
super
|
31
|
+
@white = Color.new(255,255,255,255)
|
32
|
+
@fade_color = Gosu::Color.new(100,255,255,255)
|
33
|
+
|
34
|
+
@font = Gosu::Font.new($window, default_font_name, 15)
|
35
|
+
@paused = true
|
36
|
+
|
37
|
+
self.input = {:p => :pause, :f1 => :return_to_game, :esc => :return_to_game}
|
38
|
+
end
|
39
|
+
|
40
|
+
def return_to_game
|
41
|
+
game_state_manager.pop_game_state
|
42
|
+
end
|
43
|
+
|
44
|
+
def pause
|
45
|
+
@paused = @paused ? false : true
|
46
|
+
end
|
47
|
+
|
48
|
+
def update
|
49
|
+
game_state_manager.previous_game_state.update unless @paused
|
50
|
+
end
|
51
|
+
|
52
|
+
def draw
|
53
|
+
game_state_manager.previous_game_state.draw
|
54
|
+
|
55
|
+
$window.draw_quad( 0,0,@fade_color,
|
56
|
+
$window.width,0,@fade_color,
|
57
|
+
$window.width,$window.height,@fade_color,
|
58
|
+
0,$window.height,@fade_color,10)
|
59
|
+
|
60
|
+
text = "DEBUG CONSOLE"
|
61
|
+
@font.draw(text, $window.width - @font.text_width(text), @font.height, 999)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
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
|
+
|
23
|
+
#
|
24
|
+
# Premade game state for chingu - Fade between two game states
|
25
|
+
# Fade from the current game state to a new one whenever with:
|
26
|
+
#
|
27
|
+
# push_game_state(Chingu::GameStates::FadeTo.new(new_game_state, :speed => 3))
|
28
|
+
#
|
29
|
+
# .. Or make your whole game look better with 1 line:
|
30
|
+
#
|
31
|
+
# transitional_game_state(Chingu::GameStates::FadeTo, :speed => 10)
|
32
|
+
#
|
33
|
+
module Chingu
|
34
|
+
module GameStates
|
35
|
+
class FadeTo < Chingu::GameState
|
36
|
+
|
37
|
+
def initialize(new_game_state, options = {})
|
38
|
+
@options = {:speed => 3}.merge(options)
|
39
|
+
@new_game_state = new_game_state
|
40
|
+
@manager = options[:game_state_manager] || self
|
41
|
+
#@manager = game_state_manager
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup
|
45
|
+
@color = Gosu::Color.new(0,0,0,0)
|
46
|
+
if @manager.previous_game_state
|
47
|
+
@fading_in = false
|
48
|
+
@alpha = 0.0
|
49
|
+
else
|
50
|
+
@fading_in = true
|
51
|
+
@alpha = 255.0
|
52
|
+
end
|
53
|
+
# @new_game_state.update # Make sure states game logic is run Once (for a correct draw())
|
54
|
+
update # Since draw is called before update
|
55
|
+
end
|
56
|
+
|
57
|
+
def update
|
58
|
+
@alpha += (@fading_in ? -@options[:speed] : @options[:speed])
|
59
|
+
@alpha = 0 if @alpha < 0
|
60
|
+
@alpha = 255 if @alpha > 255
|
61
|
+
|
62
|
+
@fading_in = true if @alpha == 255
|
63
|
+
@color.alpha = @alpha.to_i
|
64
|
+
@drawn = false
|
65
|
+
end
|
66
|
+
|
67
|
+
def draw
|
68
|
+
# Stop endless loops
|
69
|
+
if @drawn == false
|
70
|
+
@drawn = true
|
71
|
+
|
72
|
+
if @fading_in
|
73
|
+
@new_game_state.draw
|
74
|
+
else
|
75
|
+
@manager.previous_game_state.draw
|
76
|
+
end
|
77
|
+
|
78
|
+
$window.draw_quad( 0,0,@color,
|
79
|
+
$window.width,0,@color,
|
80
|
+
$window.width,$window.height,@color,
|
81
|
+
0,$window.height,@color,999)
|
82
|
+
end
|
83
|
+
|
84
|
+
if @fading_in && @alpha == 0
|
85
|
+
@manager.switch_game_state(@new_game_state, :transitional => false)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
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
|
+
|
23
|
+
|
24
|
+
#
|
25
|
+
# Premade game state for chingu - A simple pause state.
|
26
|
+
# Pause whenever with:
|
27
|
+
# push_game_state(Chingu::GameStates::Pause)
|
28
|
+
#
|
29
|
+
# requires global $window
|
30
|
+
#
|
31
|
+
module Chingu
|
32
|
+
module GameStates
|
33
|
+
class Pause < Chingu::GameState
|
34
|
+
def initialize(options = {})
|
35
|
+
super
|
36
|
+
@white = Color.new(255,255,255,255)
|
37
|
+
@color = Gosu::Color.new(200,0,0,0)
|
38
|
+
@font = Gosu::Font.new($window, default_font_name, 35)
|
39
|
+
@text = "PAUSED - press key to continue"
|
40
|
+
end
|
41
|
+
|
42
|
+
def button_down(id)
|
43
|
+
game_state_manager.pop_game_state(:setup => false) # Return the previous game state, dont call setup()
|
44
|
+
end
|
45
|
+
|
46
|
+
def draw
|
47
|
+
game_state_manager.previous_game_state.draw # Draw prev game state onto screen (in this case our level)
|
48
|
+
$window.draw_quad( 0,0,@color,
|
49
|
+
$window.width,0,@color,
|
50
|
+
$window.width,$window.height,@color,
|
51
|
+
0,$window.height,@color,10)
|
52
|
+
|
53
|
+
@font.draw(@text, ($window.width/2 - @font.text_width(@text)/2), $window.height/2 - @font.height, 999)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|