ippa-chingu 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/chingu.gemspec +2 -2
- data/examples/example1.rb +3 -3
- data/examples/example2.rb +4 -2
- data/examples/example3.rb +2 -2
- data/examples/example4.rb +2 -2
- data/lib/chingu/game_state.rb +2 -2
- data/lib/chingu/game_state_manager.rb +65 -39
- data/lib/chingu.rb +1 -1
- metadata +2 -2
data/chingu.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{chingu}
|
5
|
-
s.version = "0.4.
|
5
|
+
s.version = "0.4.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["ippa"]
|
9
|
-
s.date = %q{2009-08-
|
9
|
+
s.date = %q{2009-08-20}
|
10
10
|
s.description = %q{Game framework built on top of the OpenGL accelerated game lib Gosu. It adds simple yet powerfull game states, prettier inputhandling, deploymentsafe asset-handling, a basic re-usable game object and automation of common task.}
|
11
11
|
s.email = ["ippa@rubylicio.us"]
|
12
12
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
|
data/examples/example1.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require
|
2
|
+
require File.join(File.dirname($0), "..", "lib", "chingu")
|
3
3
|
include Gosu
|
4
4
|
|
5
5
|
#
|
6
6
|
# A minimalistic Chingu example.
|
7
7
|
# Chingu::Window provides #update and #draw which calls corresponding methods for all objects based on Chingu::Actors
|
8
8
|
#
|
9
|
-
# Image["picture.png"] is a
|
9
|
+
# Image["picture.png"] is a deployment safe shortcut to Gosu's Image.new and supports multiple locations for "picture.png"
|
10
10
|
# By default current dir, media\ and gfx\ is searched. To add own directories:
|
11
11
|
#
|
12
12
|
# Image.autoload_dirs << File.join(self.root, "data", "my_image_dir")
|
@@ -16,7 +16,7 @@ class Game < Chingu::Window
|
|
16
16
|
super
|
17
17
|
@player = Player.new(:x => 200, :y => 200, :image => Image["spaceship.png"])
|
18
18
|
@player.input = { :holding_left => :move_left, :holding_right => :move_right,
|
19
|
-
:holding_up => :move_up, :holding_down => :move_down}
|
19
|
+
:holding_up => :move_up, :holding_down => :move_down, :escape => :exit}
|
20
20
|
end
|
21
21
|
|
22
22
|
def update
|
data/examples/example2.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require
|
2
|
+
require File.join(File.dirname($0), "..", "lib", "chingu")
|
3
3
|
include Gosu
|
4
4
|
|
5
5
|
#
|
@@ -19,7 +19,9 @@ class Game < Chingu::Window
|
|
19
19
|
:holding_right => :move_right,
|
20
20
|
:holding_up => :move_up,
|
21
21
|
:holding_down => :move_down,
|
22
|
-
:space => :fire
|
22
|
+
:space => :fire,
|
23
|
+
:escape => :exit
|
24
|
+
}
|
23
25
|
end
|
24
26
|
|
25
27
|
#
|
data/examples/example3.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require
|
2
|
+
require File.join(File.dirname($0), "..", "lib", "chingu")
|
3
3
|
include Gosu
|
4
4
|
|
5
5
|
#
|
@@ -9,7 +9,7 @@ include Gosu
|
|
9
9
|
class Game < Chingu::Window
|
10
10
|
def initialize
|
11
11
|
super
|
12
|
-
self.input = {:holding_left => :scroll_left, :holding_right => :scroll_right, :escape => :
|
12
|
+
self.input = {:holding_left => :scroll_left, :holding_right => :scroll_right, :escape => :exit}
|
13
13
|
|
14
14
|
@parallax = Chingu::Parallax.new(:x => 0, :y => 0, :center_x => 0, :center_y => 0)
|
15
15
|
|
data/examples/example4.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require
|
2
|
+
require File.join(File.dirname($0), "..", "lib", "chingu")
|
3
3
|
include Gosu
|
4
4
|
|
5
5
|
#
|
@@ -34,7 +34,7 @@ class Game < Chingu::Window
|
|
34
34
|
push_game_state(Intro)
|
35
35
|
|
36
36
|
# Yes you can do crazy things like this :)
|
37
|
-
self.input = { :left_mouse_button => lambda{Chingu::Text.new(:text => "Woff!")}, :esc => :
|
37
|
+
self.input = { :left_mouse_button => lambda{Chingu::Text.new(:text => "Woff!")}, :esc => :exit}
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
data/lib/chingu/game_state.rb
CHANGED
@@ -75,7 +75,7 @@ module Chingu
|
|
75
75
|
#
|
76
76
|
def button_down(id)
|
77
77
|
dispatch_button_down(id, self)
|
78
|
-
@input_clients.each { |object| dispatch_button_down(id, object) }
|
78
|
+
@input_clients.each { |object| dispatch_button_down(id, object) } if @input_clients
|
79
79
|
end
|
80
80
|
|
81
81
|
#
|
@@ -83,7 +83,7 @@ module Chingu
|
|
83
83
|
#
|
84
84
|
def button_up(id)
|
85
85
|
dispatch_button_up(id, self)
|
86
|
-
@input_clients.each { |object| dispatch_button_up(id, object) }
|
86
|
+
@input_clients.each { |object| dispatch_button_up(id, object) } if @input_clients
|
87
87
|
end
|
88
88
|
|
89
89
|
#
|
@@ -2,10 +2,22 @@ module Chingu
|
|
2
2
|
#
|
3
3
|
# GameStateManger is responsible for keeping track of game states with a simple pop/push stack.
|
4
4
|
#
|
5
|
-
#
|
5
|
+
# More about the concept of states in games:
|
6
|
+
# http://gamedevgeek.com/tutorials/managing-game-states-in-c/
|
7
|
+
# http://www.gamedev.net/community/forums/topic.asp?topic_id=477320
|
6
8
|
#
|
7
9
|
# Chingu::Window automatically creates a @game_state_manager and makes it accessible in our game loop.
|
8
|
-
# By default the game loop calls update()
|
10
|
+
# By default the game loop calls update(dt), draw, button_up(id) and button_down(id) on the active state.
|
11
|
+
#
|
12
|
+
# ==== Chingu Examples
|
13
|
+
#
|
14
|
+
# Enter a new game state, Level, don't call finalize() on the game state we're leaving.
|
15
|
+
# push_game_state(Level, :finalize => false)
|
16
|
+
#
|
17
|
+
# Return to the previous game state, don't call setup() on it when it becomes active.
|
18
|
+
# pop_game_state(:setup => false)
|
19
|
+
#
|
20
|
+
# If you want to use Chingus GameStateManager _without_ Chingu::Windoe, see example5.rb
|
9
21
|
#
|
10
22
|
class GameStateManager
|
11
23
|
attr_accessor :inside_state
|
@@ -14,7 +26,7 @@ module Chingu
|
|
14
26
|
@inside_state = nil
|
15
27
|
@game_states = []
|
16
28
|
end
|
17
|
-
|
29
|
+
|
18
30
|
#
|
19
31
|
# Gets the currently active gamestate (top of stack)
|
20
32
|
#
|
@@ -24,7 +36,7 @@ module Chingu
|
|
24
36
|
alias :current current_game_state
|
25
37
|
|
26
38
|
#
|
27
|
-
# Returns all gamestates with
|
39
|
+
# Returns all gamestates with currenlty active game state on top.
|
28
40
|
#
|
29
41
|
def game_states
|
30
42
|
@game_states.reverse
|
@@ -32,6 +44,8 @@ module Chingu
|
|
32
44
|
|
33
45
|
#
|
34
46
|
# Switch to a given game state, _replacing_ the current active one.
|
47
|
+
# By default setup() is called on the game state we're switching _to_.
|
48
|
+
# .. and finalize() is called on the game state we're switching _from_.
|
35
49
|
#
|
36
50
|
def switch_game_state(state, options = {})
|
37
51
|
options = {:setup => true, :finalize => true}.merge(options)
|
@@ -57,7 +71,9 @@ module Chingu
|
|
57
71
|
alias :switch :switch_game_state
|
58
72
|
|
59
73
|
#
|
60
|
-
# Adds a state to the game state-stack and activates it
|
74
|
+
# Adds a state to the game state-stack and activates it.
|
75
|
+
# By default setup() is called on the new game state
|
76
|
+
# .. and finalize() is called on the game state we're leaving.
|
61
77
|
#
|
62
78
|
def push_game_state(state, options = {})
|
63
79
|
options = {:setup => true, :finalize => true}.merge(options)
|
@@ -79,6 +95,8 @@ module Chingu
|
|
79
95
|
|
80
96
|
#
|
81
97
|
# Pops a state off the game state-stack, activating the previous one.
|
98
|
+
# By default setup() is called on the game state that becomes active.
|
99
|
+
# .. and finalize() is called on the game state we're leaving.
|
82
100
|
#
|
83
101
|
def pop_game_state(options = {})
|
84
102
|
options = {:setup => true, :finalize => true}.merge(options)
|
@@ -99,28 +117,7 @@ module Chingu
|
|
99
117
|
alias :pop :pop_game_state
|
100
118
|
|
101
119
|
#
|
102
|
-
# Returns
|
103
|
-
#
|
104
|
-
def game_state_instance(state)
|
105
|
-
new_state = nil
|
106
|
-
#
|
107
|
-
# If state is a GameState-instance, just queue it
|
108
|
-
#
|
109
|
-
if state.is_a? Chingu::GameState
|
110
|
-
new_state = state
|
111
|
-
#
|
112
|
-
# If state is a GameState-class, create it.
|
113
|
-
#
|
114
|
-
elsif state.superclass == Chingu::GameState
|
115
|
-
new_state = state.new({})
|
116
|
-
end
|
117
|
-
|
118
|
-
return new_state
|
119
|
-
end
|
120
|
-
|
121
|
-
|
122
|
-
#
|
123
|
-
# Returns the previous game state
|
120
|
+
# Returns the previous game state. Shortcut: "previous"
|
124
121
|
#
|
125
122
|
def previous_game_state
|
126
123
|
@game_states[@game_states.index(current_game_state)-1]
|
@@ -128,7 +125,7 @@ module Chingu
|
|
128
125
|
alias :previous previous_game_state
|
129
126
|
|
130
127
|
#
|
131
|
-
# Remove all game states from stack
|
128
|
+
# Remove all game states from stack. Shortcut: "clear"
|
132
129
|
#
|
133
130
|
def clear_game_states
|
134
131
|
@game_states.clear
|
@@ -143,39 +140,68 @@ module Chingu
|
|
143
140
|
break if state == new_state
|
144
141
|
end
|
145
142
|
end
|
146
|
-
|
147
|
-
#
|
148
|
-
# Bellow follows a set of auto-called Gosu::Window methods.
|
149
|
-
# We define them game_state_manager so Gosu::Window can call them here.
|
150
|
-
# Then the game_state_manager is responsible to resend them to the active state.
|
151
|
-
# Or in the future many states.
|
143
|
+
|
152
144
|
#
|
153
|
-
|
145
|
+
# This method should be called from button_down(id) inside your main loop.
|
146
|
+
# Enables the game state manager to call button_down(id) on active game state.
|
154
147
|
#
|
155
|
-
#
|
148
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
156
149
|
#
|
157
150
|
def button_down(id)
|
158
151
|
current_game_state.button_down(id) if current_game_state
|
159
152
|
end
|
160
153
|
|
161
154
|
#
|
162
|
-
#
|
155
|
+
# This method should be called from button_up(id) inside your main loop.
|
156
|
+
# Enables the game state manager to call button_up(id) on active game state.
|
157
|
+
#
|
158
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
163
159
|
#
|
164
160
|
def button_up(id)
|
165
161
|
current_game_state.button_up(id) if current_game_state
|
166
162
|
end
|
167
163
|
|
168
164
|
#
|
169
|
-
#
|
165
|
+
# This method should be called from update() inside your main loop.
|
166
|
+
# Enables the game state manager to call update() on active game state.
|
167
|
+
#
|
168
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
170
169
|
#
|
171
170
|
def update(time = nil)
|
172
171
|
current_game_state.update(time) if current_game_state
|
173
172
|
end
|
173
|
+
|
174
|
+
#
|
175
|
+
# This method should be called from draw() inside your main loop.
|
176
|
+
# Enables the game state manager to call update() on active game state.
|
174
177
|
#
|
175
|
-
#
|
178
|
+
# If you're using Chingu::Window instead of Gosu::Window this will automaticly be called.
|
176
179
|
#
|
177
180
|
def draw
|
178
181
|
current_game_state.draw if current_game_state
|
179
182
|
end
|
183
|
+
|
184
|
+
private
|
185
|
+
|
186
|
+
#
|
187
|
+
# Returns a GameState-instance from either a GameState class or GameState-object
|
188
|
+
#
|
189
|
+
def game_state_instance(state)
|
190
|
+
new_state = nil
|
191
|
+
#
|
192
|
+
# If state is a GameState-instance, just queue it
|
193
|
+
#
|
194
|
+
if state.is_a? Chingu::GameState
|
195
|
+
new_state = state
|
196
|
+
#
|
197
|
+
# If state is a GameState-class, create it.
|
198
|
+
#
|
199
|
+
elsif state.superclass == Chingu::GameState
|
200
|
+
new_state = state.new({})
|
201
|
+
end
|
202
|
+
|
203
|
+
return new_state
|
204
|
+
end
|
205
|
+
|
180
206
|
end
|
181
207
|
end
|
data/lib/chingu.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ippa-chingu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ippa
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-20 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|