chingu 0.6 → 0.6.1
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.
- data.tar.gz.sig +0 -0
- data/Manifest.txt +1 -0
- data/chingu.gemspec +3 -3
- data/examples/example3.rb +55 -20
- data/examples/media/wood.png +0 -0
- data/lib/chingu.rb +1 -1
- data/lib/chingu/game_object.rb +6 -3
- data/lib/chingu/parallax.rb +47 -11
- metadata +3 -2
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
|
Binary file
|
data/Manifest.txt
CHANGED
data/chingu.gemspec
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{chingu}
|
|
5
|
-
s.version = "0.6"
|
|
5
|
+
s.version = "0.6.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-11-
|
|
9
|
+
s.date = %q{2009-11-22}
|
|
10
10
|
s.description = %q{OpenGL accelerated 2D game framework for Ruby.
|
|
11
11
|
Builds on the awesome Gosu (Ruby/C++) which provides all the core functionality.
|
|
12
12
|
It adds simple yet powerful game states, prettier input handling, deployment safe asset-handling, a basic re-usable game object and automation of common task.}
|
|
13
13
|
s.email = ["ippa@rubylicio.us"]
|
|
14
14
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "benchmarks/README.txt"]
|
|
15
|
-
s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "benchmarks/README.txt", "benchmarks/benchmark.rb", "benchmarks/benchmark3.rb", "benchmarks/benchmark4.rb", "benchmarks/benchmark5.rb", "benchmarks/benchmark6.rb", "benchmarks/meta_benchmark.rb", "benchmarks/meta_benchmark2.rb", "chingu.gemspec", "examples/example1.rb", "examples/example10.rb", "examples/example11.rb", "examples/example12.rb", "examples/example13.rb", "examples/example14.rb", "examples/example2.rb", "examples/example3.rb", "examples/example4.rb", "examples/example5.rb", "examples/example6.rb", "examples/example7.rb", "examples/example8.rb", "examples/example9.rb", "examples/game1.rb", "examples/high_score_list.yml", "examples/media/Parallax-scroll-example-layer-0.png", "examples/media/Parallax-scroll-example-layer-1.png", "examples/media/Parallax-scroll-example-layer-2.png", "examples/media/Parallax-scroll-example-layer-3.png", "examples/media/background1.png", "examples/media/bullet.png", "examples/media/bullet_hit.wav", "examples/media/city1.csv", "examples/media/city1.png", "examples/media/city2.png", "examples/media/droid.bmp", "examples/media/enemy_bullet.png", "examples/media/explosion.wav", "examples/media/fire_bullet.png", "examples/media/fireball.png", "examples/media/laser.wav", "examples/media/particle.png", "examples/media/plane.csv", "examples/media/plane.png", "examples/media/ruby.png", "examples/media/saucer.csv", "examples/media/saucer.gal", "examples/media/saucer.png", "examples/media/spaceship.png", "examples/media/stickfigure.bmp", "examples/media/stickfigure.png", "examples/media/video_games.png", "lib/chingu.rb", "lib/chingu/animation.rb", "lib/chingu/assets.rb", "lib/chingu/basic_game_object.rb", "lib/chingu/core_extensions.rb", "lib/chingu/fpscounter.rb", "lib/chingu/game_object.rb", "lib/chingu/game_object_list.rb", "lib/chingu/game_state.rb", "lib/chingu/game_state_manager.rb", "lib/chingu/game_states/debug.rb", "lib/chingu/game_states/edit.rb", "lib/chingu/game_states/fade_to.rb", "lib/chingu/game_states/pause.rb", "lib/chingu/helpers/game_object.rb", "lib/chingu/helpers/game_state.rb", "lib/chingu/helpers/gfx.rb", "lib/chingu/helpers/input_client.rb", "lib/chingu/helpers/input_dispatcher.rb", "lib/chingu/helpers/rotation_center.rb", "lib/chingu/high_score_list.rb", "lib/chingu/inflector.rb", "lib/chingu/input.rb", "lib/chingu/named_resource.rb", "lib/chingu/parallax.rb", "lib/chingu/particle.rb", "lib/chingu/rect.rb", "lib/chingu/require_all.rb", "lib/chingu/text.rb", "lib/chingu/traits/bounding_box.rb", "lib/chingu/traits/collision_detection.rb", "lib/chingu/traits/effect.rb", "lib/chingu/traits/radius.rb", "lib/chingu/traits/retrofy.rb", "lib/chingu/traits/timer.rb", "lib/chingu/traits/velocity.rb", "lib/chingu/window.rb"]
|
|
15
|
+
s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "benchmarks/README.txt", "benchmarks/benchmark.rb", "benchmarks/benchmark3.rb", "benchmarks/benchmark4.rb", "benchmarks/benchmark5.rb", "benchmarks/benchmark6.rb", "benchmarks/meta_benchmark.rb", "benchmarks/meta_benchmark2.rb", "chingu.gemspec", "examples/example1.rb", "examples/example10.rb", "examples/example11.rb", "examples/example12.rb", "examples/example13.rb", "examples/example14.rb", "examples/example2.rb", "examples/example3.rb", "examples/example4.rb", "examples/example5.rb", "examples/example6.rb", "examples/example7.rb", "examples/example8.rb", "examples/example9.rb", "examples/game1.rb", "examples/high_score_list.yml", "examples/media/Parallax-scroll-example-layer-0.png", "examples/media/Parallax-scroll-example-layer-1.png", "examples/media/Parallax-scroll-example-layer-2.png", "examples/media/Parallax-scroll-example-layer-3.png", "examples/media/background1.png", "examples/media/bullet.png", "examples/media/bullet_hit.wav", "examples/media/city1.csv", "examples/media/city1.png", "examples/media/city2.png", "examples/media/droid.bmp", "examples/media/enemy_bullet.png", "examples/media/explosion.wav", "examples/media/fire_bullet.png", "examples/media/fireball.png", "examples/media/laser.wav", "examples/media/particle.png", "examples/media/plane.csv", "examples/media/plane.png", "examples/media/ruby.png", "examples/media/saucer.csv", "examples/media/saucer.gal", "examples/media/saucer.png", "examples/media/spaceship.png", "examples/media/stickfigure.bmp", "examples/media/stickfigure.png", "examples/media/video_games.png", "examples/media/wood.png", "lib/chingu.rb", "lib/chingu/animation.rb", "lib/chingu/assets.rb", "lib/chingu/basic_game_object.rb", "lib/chingu/core_extensions.rb", "lib/chingu/fpscounter.rb", "lib/chingu/game_object.rb", "lib/chingu/game_object_list.rb", "lib/chingu/game_state.rb", "lib/chingu/game_state_manager.rb", "lib/chingu/game_states/debug.rb", "lib/chingu/game_states/edit.rb", "lib/chingu/game_states/fade_to.rb", "lib/chingu/game_states/pause.rb", "lib/chingu/helpers/game_object.rb", "lib/chingu/helpers/game_state.rb", "lib/chingu/helpers/gfx.rb", "lib/chingu/helpers/input_client.rb", "lib/chingu/helpers/input_dispatcher.rb", "lib/chingu/helpers/rotation_center.rb", "lib/chingu/high_score_list.rb", "lib/chingu/inflector.rb", "lib/chingu/input.rb", "lib/chingu/named_resource.rb", "lib/chingu/parallax.rb", "lib/chingu/particle.rb", "lib/chingu/rect.rb", "lib/chingu/require_all.rb", "lib/chingu/text.rb", "lib/chingu/traits/bounding_box.rb", "lib/chingu/traits/collision_detection.rb", "lib/chingu/traits/effect.rb", "lib/chingu/traits/radius.rb", "lib/chingu/traits/retrofy.rb", "lib/chingu/traits/timer.rb", "lib/chingu/traits/velocity.rb", "lib/chingu/window.rb"]
|
|
16
16
|
s.homepage = %q{http://github.com/ippa/chingu/tree/master}
|
|
17
17
|
s.rdoc_options = ["--main", "README.rdoc"]
|
|
18
18
|
s.require_paths = ["lib"]
|
data/examples/example3.rb
CHANGED
|
@@ -8,29 +8,34 @@ include Gosu
|
|
|
8
8
|
#
|
|
9
9
|
class Game < Chingu::Window
|
|
10
10
|
def initialize
|
|
11
|
-
super(600,200)
|
|
12
|
-
self.
|
|
11
|
+
super(600,200)
|
|
12
|
+
self.caption = "Chingu::Parallax example. Scroll with left/right arrows. Space for new parallax example!"
|
|
13
|
+
switch_game_state(Wood)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Scroller < Chingu::GameState
|
|
18
|
+
def initialize(options)
|
|
19
|
+
super
|
|
20
|
+
@text_color = Color.new(0xFF000000)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def setup
|
|
24
|
+
self.input = { :holding_left => :camera_left,
|
|
13
25
|
:holding_right => :camera_right,
|
|
14
26
|
:holding_up => :camera_up,
|
|
15
27
|
:holding_down => :camera_down,
|
|
16
|
-
:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# Notice we add layers to the parallax scroller in 3 different ways.
|
|
28
|
-
# They all end up as ParallaxLayer-instances internally
|
|
29
|
-
#
|
|
30
|
-
@parallax.add_layer(:image => "Parallax-scroll-example-layer-0.png", :damping => 100, :center => 0)
|
|
31
|
-
@parallax.add_layer(:image => "Parallax-scroll-example-layer-1.png", :damping => 10, :center => 0)
|
|
32
|
-
@parallax << Chingu::ParallaxLayer.new(:image => "Parallax-scroll-example-layer-2.png", :damping => 5, :center => 0)
|
|
33
|
-
@parallax << {:image => "Parallax-scroll-example-layer-3.png", :damping => 1, :center => 0} # you can also add like this
|
|
28
|
+
:space => :next_game_state,
|
|
29
|
+
:escape => :exit
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def next_game_state
|
|
34
|
+
if current_game_state.class == Wood
|
|
35
|
+
switch_game_state(Jungle)
|
|
36
|
+
else
|
|
37
|
+
switch_game_state(Wood)
|
|
38
|
+
end
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
def camera_left
|
|
@@ -51,8 +56,38 @@ class Game < Chingu::Window
|
|
|
51
56
|
def camera_down
|
|
52
57
|
# This is essentially the same as @parallax.y -= 2
|
|
53
58
|
@parallax.camera_y += 2
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class Wood < Scroller
|
|
63
|
+
def initialize(options = {})
|
|
64
|
+
super
|
|
65
|
+
@parallax = Chingu::Parallax.create(:x => 0, :y => 0, :rotation_center => :top_left)
|
|
66
|
+
@parallax << { :image => "wood.png", :repeat_x => true, :repeat_y => true}
|
|
67
|
+
Chingu::Text.create("82x64 image with repeat_x and repeat_y set to TRUE", :x => 0, :y => 0, :size => 30, :color => @text_color)
|
|
54
68
|
end
|
|
69
|
+
end
|
|
55
70
|
|
|
71
|
+
class Jungle < Scroller
|
|
72
|
+
def initialize(options = {})
|
|
73
|
+
super
|
|
74
|
+
@parallax = Chingu::Parallax.create(:x => 0, :y => 0, :rotation_center => :top_left)
|
|
75
|
+
|
|
76
|
+
#
|
|
77
|
+
# If no :zorder is given to @parallax.add_layer it defaults to first added -> lowest zorder
|
|
78
|
+
# Everywhere the :image argument is used, theese 2 values are the Same:
|
|
79
|
+
# 1) Image["foo.png"] 2) "foo.png"
|
|
80
|
+
#
|
|
81
|
+
# Notice we add layers to the parallax scroller in 3 different ways.
|
|
82
|
+
# They all end up as ParallaxLayer-instances internally
|
|
83
|
+
#
|
|
84
|
+
@parallax.add_layer(:image => "Parallax-scroll-example-layer-0.png", :damping => 100)
|
|
85
|
+
@parallax.add_layer(:image => "Parallax-scroll-example-layer-1.png", :damping => 10)
|
|
86
|
+
@parallax << Chingu::ParallaxLayer.new(:image => "Parallax-scroll-example-layer-2.png", :damping => 5, :parallax => @parallax)
|
|
87
|
+
@parallax << {:image => "Parallax-scroll-example-layer-3.png", :damping => 1}
|
|
88
|
+
|
|
89
|
+
Chingu::Text.create("Multiple layers with repeat_x set to TRUE", :x => 0, :y => 0, :size => 30, :color => @text_color)
|
|
90
|
+
end
|
|
56
91
|
end
|
|
57
92
|
|
|
58
93
|
Game.new.show
|
|
Binary file
|
data/lib/chingu.rb
CHANGED
data/lib/chingu/game_object.rb
CHANGED
|
@@ -28,7 +28,7 @@ module Chingu
|
|
|
28
28
|
#
|
|
29
29
|
class GameObject < Chingu::BasicGameObject
|
|
30
30
|
attr_accessor :image, :x, :y, :angle, :center_x, :center_y, :factor_x, :factor_y, :color, :mode, :zorder
|
|
31
|
-
attr_reader :factor, :center
|
|
31
|
+
attr_reader :factor, :center#, :rotation_center
|
|
32
32
|
|
|
33
33
|
include Chingu::Helpers::InputClient # Adds input and input=
|
|
34
34
|
include Chingu::Helpers::RotationCenter # Adds easy and verbose modification of @center_x and @center_y
|
|
@@ -48,13 +48,16 @@ module Chingu
|
|
|
48
48
|
@y = options[:y] || 0
|
|
49
49
|
@angle = options[:angle] || 0
|
|
50
50
|
|
|
51
|
-
|
|
52
51
|
self.factor = options[:factor] || 1.0
|
|
53
52
|
@factor_x = options[:factor_x] if options[:factor_x]
|
|
54
53
|
@factor_y = options[:factor_y] if options[:factor_y]
|
|
55
54
|
|
|
56
|
-
self.center = options[:center] || 0.5
|
|
55
|
+
self.center = options[:center] || 0.5
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@rotation_center = options[:rotation_center]
|
|
57
59
|
self.rotation_center(options[:rotation_center]) if options[:rotation_center]
|
|
60
|
+
|
|
58
61
|
@center_x = options[:center_x] if options[:center_x]
|
|
59
62
|
@center_y = options[:center_y] if options[:center_y]
|
|
60
63
|
|
data/lib/chingu/parallax.rb
CHANGED
|
@@ -40,7 +40,9 @@ module Chingu
|
|
|
40
40
|
#
|
|
41
41
|
def initialize(options = {})
|
|
42
42
|
super(options)
|
|
43
|
-
@
|
|
43
|
+
@repeat_x = options[:repeat_x] || true
|
|
44
|
+
@repeat_y = options[:repeat_y] || false
|
|
45
|
+
|
|
44
46
|
@layers = Array.new
|
|
45
47
|
end
|
|
46
48
|
|
|
@@ -50,7 +52,7 @@ module Chingu
|
|
|
50
52
|
# @parallax << {:image => "landscape.png", :damping => 1}
|
|
51
53
|
#
|
|
52
54
|
def add_layer(arg)
|
|
53
|
-
@layers << (arg.is_a?(ParallaxLayer) ? arg : ParallaxLayer.new(arg))
|
|
55
|
+
@layers << (arg.is_a?(ParallaxLayer) ? arg : ParallaxLayer.new(arg.merge({:parallax => self})))
|
|
54
56
|
end
|
|
55
57
|
alias << add_layer
|
|
56
58
|
|
|
@@ -108,7 +110,10 @@ module Chingu
|
|
|
108
110
|
layer.y = @y / layer.damping
|
|
109
111
|
|
|
110
112
|
# This is the magic that repeats the layer to the left and right
|
|
111
|
-
layer.x -= layer.image.width while layer.x > 0
|
|
113
|
+
layer.x -= layer.image.width while (layer.repeat_x && layer.x > 0)
|
|
114
|
+
|
|
115
|
+
# This is the magic that repeats the layer to the left and right
|
|
116
|
+
layer.y -= layer.image.height while (layer.repeat_y && layer.y > 0)
|
|
112
117
|
end
|
|
113
118
|
end
|
|
114
119
|
|
|
@@ -119,14 +124,29 @@ module Chingu
|
|
|
119
124
|
@layers.each do |layer|
|
|
120
125
|
layer.draw
|
|
121
126
|
|
|
122
|
-
save_x = layer.x
|
|
127
|
+
save_x, save_y = layer.x, layer.y
|
|
123
128
|
|
|
124
|
-
|
|
125
|
-
while
|
|
129
|
+
# If layer lands inside our window and repeat_x is true (defaults to true), draw it until window ends
|
|
130
|
+
while layer.repeat_x && layer.x < $window.width
|
|
131
|
+
while layer.repeat_y && layer.y < $window.height
|
|
132
|
+
layer.y += layer.image.height
|
|
133
|
+
layer.draw
|
|
134
|
+
end
|
|
135
|
+
layer.y = save_y
|
|
136
|
+
|
|
126
137
|
layer.x += layer.image.width
|
|
127
138
|
layer.draw
|
|
128
139
|
end
|
|
129
|
-
|
|
140
|
+
|
|
141
|
+
# Special loop for when repeat_y is set but not repeat_x
|
|
142
|
+
if layer.repeat_y && !layer.repeat_x
|
|
143
|
+
while layer.repeat_y && layer.y < $window.height
|
|
144
|
+
layer.y += layer.image.height
|
|
145
|
+
layer.draw
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
|
|
130
150
|
layer.x = save_x
|
|
131
151
|
end
|
|
132
152
|
self
|
|
@@ -143,17 +163,33 @@ module Chingu
|
|
|
143
163
|
class ParallaxLayer < Chingu::GameObject
|
|
144
164
|
@@zorder_counter = 0
|
|
145
165
|
attr_reader :damping
|
|
166
|
+
attr_accessor :repeat_x, :repeat_y
|
|
146
167
|
|
|
147
|
-
def initialize(options)
|
|
168
|
+
def initialize(options)
|
|
169
|
+
@parallax = options[:parallax]
|
|
148
170
|
# No auto update/draw, the parentclass Parallax takes care of that!
|
|
149
171
|
options.merge!(:visible => false, :paused => true)
|
|
172
|
+
|
|
173
|
+
options = {:rotation_center => @parallax.options[:rotation_center]}.merge(options) if @parallax
|
|
174
|
+
|
|
175
|
+
#
|
|
176
|
+
# Default arguments for repeat_x and repeat_y
|
|
177
|
+
# If no zorder is given, use a global incrementing counter.
|
|
178
|
+
# First added, furthest behind when drawn.
|
|
179
|
+
#
|
|
180
|
+
options = {
|
|
181
|
+
:repeat_x => true,
|
|
182
|
+
:repeat_y => false,
|
|
183
|
+
:zorder => (@@zorder_counter+=1)
|
|
184
|
+
}.merge(options)
|
|
185
|
+
|
|
150
186
|
|
|
151
|
-
|
|
152
|
-
|
|
187
|
+
@repeat_x = options[:repeat_x]
|
|
188
|
+
@repeat_y = options[:repeat_y]
|
|
153
189
|
|
|
154
190
|
super(options)
|
|
155
191
|
|
|
156
|
-
@damping = options[:damping] ||
|
|
192
|
+
@damping = options[:damping] || 1
|
|
157
193
|
end
|
|
158
194
|
|
|
159
195
|
#
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chingu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 0.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ippa
|
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
|
30
30
|
hxtMlw==
|
|
31
31
|
-----END CERTIFICATE-----
|
|
32
32
|
|
|
33
|
-
date: 2009-11-
|
|
33
|
+
date: 2009-11-22 00:00:00 +01:00
|
|
34
34
|
default_executable:
|
|
35
35
|
dependencies:
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
@@ -115,6 +115,7 @@ files:
|
|
|
115
115
|
- examples/media/stickfigure.bmp
|
|
116
116
|
- examples/media/stickfigure.png
|
|
117
117
|
- examples/media/video_games.png
|
|
118
|
+
- examples/media/wood.png
|
|
118
119
|
- lib/chingu.rb
|
|
119
120
|
- lib/chingu/animation.rb
|
|
120
121
|
- lib/chingu/assets.rb
|
metadata.gz.sig
CHANGED
|
Binary file
|