chingu 0.6.9 → 0.7.0
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/Rakefile +1 -1
- data/chingu.gemspec +9 -5
- data/examples/example18_viewport.rb +173 -0
- data/lib/chingu.rb +1 -1
- data/lib/chingu/game_object.rb +11 -0
- data/lib/chingu/game_object_list.rb +10 -3
- data/lib/chingu/traits/viewport.rb +75 -0
- data/lib/chingu/viewport.rb +68 -0
- data/lib/chingu/window.rb +2 -2
- metadata +7 -3
data/Rakefile
CHANGED
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.
|
8
|
+
s.version = "0.7.0"
|
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-01-
|
12
|
+
s.date = %q{2010-01-14}
|
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 = [
|
@@ -39,6 +39,7 @@ Gem::Specification.new do |s|
|
|
39
39
|
"examples/example15_trait_timer2.rb",
|
40
40
|
"examples/example16_online_high_scores.rb",
|
41
41
|
"examples/example17_gosu_tutorial.rb",
|
42
|
+
"examples/example18_viewport.rb",
|
42
43
|
"examples/example1_basics.rb",
|
43
44
|
"examples/example2_gamestate_basics.rb",
|
44
45
|
"examples/example3_parallax.rb",
|
@@ -121,6 +122,8 @@ Gem::Specification.new do |s|
|
|
121
122
|
"lib/chingu/traits/retrofy.rb",
|
122
123
|
"lib/chingu/traits/timer.rb",
|
123
124
|
"lib/chingu/traits/velocity.rb",
|
125
|
+
"lib/chingu/traits/viewport.rb",
|
126
|
+
"lib/chingu/viewport.rb",
|
124
127
|
"lib/chingu/window.rb"
|
125
128
|
]
|
126
129
|
s.homepage = %q{http://github.com/ippa/chingu}
|
@@ -138,6 +141,7 @@ Gem::Specification.new do |s|
|
|
138
141
|
"examples/example15_trait_timer2.rb",
|
139
142
|
"examples/example16_online_high_scores.rb",
|
140
143
|
"examples/example17_gosu_tutorial.rb",
|
144
|
+
"examples/example18_viewport.rb",
|
141
145
|
"examples/example1_basics.rb",
|
142
146
|
"examples/example2_gamestate_basics.rb",
|
143
147
|
"examples/example3_parallax.rb",
|
@@ -155,12 +159,12 @@ Gem::Specification.new do |s|
|
|
155
159
|
s.specification_version = 3
|
156
160
|
|
157
161
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
158
|
-
s.add_runtime_dependency(%q<gosu>, [">= 0.7.
|
162
|
+
s.add_runtime_dependency(%q<gosu>, [">= 0.7.18"])
|
159
163
|
else
|
160
|
-
s.add_dependency(%q<gosu>, [">= 0.7.
|
164
|
+
s.add_dependency(%q<gosu>, [">= 0.7.18"])
|
161
165
|
end
|
162
166
|
else
|
163
|
-
s.add_dependency(%q<gosu>, [">= 0.7.
|
167
|
+
s.add_dependency(%q<gosu>, [">= 0.7.18"])
|
164
168
|
end
|
165
169
|
end
|
166
170
|
|
@@ -0,0 +1,173 @@
|
|
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/lib/chingu.rb
CHANGED
data/lib/chingu/game_object.rb
CHANGED
@@ -118,8 +118,19 @@ module Chingu
|
|
118
118
|
distance(self.x, self.y, object.x, object.y)
|
119
119
|
end
|
120
120
|
|
121
|
+
#
|
122
|
+
# Our encapsulation of GOSU's image.draw_rot, uses the objects variables to draw it on screen if @visible is true
|
123
|
+
#
|
121
124
|
def draw
|
122
125
|
@image.draw_rot(@x, @y, @zorder, @angle, @center_x, @center_y, @factor_x, @factor_y, @color, @mode) if @visible
|
123
126
|
end
|
127
|
+
|
128
|
+
#
|
129
|
+
# Works as #draw() but takes offsets for all draw_rot()-arguments. Used among others by by viewport-trait
|
130
|
+
#
|
131
|
+
def draw_relative(x=0, y=0, zorder=0, angle=0, center_x=0, center_y=0, factor_x=0, factor_y=0)
|
132
|
+
@image.draw_rot(@x+x, @y+y, @zorder+zorder, @angle+angle, @center_x+center_x, @center_y+center_y, @factor_x+factor_x, @factor_y+factor_y, @color, @mode) if @visible
|
133
|
+
end
|
134
|
+
|
124
135
|
end
|
125
136
|
end
|
@@ -27,8 +27,8 @@ module Chingu
|
|
27
27
|
#
|
28
28
|
class GameObjectList
|
29
29
|
|
30
|
-
def initialize
|
31
|
-
@game_objects =
|
30
|
+
def initialize(options = {})
|
31
|
+
@game_objects = options[:game_objects] || []
|
32
32
|
#@game_objects_by_class = Hash.new
|
33
33
|
end
|
34
34
|
|
@@ -73,7 +73,14 @@ module Chingu
|
|
73
73
|
object.draw
|
74
74
|
end
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
|
+
def draw_relative(x=0, y=0, zorder=0, angle=0, center_x=0, center_y=0, factor_x=0, factor_y=0)
|
78
|
+
@game_objects.each{ |object| object.visible }.each do |object|
|
79
|
+
object.draw_trait
|
80
|
+
object.draw_relative(x, y, zorder, angle, center_x, center_y, factor_x, factor_y)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
77
84
|
def update
|
78
85
|
@game_objects.select{ |object| not object.paused }.each do |object|
|
79
86
|
object.update_trait
|
@@ -0,0 +1,75 @@
|
|
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 Traits
|
24
|
+
#
|
25
|
+
# A chingu trait providing velocity and acceleration logic.
|
26
|
+
# Adds parameters: velocity_x/y, acceleration_x/y and modifies self.x / self.y
|
27
|
+
# Also keeps previous_x and previous_y which is the x, y before modification.
|
28
|
+
# Can be useful for example collision detection
|
29
|
+
#
|
30
|
+
module Viewport
|
31
|
+
attr_accessor :viewport
|
32
|
+
|
33
|
+
module ClassMethods
|
34
|
+
def initialize_trait(options = {})
|
35
|
+
trait_options[:viewport] = {:apply => true}.merge(options)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def setup_trait(options)
|
40
|
+
@viewport_options = {:debug => false}.merge(options)
|
41
|
+
|
42
|
+
@viewport = Chingu::Viewport.new()
|
43
|
+
@viewport.x = options[:viewport_x] || 0
|
44
|
+
@viewport.y = options[:viewport_y] || 0
|
45
|
+
|
46
|
+
super
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# Returns true if object is inside view port, false if outside
|
51
|
+
# TODO: add view port height and width! (and use clip_to when painting?)
|
52
|
+
#
|
53
|
+
# This is a very flawed implementation, it Should take inte account objects
|
54
|
+
# height,width,factor_x,factor_y,center_x,center_y as well...
|
55
|
+
#
|
56
|
+
def inside_viewport?(object)
|
57
|
+
object.x >= @viewport.x && object.x <= (@viewport.x + $window.width) &&
|
58
|
+
object.y >= @viewport.y && object.y <= (@viewport.y + $window.height)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns true object is outside the view port
|
62
|
+
def outside_viewport?(object)
|
63
|
+
not inside_viewport?(object)
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Override game states default draw that draws objects relative to the viewport.
|
68
|
+
# It only draws game objects inside the viewport. (GOSU does no such optimizations)
|
69
|
+
#
|
70
|
+
def draw
|
71
|
+
self.game_objects.draw_relative(-@viewport.x, -@viewport.y)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,68 @@
|
|
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
|
+
#
|
24
|
+
# A basic Viewport class
|
25
|
+
#
|
26
|
+
# TODO:
|
27
|
+
# Implement use of viewports angle, center_x, center_y, factor_x, factor_y
|
28
|
+
#
|
29
|
+
class Viewport
|
30
|
+
attr_accessor :x, :y, :x_min, :x_max, :y_min, :y_max
|
31
|
+
#attr_accessor :angle, :center_x, :center_y, :factor_x, :factor_y
|
32
|
+
|
33
|
+
def initialize(options = {})
|
34
|
+
@x = options[:x] || 0
|
35
|
+
@y = options[:y] || 0
|
36
|
+
@angle = options[:angle] || 0
|
37
|
+
|
38
|
+
#self.factor = options[:factor] || options[:scale] || 1.0
|
39
|
+
#@factor_x = options[:factor_x] if options[:factor_x]
|
40
|
+
#@factor_y = options[:factor_y] if options[:factor_y]
|
41
|
+
|
42
|
+
#self.center = options[:center] || 0.5
|
43
|
+
#@rotation_center = options[:rotation_center]
|
44
|
+
#self.rotation_center(options[:rotation_center]) if options[:rotation_center]
|
45
|
+
|
46
|
+
#@center_x = options[:center_x] if options[:center_x]
|
47
|
+
#@center_y = options[:center_y] if options[:center_y]
|
48
|
+
|
49
|
+
@x_min = nil
|
50
|
+
@x_max = nil
|
51
|
+
@y_min = nil
|
52
|
+
@y_max = nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def x=(x)
|
56
|
+
@x = x
|
57
|
+
@x = @x_min if @x_min && @x < @x_min
|
58
|
+
@x = @x_max if @x_max && @x > @x_max
|
59
|
+
end
|
60
|
+
|
61
|
+
def y=(y)
|
62
|
+
@y = y
|
63
|
+
@y = @y_min if @y_min && @y < @y_min
|
64
|
+
@y = @y_max if @y_max && @y > @y_max
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
data/lib/chingu/window.rb
CHANGED
@@ -37,7 +37,7 @@ module Chingu
|
|
37
37
|
include Chingu::Helpers::GameState # Easy access to the global game state-queue
|
38
38
|
include Chingu::Helpers::GameObject # Adds game_objects_of_class etc ...
|
39
39
|
include Chingu::Helpers::InputDispatcher # Input dispatch-helpers
|
40
|
-
include Chingu::Helpers::InputClient #
|
40
|
+
include Chingu::Helpers::InputClient # Window has its own inputmap
|
41
41
|
|
42
42
|
attr_reader :root, :game_state_manager, :game_objects, :milliseconds_since_last_tick
|
43
43
|
|
@@ -56,7 +56,7 @@ module Chingu
|
|
56
56
|
|
57
57
|
@fps_counter = FPSCounter.new
|
58
58
|
@game_state_manager = GameStateManager.new
|
59
|
-
@milliseconds_since_last_tick = 0
|
59
|
+
@milliseconds_since_last_tick = 0
|
60
60
|
end
|
61
61
|
|
62
62
|
#
|
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: 0.
|
4
|
+
version: 0.7.0
|
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: 2010-01-
|
12
|
+
date: 2010-01-14 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.7.
|
23
|
+
version: 0.7.18
|
24
24
|
version:
|
25
25
|
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
26
|
email: ippa@rubylicio.us
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- examples/example15_trait_timer2.rb
|
55
55
|
- examples/example16_online_high_scores.rb
|
56
56
|
- examples/example17_gosu_tutorial.rb
|
57
|
+
- examples/example18_viewport.rb
|
57
58
|
- examples/example1_basics.rb
|
58
59
|
- examples/example2_gamestate_basics.rb
|
59
60
|
- examples/example3_parallax.rb
|
@@ -136,6 +137,8 @@ files:
|
|
136
137
|
- lib/chingu/traits/retrofy.rb
|
137
138
|
- lib/chingu/traits/timer.rb
|
138
139
|
- lib/chingu/traits/velocity.rb
|
140
|
+
- lib/chingu/traits/viewport.rb
|
141
|
+
- lib/chingu/viewport.rb
|
139
142
|
- lib/chingu/window.rb
|
140
143
|
has_rdoc: true
|
141
144
|
homepage: http://github.com/ippa/chingu
|
@@ -174,6 +177,7 @@ test_files:
|
|
174
177
|
- examples/example15_trait_timer2.rb
|
175
178
|
- examples/example16_online_high_scores.rb
|
176
179
|
- examples/example17_gosu_tutorial.rb
|
180
|
+
- examples/example18_viewport.rb
|
177
181
|
- examples/example1_basics.rb
|
178
182
|
- examples/example2_gamestate_basics.rb
|
179
183
|
- examples/example3_parallax.rb
|