chingu 0.7.7.3 → 0.7.7.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{chingu}
8
- s.version = "0.7.7.3"
8
+ s.version = "0.7.7.4"
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-08-20}
12
+ s.date = %q{2010-08-22}
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 = [
@@ -14,7 +14,7 @@ class Game < Chingu::Window
14
14
  switch_game_state(State1)
15
15
  self.input = {:space => :push, :return => :switch, :esc => :exit}
16
16
  self.caption = "Example of transitional game state FadeTo when switchin between two game states"
17
- transitional_game_state(Chingu::GameStates::FadeTo, :speed => 10)
17
+ transitional_game_state(Chingu::GameStates::FadeTo, {:speed => 5, :debug => true})
18
18
  end
19
19
 
20
20
  def push
@@ -33,7 +33,7 @@ require_all "#{CHINGU_ROOT}/chingu/traits"
33
33
  require_all "#{CHINGU_ROOT}/chingu"
34
34
 
35
35
  module Chingu
36
- VERSION = "0.7.7.3"
36
+ VERSION = "0.7.7.4"
37
37
 
38
38
  DEBUG_COLOR = Gosu::Color.new(0xFFFF0000)
39
39
  DEBUG_ZORDER = 9999
@@ -53,35 +53,40 @@ module Chingu
53
53
 
54
54
  @game_objects.each do |game_object|
55
55
  puts "#{game_object.class} @ #{game_object.x} / #{game_object.y}" if @debug
56
-
57
- start_x = (game_object.bb.left / @grid[0]).to_i
58
- stop_x = ( (game_object.bb.right-1) / @grid[0] ).to_i
59
-
60
- #if game_object.zorder == 80
61
- # puts "x: #{game_object.x}, y: #{game_object.y}"
62
- # puts "width: #{game_object.width}, height: #{game_object.height}"
63
- # puts "start_x: #{start_x}, stop_x: #{stop_x}"
64
- #end
56
+ insert(game_object)
57
+ end
58
+ end
59
+
60
+ #
61
+ # Insert game_object into the map
62
+ #
63
+ def insert(game_object)
64
+ start_x = ( game_object.bb.left / @grid[0] ).to_i
65
+ stop_x = ( (game_object.bb.right) / @grid[0] ).to_i
65
66
 
67
+ #if game_object.zorder == 80
68
+ # puts "x: #{game_object.x}, y: #{game_object.y}"
69
+ # puts "width: #{game_object.width}, height: #{game_object.height}"
70
+ # puts "start_x: #{start_x}, stop_x: #{stop_x}"
71
+ #end
66
72
 
67
- (start_x .. stop_x).each do |x|
68
- start_y = (game_object.bb.top / @grid[1] ).to_i
69
- stop_y = ( (game_object.bb.bottom-1) / @grid[1] ).to_i
73
+ (start_x ... stop_x).each do |x|
74
+ start_y = (game_object.bb.top / @grid[1] ).to_i
75
+ stop_y = ( (game_object.bb.bottom) / @grid[1] ).to_i
70
76
 
71
- @game_object_positions[game_object] = [(start_x .. stop_x), (start_y .. stop_y)]
77
+ @game_object_positions[game_object] = [(start_x ... stop_x), (start_y ... stop_y)]
72
78
 
73
- @map[x] ||= []
74
- (start_y .. stop_y).each do |y|
75
- @map[x][y] = game_object
76
- end
79
+ @map[x] ||= []
80
+ (start_y ... stop_y).each do |y|
81
+ @map[x][y] = game_object
77
82
  end
78
- end
83
+ end
79
84
  end
80
-
85
+
81
86
  #
82
87
  # Removes a specific game object from the map
83
88
  #
84
- def clear_game_object(game_object)
89
+ def delete(game_object)
85
90
  range_x, range_y = @game_object_positions[game_object]
86
91
 
87
92
  range_x.each do |x|
@@ -90,6 +95,7 @@ module Chingu
90
95
  end
91
96
  end
92
97
  end
98
+ alias :clear_game_object :delete
93
99
 
94
100
  #
95
101
  # Clear game object from the array-map on a certain X/Y
@@ -113,17 +119,34 @@ module Chingu
113
119
  start_x = (game_object.bb.left / @grid[0]).to_i
114
120
  stop_x = (game_object.bb.right / @grid[0]).to_i
115
121
 
116
- (start_x .. stop_x).each do |x|
122
+ (start_x ... stop_x).each do |x|
117
123
  start_y = (game_object.bb.top / @grid[1]).to_i
118
124
  stop_y = (game_object.bb.bottom / @grid[1]).to_i
119
125
 
120
- (start_y .. stop_y).each do |y|
126
+ (start_y ... stop_y).each do |y|
121
127
  return @map[x][y] if @map[x] && @map[x][y]
122
128
  end
123
129
 
124
130
  end
125
131
  return nil
126
132
  end
127
-
133
+
134
+ #
135
+ # Yields each object in the map colliding with the given game object
136
+ #
137
+ def each_collision(game_object)
138
+ start_x = (game_object.bb.left / @grid[0]).to_i
139
+ stop_x = (game_object.bb.right / @grid[0]).to_i
140
+
141
+ (start_x ... stop_x).each do |x|
142
+ start_y = (game_object.bb.top / @grid[1]).to_i
143
+ stop_y = (game_object.bb.bottom / @grid[1]).to_i
144
+
145
+ (start_y ... stop_y).each do |y|
146
+ yield @map[x][y] if @map[x] && @map[x][y] && @map[x][y] != game_object # Don't yield collisions with itself
147
+ end
148
+ end
149
+ end
150
+
128
151
  end
129
152
  end
@@ -49,7 +49,6 @@ module Chingu
49
49
  @game_states = []
50
50
  @transitional_game_state = nil
51
51
  @transitional_game_state_options = {}
52
- @previous_game_state = nil
53
52
  end
54
53
 
55
54
  #
@@ -101,8 +100,6 @@ module Chingu
101
100
  #
102
101
  def switch_game_state(state, options = {})
103
102
  options = {:setup => true, :finalize => true, :transitional => true}.merge(options)
104
-
105
- @previous_game_state = current_game_state
106
103
 
107
104
  new_state = game_state_instance(state)
108
105
 
@@ -124,7 +121,7 @@ module Chingu
124
121
  # If we have a transitional, switch to that instead, with new_state as first argument
125
122
  transitional_game_state = @transitional_game_state.new(new_state, @transitional_game_state_options)
126
123
  transitional_game_state.game_state_manager = self
127
- self.switch_game_state(transitional_game_state, :transitional => false)
124
+ self.push_game_state(transitional_game_state, :transitional => false)
128
125
  else
129
126
  if current_game_state.nil?
130
127
  @game_states << new_state
@@ -147,8 +144,6 @@ module Chingu
147
144
  #
148
145
  def push_game_state(state, options = {})
149
146
  options = {:setup => true, :finalize => true, :transitional => true}.merge(options)
150
-
151
- @previous_game_state = current_game_state
152
147
 
153
148
  new_state = game_state_instance(state)
154
149
 
@@ -195,7 +190,6 @@ module Chingu
195
190
  # Give the soon-to-be-disabled state a chance to clean up by calling finalize() on it.
196
191
  #
197
192
  current_game_state.finalize if current_game_state.respond_to?(:finalize) && options[:finalize]
198
- @previous_game_state = current_game_state
199
193
 
200
194
  #
201
195
  # Activate the game state "bellow" current one with a simple Array.pop
@@ -213,7 +207,7 @@ module Chingu
213
207
  # If we have a transitional, push that instead, with new_state as first argument
214
208
  transitional_game_state = @transitional_game_state.new(current_game_state, @transitional_game_state_options)
215
209
  transitional_game_state.game_state_manager = self
216
- self.switch_game_state(transitional_game_state, :transitional => false)
210
+ self.push_game_state(transitional_game_state, :transitional => false)
217
211
  end
218
212
 
219
213
  ## MOVED: self.inside_state = current_game_state
@@ -225,7 +219,7 @@ module Chingu
225
219
  # Returns the previous game state. Shortcut: "previous"
226
220
  #
227
221
  def previous_game_state
228
- @previous_game_state
222
+ current_game_state.previous_game_state
229
223
  end
230
224
  alias :previous previous_game_state
231
225
 
@@ -36,6 +36,7 @@ module Chingu
36
36
  class FadeTo < Chingu::GameState
37
37
 
38
38
  def initialize(new_game_state, options = {})
39
+ super(options)
39
40
  @options = {:speed => 3, :zorder => INFINITY}.merge(options)
40
41
 
41
42
  @new_game_state = new_game_state
@@ -45,11 +46,12 @@ module Chingu
45
46
 
46
47
  def setup
47
48
  @color = Gosu::Color.new(0,0,0,0)
48
-
49
49
  if previous_game_state
50
+ p "* Setup: fading out" if options[:debug]
50
51
  @fading_in = false
51
52
  @alpha = 0.0
52
53
  else
54
+ p "* Setup: fading in" if options[:debug]
53
55
  @fading_in = true
54
56
  @alpha = 255.0
55
57
  end
@@ -62,7 +64,11 @@ module Chingu
62
64
  @alpha = 0 if @alpha < 0
63
65
  @alpha = 255 if @alpha > 255
64
66
 
65
- @fading_in = true if @alpha == 255
67
+ if @alpha == 255
68
+ @fading_in = true
69
+ p "* Update: fading in" if options[:debug]
70
+ end
71
+
66
72
  @color.alpha = @alpha.to_i
67
73
  @drawn = false
68
74
  end
@@ -52,10 +52,6 @@ module Chingu
52
52
  def current_game_state
53
53
  game_state_manager.current_game_state
54
54
  end
55
-
56
- #def previous_game_state
57
- # game_state_manager.previous_game_state
58
- #end
59
55
 
60
56
  def clear_game_states
61
57
  game_state_manager.clear_game_states
@@ -58,9 +58,11 @@ module Chingu
58
58
 
59
59
  width, height = self.size
60
60
 
61
- if trait_options[:bounding_box][:scale]
62
- width = width * trait_options[:bounding_box][:scale]
63
- height = height * trait_options[:bounding_box][:scale]
61
+ if scale = trait_options[:bounding_box][:scale]
62
+ width_scale, height_scale = scale, scale
63
+ width_scale, height_scale = scale[0], scale[1] if scale.is_a? Array
64
+ width *= width_scale
65
+ height *= height_scale
64
66
  end
65
67
 
66
68
  x = self.x - width * self.center_x
@@ -154,6 +154,20 @@ module Chingu
154
154
 
155
155
 
156
156
  module ClassMethods
157
+ #
158
+ # Yield all objects of this class that is colliding with point x,y
159
+ #
160
+ # Example:
161
+ # Enemy.each_at(sword.x, sword.y) { |enemy| enemy.die }
162
+ #
163
+ def each_at(x,y)
164
+ self.all.each do |object|
165
+ next unless object.collidable
166
+ yield object if object.respond_to?(:bb) && object.bb.collide_point?(x,y)
167
+ yield object if object.respond_to?(:radius) && Gosu.distance(object.x, object.y, x, y) < object.radius
168
+ end
169
+ end
170
+
157
171
  #
158
172
  # Works like each_collision but with inline-code for speedups
159
173
  #
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: 109
4
+ hash: 99
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
9
  - 7
10
- - 3
11
- version: 0.7.7.3
10
+ - 4
11
+ version: 0.7.7.4
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-08-20 00:00:00 +02:00
19
+ date: 2010-08-22 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: 294392976
46
+ hash: 859163661
47
47
  segments:
48
48
  - 2
49
49
  - 0