chingu 0.7.6.6 → 0.7.6.7
Sign up to get free protection for your applications and to get access to all the features.
- data/chingu.gemspec +9 -2
- data/examples/example11_animation.rb +2 -5
- data/examples/example17_gosu_tutorial.rb +2 -2
- data/examples/example18_animation_trait.rb +2 -2
- data/examples/example19_edit_viewport.rb +6 -3
- data/examples/example21.yml +283 -291
- data/examples/example21_sidescroller_with_edit.rb +22 -16
- data/examples/example22_text.rb +5 -1
- data/examples/example23_chipmunk.rb +25 -0
- data/examples/example3_parallax.rb +1 -0
- data/examples/example4_gamestates.rb +20 -5
- data/examples/game1.rb +13 -40
- data/lib/chingu.rb +2 -1
- data/lib/chingu/assets.rb +2 -2
- data/lib/chingu/basic_game_object.rb +1 -23
- data/lib/chingu/game_object.rb +21 -0
- data/lib/chingu/game_object_map.rb +96 -0
- data/lib/chingu/game_states/debug.rb +60 -14
- data/lib/chingu/game_states/edit.rb +5 -1
- data/lib/chingu/game_states/fade_to.rb +1 -1
- data/lib/chingu/helpers/input_client.rb +13 -5
- data/lib/chingu/helpers/input_dispatcher.rb +13 -8
- data/lib/chingu/helpers/options_setter.rb +33 -0
- data/lib/chingu/input.rb +5 -5
- data/lib/chingu/rect.rb +2 -0
- data/lib/chingu/text.rb +7 -9
- data/lib/chingu/traits/animation.rb +1 -0
- data/lib/chingu/traits/bounding_box.rb +1 -5
- data/lib/chingu/traits/bounding_circle.rb +1 -6
- data/lib/chingu/traits/effect.rb +4 -4
- data/lib/chingu/traits/retrofy.rb +1 -1
- data/lib/chingu/traits/sprite.rb +234 -0
- data/lib/chingu/traits/velocity.rb +22 -11
- data/lib/chingu/traits/viewport.rb +2 -2
- data/lib/chingu/viewport.rb +32 -21
- data/lib/chingu/window.rb +6 -5
- data/spec/chingu/helpers/options_setter_spec.rb +39 -0
- data/spec/spec_helper.rb +3 -0
- metadata +12 -5
@@ -59,8 +59,11 @@ module Chingu
|
|
59
59
|
# Sets X and Y velocity with one single call. Takes an Array-argument with 2 values.
|
60
60
|
#
|
61
61
|
def velocity=(value)
|
62
|
-
|
63
|
-
|
62
|
+
if value.is_a? Array
|
63
|
+
@velocity_x, @velocity_y = value
|
64
|
+
else
|
65
|
+
@velocity_x, @velocity_y = value, value
|
66
|
+
end
|
64
67
|
end
|
65
68
|
|
66
69
|
def velocity; [@velocity_x, @velocity_y]; end
|
@@ -69,8 +72,11 @@ module Chingu
|
|
69
72
|
# Sets X and Y acceleration with one single call. Takes an Array-argument with 2 values.
|
70
73
|
#
|
71
74
|
def acceleration=(value)
|
72
|
-
|
73
|
-
|
75
|
+
if value.is_a? Array
|
76
|
+
@acceleration_x, @acceleration_y = value
|
77
|
+
else
|
78
|
+
@acceleration_x, @acceleration_y = value, value
|
79
|
+
end
|
74
80
|
end
|
75
81
|
|
76
82
|
def acceleration; [@acceleration_x, @acceleration_y]; end
|
@@ -92,20 +98,25 @@ module Chingu
|
|
92
98
|
@velocity_x += @acceleration_x if (@velocity_x + @acceleration_x).abs < @max_velocity_x
|
93
99
|
@velocity_y += @acceleration_y if (@velocity_y + @acceleration_y).abs < @max_velocity_y
|
94
100
|
|
95
|
-
@previous_x =
|
96
|
-
@previous_y =
|
101
|
+
@previous_x = self.x
|
102
|
+
@previous_y = self.y
|
97
103
|
|
98
104
|
#
|
99
105
|
# if option :apply is false, just calculate velocities, don't apply them to x/y
|
100
106
|
#
|
101
|
-
unless trait_options[:velocity][:apply] == false
|
102
|
-
self.x += @velocity_x
|
103
|
-
self.y += @velocity_y
|
104
|
-
end
|
107
|
+
move(@velocity_x, @velocity_y) unless trait_options[:velocity][:apply] == false
|
105
108
|
|
106
109
|
super
|
107
110
|
end
|
108
111
|
|
112
|
+
#
|
113
|
+
# Move game object
|
114
|
+
#
|
115
|
+
def move(x, y)
|
116
|
+
self.x += x
|
117
|
+
self.y += y
|
118
|
+
end
|
119
|
+
|
109
120
|
#
|
110
121
|
# Setts velocity_x and velocity_y to 0, stopping the game object
|
111
122
|
# Note it doesn't reset the acceleration!
|
@@ -127,7 +138,7 @@ module Chingu
|
|
127
138
|
# Did game object move last tick
|
128
139
|
#
|
129
140
|
def moved?
|
130
|
-
|
141
|
+
self.x != @previous_x || self.y != @previous_y
|
131
142
|
end
|
132
143
|
end
|
133
144
|
end
|
@@ -69,8 +69,8 @@ module Chingu
|
|
69
69
|
# It only draws game objects inside the viewport. (GOSU does no such optimizations)
|
70
70
|
#
|
71
71
|
def draw
|
72
|
-
self.game_objects.draw_relative(-@viewport.x, -@viewport.y)
|
73
|
-
|
72
|
+
#self.game_objects.draw_relative(-@viewport.x, -@viewport.y)
|
73
|
+
@viewport.apply { super }
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
data/lib/chingu/viewport.rb
CHANGED
@@ -21,7 +21,11 @@
|
|
21
21
|
|
22
22
|
module Chingu
|
23
23
|
#
|
24
|
-
# A basic viewport class
|
24
|
+
# A basic viewport class. Coordinates X and Y are relative to game
|
25
|
+
# area that can be specified by any arguments acceptable by
|
26
|
+
# Chingu::Rect#new method. By default, the game_area is the same
|
27
|
+
# as window and thus the vieport has no effect.
|
28
|
+
#
|
25
29
|
#
|
26
30
|
# TODO:
|
27
31
|
# Implement use of viewports angle, center_x, center_y, factor_x, factor_y
|
@@ -32,11 +36,11 @@ module Chingu
|
|
32
36
|
def initialize(options = {})
|
33
37
|
@x = options[:x] || 0
|
34
38
|
@y = options[:y] || 0
|
35
|
-
@x_target = options[:x_target]
|
36
|
-
@y_target = options[:y_target]
|
39
|
+
@x_target = options[:x_target] || @x
|
40
|
+
@y_target = options[:y_target] || @y
|
37
41
|
@x_lag = options[:x_lag] || 0
|
38
42
|
@y_lag = options[:y_lag] || 0
|
39
|
-
@game_area = Chingu::Rect.new(options[:game_area]||[@x, @y, $window.width, $window.height])
|
43
|
+
@game_area = Chingu::Rect.new(options[:game_area] || [@x, @y, $window.width, $window.height])
|
40
44
|
end
|
41
45
|
|
42
46
|
#
|
@@ -68,11 +72,7 @@ module Chingu
|
|
68
72
|
# The game objects image will be the rectangle the viewport can move within.
|
69
73
|
#
|
70
74
|
def game_area_object=(game_object)
|
71
|
-
|
72
|
-
@game_area = Rect.new(0,0,
|
73
|
-
(image.width*$window.factor) - $window.width,
|
74
|
-
(image.height*$window.factor) - $window.height
|
75
|
-
)
|
75
|
+
@game_area = Rect.new(0, 0, game_object.width, game_object.height)
|
76
76
|
end
|
77
77
|
|
78
78
|
#
|
@@ -83,7 +83,7 @@ module Chingu
|
|
83
83
|
# height,width,factor_x,factor_y,center_x,center_y as well...
|
84
84
|
#
|
85
85
|
def inside?(object, y = nil)
|
86
|
-
x, y = y ? [object,y] : [object.x, object.y]
|
86
|
+
x, y = y ? [object,y] : [object.x, object.y]
|
87
87
|
x >= @x && x <= (@x + $window.width) &&
|
88
88
|
y >= @y && y <= (@y + $window.height)
|
89
89
|
end
|
@@ -99,8 +99,8 @@ module Chingu
|
|
99
99
|
# The viewport can't show anything outside the game area
|
100
100
|
#
|
101
101
|
def inside_game_area?(object)
|
102
|
-
object.x >= @game_area.x && object.x <=
|
103
|
-
object.y >= @game_area.x && object.y <=
|
102
|
+
object.x >= @game_area.x && object.x <= @game_area.width &&
|
103
|
+
object.y >= @game_area.x && object.y <= @game_area.height
|
104
104
|
end
|
105
105
|
|
106
106
|
# Returns true object is outside the game area
|
@@ -130,25 +130,36 @@ module Chingu
|
|
130
130
|
def x=(x)
|
131
131
|
@x = x
|
132
132
|
if @game_area
|
133
|
-
@x = @game_area.x
|
134
|
-
@x = @game_area.width if @x > @game_area.width
|
133
|
+
@x = @game_area.x if @x < @game_area.x
|
134
|
+
@x = @game_area.width-$window.width if @x > @game_area.width-$window.width
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
138
|
+
#
|
139
|
+
# Viewports Y setter with boundschecking
|
140
|
+
#
|
141
141
|
def y=(y)
|
142
142
|
@y = y
|
143
143
|
if @game_area
|
144
|
-
@y = @game_area.y
|
145
|
-
@y = @game_area.height
|
144
|
+
@y = @game_area.y if @y < @game_area.y
|
145
|
+
@y = @game_area.height-$window.height if @y > @game_area.height-$window.height
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
149
|
def apply(&block)
|
150
150
|
$window.translate(-@x, -@y, &block)
|
151
|
-
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def to_s
|
154
|
+
a = @game_area
|
155
|
+
%/
|
156
|
+
Vieport
|
157
|
+
Position: #{@x}, #{y}
|
158
|
+
Game area: #{a.x},#{a.y},#{a.width},#{a.height}"
|
159
|
+
Target: #{@target_x}, #{@target_y}
|
160
|
+
/
|
161
|
+
end
|
162
|
+
|
152
163
|
|
153
164
|
end
|
154
|
-
end
|
165
|
+
end
|
data/lib/chingu/window.rb
CHANGED
@@ -46,11 +46,12 @@ module Chingu
|
|
46
46
|
$window = super(width, height, fullscreen, update_interval)
|
47
47
|
|
48
48
|
@root = File.dirname(File.expand_path($0))
|
49
|
-
|
50
|
-
|
51
|
-
Gosu::
|
52
|
-
Gosu::
|
53
|
-
|
49
|
+
|
50
|
+
Chingu::Asset.autoload_dirs += [".", File.join(@root, "assets"), File.join(@root, "media")]
|
51
|
+
Gosu::Image.autoload_dirs += [".", File.join(@root, "images"), File.join(@root, "gfx"), File.join(@root, "media")]
|
52
|
+
Gosu::Sample.autoload_dirs += [".", File.join(@root, "sounds"), File.join(@root, "sfx"), File.join(@root, "media")]
|
53
|
+
Gosu::Song.autoload_dirs += [".", File.join(@root, "songs"), File.join(@root, "sounds"), File.join(@root, "sfx"), File.join(@root, "media")]
|
54
|
+
|
54
55
|
@game_objects = GameObjectList.new
|
55
56
|
@input_clients = Array.new
|
56
57
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Car
|
4
|
+
include Chingu::Helpers::OptionsSetter
|
5
|
+
|
6
|
+
attr_accessor :angle, :speed
|
7
|
+
attr_reader :color
|
8
|
+
|
9
|
+
def initialize(params)
|
10
|
+
set_options(params, { :angle => 11, :speed => 22 })
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
module Chingu
|
16
|
+
module Helpers
|
17
|
+
describe OptionsSetter do
|
18
|
+
|
19
|
+
describe "using without defaults" do
|
20
|
+
before do
|
21
|
+
@car = Car.new(:angle => 44)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should set angle from options" do
|
25
|
+
@car.angle.should == 44
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set speed from defaults" do
|
29
|
+
@car.speed.should == 22
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should handle attribute without writer" do
|
33
|
+
Car.new(:color => :green).color.should == :green
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
3
|
|
4
|
+
|
4
5
|
# encoding: utf-8
|
5
6
|
require 'rubygems'
|
6
7
|
require 'rspec'
|
8
|
+
require 'require_all'
|
7
9
|
|
8
10
|
require 'chingu'
|
11
|
+
require 'chingu/helpers/options_setter'
|
9
12
|
|
10
13
|
def media_path(file)
|
11
14
|
File.join($window.root, "..", "..", "examples", "media", file)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chingu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 97
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
9
|
- 6
|
10
|
-
-
|
11
|
-
version: 0.7.6.
|
10
|
+
- 7
|
11
|
+
version: 0.7.6.7
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- ippa
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-
|
19
|
+
date: 2010-08-11 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
hash: -
|
46
|
+
hash: -389188292
|
47
47
|
segments:
|
48
48
|
- 2
|
49
49
|
- 0
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- examples/example21.yml
|
124
124
|
- examples/example21_sidescroller_with_edit.rb
|
125
125
|
- examples/example22_text.rb
|
126
|
+
- examples/example23_chipmunk.rb
|
126
127
|
- examples/example2_gamestate_basics.rb
|
127
128
|
- examples/example3_parallax.rb
|
128
129
|
- examples/example4_gamestates.rb
|
@@ -185,6 +186,7 @@ files:
|
|
185
186
|
- lib/chingu/fpscounter.rb
|
186
187
|
- lib/chingu/game_object.rb
|
187
188
|
- lib/chingu/game_object_list.rb
|
189
|
+
- lib/chingu/game_object_map.rb
|
188
190
|
- lib/chingu/game_state.rb
|
189
191
|
- lib/chingu/game_state_manager.rb
|
190
192
|
- lib/chingu/game_states/debug.rb
|
@@ -198,6 +200,7 @@ files:
|
|
198
200
|
- lib/chingu/helpers/gfx.rb
|
199
201
|
- lib/chingu/helpers/input_client.rb
|
200
202
|
- lib/chingu/helpers/input_dispatcher.rb
|
203
|
+
- lib/chingu/helpers/options_setter.rb
|
201
204
|
- lib/chingu/helpers/rotation_center.rb
|
202
205
|
- lib/chingu/high_score_list.rb
|
203
206
|
- lib/chingu/inflector.rb
|
@@ -215,6 +218,7 @@ files:
|
|
215
218
|
- lib/chingu/traits/collision_detection.rb
|
216
219
|
- lib/chingu/traits/effect.rb
|
217
220
|
- lib/chingu/traits/retrofy.rb
|
221
|
+
- lib/chingu/traits/sprite.rb
|
218
222
|
- lib/chingu/traits/timer.rb
|
219
223
|
- lib/chingu/traits/velocity.rb
|
220
224
|
- lib/chingu/traits/viewport.rb
|
@@ -222,6 +226,7 @@ files:
|
|
222
226
|
- lib/chingu/window.rb
|
223
227
|
- spec/chingu/fpscounter_spec.rb
|
224
228
|
- spec/chingu/game_object_spec.rb
|
229
|
+
- spec/chingu/helpers/options_setter_spec.rb
|
225
230
|
- spec/chingu/inflector_spec.rb
|
226
231
|
- spec/chingu/rect_20x20.png
|
227
232
|
- spec/chingu/text_spec.rb
|
@@ -264,6 +269,7 @@ summary: OpenGL accelerated 2D game framework for Ruby
|
|
264
269
|
test_files:
|
265
270
|
- spec/chingu/fpscounter_spec.rb
|
266
271
|
- spec/chingu/game_object_spec.rb
|
272
|
+
- spec/chingu/helpers/options_setter_spec.rb
|
267
273
|
- spec/chingu/inflector_spec.rb
|
268
274
|
- spec/chingu/text_spec.rb
|
269
275
|
- spec/spec_helper.rb
|
@@ -281,6 +287,7 @@ test_files:
|
|
281
287
|
- examples/example20_trait_inheritence_test.rb
|
282
288
|
- examples/example21_sidescroller_with_edit.rb
|
283
289
|
- examples/example22_text.rb
|
290
|
+
- examples/example23_chipmunk.rb
|
284
291
|
- examples/example2_gamestate_basics.rb
|
285
292
|
- examples/example3_parallax.rb
|
286
293
|
- examples/example4_gamestates.rb
|