chingu 0.7.0 → 0.7.5
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/History.txt +1 -1
- data/README.rdoc +110 -49
- data/benchmarks/game_objects_benchmark.rb +50 -0
- data/chingu.gemspec +24 -12
- data/examples/example10_traits_retrofy.rb +6 -4
- data/examples/example11_animation.rb +14 -23
- data/examples/example12_trait_timer.rb +1 -1
- data/examples/example13_high_scores.rb +1 -1
- data/examples/example14_bounding_box_circle.rb +6 -10
- data/examples/example15_trait_timer2.rb +1 -1
- data/examples/example16_online_high_scores.rb +1 -1
- data/examples/example17_gosu_tutorial.rb +4 -4
- data/examples/example18_animation_trait.rb +98 -0
- data/examples/example19_edit_viewport.rb +223 -0
- data/examples/example19_game_objects.yml +1591 -0
- data/examples/example20_trait_inheritence_test.rb +58 -0
- data/examples/example3_parallax.rb +1 -1
- data/examples/example4_gamestates.rb +1 -1
- data/examples/example7_gfx_helpers.rb +14 -9
- data/examples/example8_traits.rb +4 -4
- data/examples/example9_collision_detection.rb +1 -1
- data/examples/game1.rb +33 -38
- data/examples/game_of_life.rb +291 -0
- data/examples/media/droid_11x15.bmp +0 -0
- data/examples/media/droid_11x15.gal +0 -0
- data/examples/media/heli.bmp +0 -0
- data/examples/media/heli.gal +0 -0
- data/examples/media/star_25x25_default.png +0 -0
- data/examples/media/star_25x25_explode.gal +0 -0
- data/examples/media/star_25x25_explode.png +0 -0
- data/examples/media/stone_wall.bmp +0 -0
- data/lib/chingu.rb +1 -1
- data/lib/chingu/animation.rb +78 -9
- data/lib/chingu/basic_game_object.rb +16 -8
- data/lib/chingu/game_object.rb +36 -7
- data/lib/chingu/game_object_list.rb +20 -3
- data/lib/chingu/game_state.rb +8 -7
- data/lib/chingu/game_states/edit.rb +177 -90
- data/lib/chingu/helpers/class_inheritable_accessor.rb +12 -5
- data/lib/chingu/helpers/game_object.rb +45 -4
- data/lib/chingu/helpers/gfx.rb +150 -172
- data/lib/chingu/helpers/input_client.rb +7 -0
- data/lib/chingu/inflector.rb +16 -2
- data/lib/chingu/traits/animation.rb +84 -0
- data/lib/chingu/traits/bounding_box.rb +16 -3
- data/lib/chingu/traits/bounding_circle.rb +18 -4
- data/lib/chingu/traits/collision_detection.rb +10 -1
- data/lib/chingu/traits/velocity.rb +26 -3
- data/lib/chingu/traits/viewport.rb +10 -9
- data/lib/chingu/viewport.rb +103 -22
- data/lib/chingu/window.rb +8 -2
- metadata +46 -16
- data/examples/example18_viewport.rb +0 -173
- data/examples/media/city1.csv +0 -2
- data/examples/media/plane.csv +0 -2
- data/examples/media/saucer.csv +0 -4
- data/examples/media/stickfigure.bmp +0 -0
- data/examples/media/stickfigure.png +0 -0
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chingu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 9
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 7
|
9
|
+
- 5
|
10
|
+
version: 0.7.5
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- ippa
|
@@ -9,19 +15,25 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-06-13 00:00:00 +02:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: gosu
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 39
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 7
|
33
|
+
- 18
|
23
34
|
version: 0.7.18
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
description: 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.
|
26
38
|
email: ippa@rubylicio.us
|
27
39
|
executables: []
|
@@ -43,6 +55,7 @@ files:
|
|
43
55
|
- benchmarks/benchmark4.rb
|
44
56
|
- benchmarks/benchmark5.rb
|
45
57
|
- benchmarks/benchmark6.rb
|
58
|
+
- benchmarks/game_objects_benchmark.rb
|
46
59
|
- benchmarks/meta_benchmark.rb
|
47
60
|
- benchmarks/meta_benchmark2.rb
|
48
61
|
- chingu.gemspec
|
@@ -54,8 +67,11 @@ files:
|
|
54
67
|
- examples/example15_trait_timer2.rb
|
55
68
|
- examples/example16_online_high_scores.rb
|
56
69
|
- examples/example17_gosu_tutorial.rb
|
57
|
-
- examples/
|
70
|
+
- examples/example18_animation_trait.rb
|
71
|
+
- examples/example19_edit_viewport.rb
|
72
|
+
- examples/example19_game_objects.yml
|
58
73
|
- examples/example1_basics.rb
|
74
|
+
- examples/example20_trait_inheritence_test.rb
|
59
75
|
- examples/example2_gamestate_basics.rb
|
60
76
|
- examples/example3_parallax.rb
|
61
77
|
- examples/example4_gamestates.rb
|
@@ -65,6 +81,7 @@ files:
|
|
65
81
|
- examples/example8_traits.rb
|
66
82
|
- examples/example9_collision_detection.rb
|
67
83
|
- examples/game1.rb
|
84
|
+
- examples/game_of_life.rb
|
68
85
|
- examples/high_score_list.yml
|
69
86
|
- examples/media/Parallax-scroll-example-layer-0.png
|
70
87
|
- examples/media/Parallax-scroll-example-layer-1.png
|
@@ -76,26 +93,29 @@ files:
|
|
76
93
|
- examples/media/bullet.png
|
77
94
|
- examples/media/bullet_hit.wav
|
78
95
|
- examples/media/circle.png
|
79
|
-
- examples/media/city1.csv
|
80
96
|
- examples/media/city1.png
|
81
97
|
- examples/media/city2.png
|
82
98
|
- examples/media/droid.bmp
|
99
|
+
- examples/media/droid_11x15.bmp
|
100
|
+
- examples/media/droid_11x15.gal
|
83
101
|
- examples/media/enemy_bullet.png
|
84
102
|
- examples/media/explosion.wav
|
85
103
|
- examples/media/fire_bullet.png
|
86
104
|
- examples/media/fireball.png
|
105
|
+
- examples/media/heli.bmp
|
106
|
+
- examples/media/heli.gal
|
87
107
|
- examples/media/laser.wav
|
88
108
|
- examples/media/particle.png
|
89
|
-
- examples/media/plane.csv
|
90
109
|
- examples/media/plane.png
|
91
110
|
- examples/media/rect.png
|
92
111
|
- examples/media/ruby.png
|
93
|
-
- examples/media/saucer.csv
|
94
112
|
- examples/media/saucer.gal
|
95
113
|
- examples/media/saucer.png
|
96
114
|
- examples/media/spaceship.png
|
97
|
-
- examples/media/
|
98
|
-
- examples/media/
|
115
|
+
- examples/media/star_25x25_default.png
|
116
|
+
- examples/media/star_25x25_explode.gal
|
117
|
+
- examples/media/star_25x25_explode.png
|
118
|
+
- examples/media/stone_wall.bmp
|
99
119
|
- examples/media/video_games.png
|
100
120
|
- examples/media/wood.png
|
101
121
|
- lib/chingu.rb
|
@@ -130,6 +150,7 @@ files:
|
|
130
150
|
- lib/chingu/rect.rb
|
131
151
|
- lib/chingu/require_all.rb
|
132
152
|
- lib/chingu/text.rb
|
153
|
+
- lib/chingu/traits/animation.rb
|
133
154
|
- lib/chingu/traits/bounding_box.rb
|
134
155
|
- lib/chingu/traits/bounding_circle.rb
|
135
156
|
- lib/chingu/traits/collision_detection.rb
|
@@ -150,21 +171,27 @@ rdoc_options:
|
|
150
171
|
require_paths:
|
151
172
|
- lib
|
152
173
|
required_ruby_version: !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
153
175
|
requirements:
|
154
176
|
- - ">="
|
155
177
|
- !ruby/object:Gem::Version
|
178
|
+
hash: 3
|
179
|
+
segments:
|
180
|
+
- 0
|
156
181
|
version: "0"
|
157
|
-
version:
|
158
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
|
+
none: false
|
159
184
|
requirements:
|
160
185
|
- - ">="
|
161
186
|
- !ruby/object:Gem::Version
|
187
|
+
hash: 3
|
188
|
+
segments:
|
189
|
+
- 0
|
162
190
|
version: "0"
|
163
|
-
version:
|
164
191
|
requirements: []
|
165
192
|
|
166
193
|
rubyforge_project: chingu
|
167
|
-
rubygems_version: 1.3.
|
194
|
+
rubygems_version: 1.3.7
|
168
195
|
signing_key:
|
169
196
|
specification_version: 3
|
170
197
|
summary: OpenGL accelerated 2D game framework for Ruby
|
@@ -177,8 +204,10 @@ test_files:
|
|
177
204
|
- examples/example15_trait_timer2.rb
|
178
205
|
- examples/example16_online_high_scores.rb
|
179
206
|
- examples/example17_gosu_tutorial.rb
|
180
|
-
- examples/
|
207
|
+
- examples/example18_animation_trait.rb
|
208
|
+
- examples/example19_edit_viewport.rb
|
181
209
|
- examples/example1_basics.rb
|
210
|
+
- examples/example20_trait_inheritence_test.rb
|
182
211
|
- examples/example2_gamestate_basics.rb
|
183
212
|
- examples/example3_parallax.rb
|
184
213
|
- examples/example4_gamestates.rb
|
@@ -188,3 +217,4 @@ test_files:
|
|
188
217
|
- examples/example8_traits.rb
|
189
218
|
- examples/example9_collision_detection.rb
|
190
219
|
- examples/game1.rb
|
220
|
+
- examples/game_of_life.rb
|
@@ -1,173 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
require 'opengl'
|
4
|
-
require File.join(File.dirname($0), "..", "lib", "chingu")
|
5
|
-
include Gosu
|
6
|
-
include Chingu
|
7
|
-
|
8
|
-
#
|
9
|
-
# viewport-trait example
|
10
|
-
#
|
11
|
-
# Gotcha: collision_detection-trait debug mode currently borks up with viewports (only the visuals)
|
12
|
-
#
|
13
|
-
class Game < Chingu::Window
|
14
|
-
attr_reader :factor
|
15
|
-
|
16
|
-
def initialize
|
17
|
-
super
|
18
|
-
@factor = 6
|
19
|
-
self.input = { :escape => :exit }
|
20
|
-
switch_game_state(Level)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class Level < GameState
|
25
|
-
#
|
26
|
-
# This adds accessor 'viewport' to class and overrides draw() to use it.
|
27
|
-
#
|
28
|
-
has_trait :viewport
|
29
|
-
|
30
|
-
#
|
31
|
-
# We create our 3 different game objects in this order:
|
32
|
-
# 1) map 2) stars 3) player
|
33
|
-
# Since we don't give any zorders Chingu automatically increments zorder between each object created, putting player on top
|
34
|
-
#
|
35
|
-
def initialize(options = {})
|
36
|
-
super
|
37
|
-
@map = GameObject.create(:image => "background1.png", :factor => $window.factor, :rotation_center => :top_left, :retrofy => true)
|
38
|
-
self.viewport.x_min = 0
|
39
|
-
self.viewport.y_min = 0
|
40
|
-
self.viewport.x_max = @map.image.width * $window.factor - $window.width
|
41
|
-
self.viewport.y_max = @map.image.height * $window.factor - $window.height
|
42
|
-
|
43
|
-
# Create 40 stars scattered around the map
|
44
|
-
40.times { |nr| Star.create(:x => rand * self.viewport.x_max, :y => rand * self.viewport.y_max) }
|
45
|
-
|
46
|
-
@droid = Droid.create(:x => 100, :y => 100)
|
47
|
-
end
|
48
|
-
|
49
|
-
def update
|
50
|
-
super
|
51
|
-
|
52
|
-
@droid.each_collision(Star) do |droid, star|
|
53
|
-
star.destroy
|
54
|
-
Sound["laser.wav"].play(0.5)
|
55
|
-
end
|
56
|
-
|
57
|
-
#
|
58
|
-
# Align viewport with the droid in the middle.
|
59
|
-
# This will make droid will be in the center of the screen all the time...
|
60
|
-
# ...except when hitting outer borders and viewport x/y _ min/max kicks in.
|
61
|
-
#
|
62
|
-
self.viewport.x = @droid.x - $window.width / 2
|
63
|
-
self.viewport.y = @droid.y - $window.height / 2
|
64
|
-
|
65
|
-
$window.caption = "viewport-trait example. Move with arrows! x/y: #{@droid.x}/#{@droid.y} - viewport x/y: #{self.viewport.x}/#{self.viewport.y} - FPS: #{$window.fps}"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class Droid < Chingu::GameObject
|
70
|
-
has_trait :bounding_box
|
71
|
-
has_traits :timer, :collision_detection
|
72
|
-
|
73
|
-
attr_accessor :last_x, :last_y
|
74
|
-
|
75
|
-
def initialize(options = {})
|
76
|
-
super
|
77
|
-
|
78
|
-
#
|
79
|
-
# This shows up the shorten versio of input-maps, where each key calls a method of the very same name.
|
80
|
-
# Use this by giving an array of symbols to self.input
|
81
|
-
#
|
82
|
-
self.input = [:holding_left, :holding_right, :holding_up, :holding_down]
|
83
|
-
|
84
|
-
# Load the full animation from tile-file media/droid.bmp
|
85
|
-
@full_animation = Chingu::Animation.new(:file => "droid.bmp", :size => [11,16]).retrofy
|
86
|
-
|
87
|
-
# Create new animations from specific frames and stuff them into easy to access hash
|
88
|
-
@animations = {}
|
89
|
-
@animations[:scan] = @full_animation[0..5]
|
90
|
-
@animations[:up] = @full_animation[6..7]
|
91
|
-
@animations[:down] = @full_animation[8..9]
|
92
|
-
@animations[:left] = @full_animation[10..11]
|
93
|
-
@animations[:right] = @full_animation[12..13]
|
94
|
-
|
95
|
-
# Start out by animation frames 0-5 (contained by @animations[:scan])
|
96
|
-
@animation = @animations[:scan]
|
97
|
-
|
98
|
-
self.factor = $window.factor
|
99
|
-
@last_x, @last_y = @x, @y
|
100
|
-
@speed = 3
|
101
|
-
|
102
|
-
update
|
103
|
-
end
|
104
|
-
|
105
|
-
def holding_left
|
106
|
-
@x -= @speed
|
107
|
-
@animation = @animations[:left]
|
108
|
-
end
|
109
|
-
|
110
|
-
def holding_right
|
111
|
-
@x += @speed
|
112
|
-
@animation = @animations[:right]
|
113
|
-
end
|
114
|
-
|
115
|
-
def holding_up
|
116
|
-
@y -= @speed
|
117
|
-
@animation = @animations[:up]
|
118
|
-
end
|
119
|
-
|
120
|
-
def holding_down
|
121
|
-
@y += @speed
|
122
|
-
@animation = @animations[:down]
|
123
|
-
end
|
124
|
-
|
125
|
-
# We don't need to call super() in update().
|
126
|
-
# By default GameObject#update is empty since it doesn't contain any gamelogic to speak of.
|
127
|
-
def update
|
128
|
-
|
129
|
-
# Move the animation forward by fetching the next frame and putting it into @image
|
130
|
-
# @image is drawn by default by GameObject#draw
|
131
|
-
@image = @animation.next
|
132
|
-
|
133
|
-
#
|
134
|
-
# If droid stands still, use the scanning animation
|
135
|
-
#
|
136
|
-
if @x == @last_x && @y == @last_y
|
137
|
-
@animation = @animations[:scan]
|
138
|
-
end
|
139
|
-
|
140
|
-
@x, @y = @last_x, @last_y if self.parent.outside_viewport?(self)
|
141
|
-
@last_x, @last_y = @x, @y
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
class Star < GameObject
|
146
|
-
has_trait :bounding_circle
|
147
|
-
has_trait :collision_detection
|
148
|
-
|
149
|
-
def initialize(options={})
|
150
|
-
super
|
151
|
-
|
152
|
-
@animation = Chingu::Animation.new(:file => media_path("Star.png"), :size => 25)
|
153
|
-
@image = @animation.next
|
154
|
-
self.color = Gosu::Color.new(0xff000000)
|
155
|
-
self.color.red = rand(255 - 40) + 40
|
156
|
-
self.color.green = rand(255 - 40) + 40
|
157
|
-
self.color.blue = rand(255 - 40) + 40
|
158
|
-
|
159
|
-
#
|
160
|
-
# A cached bounding circle will not adapt to changes in size, but it will follow objects X / Y
|
161
|
-
# Same is true for "cache_bounding_box"
|
162
|
-
#
|
163
|
-
cache_bounding_circle
|
164
|
-
end
|
165
|
-
|
166
|
-
def update
|
167
|
-
# Move the animation forward by fetching the next frame and putting it into @image
|
168
|
-
# @image is drawn by default by GameObject#draw
|
169
|
-
@image = @animation.next
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
Game.new.show
|
data/examples/media/city1.csv
DELETED
data/examples/media/plane.csv
DELETED
data/examples/media/saucer.csv
DELETED
Binary file
|
Binary file
|