Module: Chingu::Traits::CollisionDetection::ClassMethods
- Defined in:
- lib/chingu/traits/collision_detection.rb
Instance Method Summary collapse
-
#each_bounding_box_collision(klasses = []) ⇒ Object
Works like each_collsion but with explicit bounding_box collisions (inline-code for speedups).
-
#each_collision(klasses = []) ⇒ Object
Class method that will check for collisions between all instances of two classes and yield the 2 colliding game object instances.
-
#each_radius_collision(klasses = []) ⇒ Object
Works like each_collision but with inline-code for speedups.
Instance Method Details
#each_bounding_box_collision(klasses = []) ⇒ Object
Works like each_collsion but with explicit bounding_box collisions (inline-code for speedups)
159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/chingu/traits/collision_detection.rb', line 159 def each_bounding_box_collision(klasses = []) Array(klasses).each do |klass| object2_list = klass.all self.all.each do |object1| object2_list.each do |object2| next if object1 == object2 # Don't collide objects with themselves yield object1, object2 if object1.bounding_box.collide_rect?(object2.bounding_box) end end end end |
#each_collision(klasses = []) ⇒ Object
Class method that will check for collisions between all instances of two classes and yield the 2 colliding game object instances.
It will not collide objects with themselves.
example:
Enemy.each_collision(Bullet).each do |enemy, bullet| enemy.die!; end
182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/chingu/traits/collision_detection.rb', line 182 def each_collision(klasses = []) # Make sure klasses is always an array. Array(klasses).each do |klass| object2_list = klass.all self.all.each do |object1| object2_list.each do |object2| next if object1 == object2 # Don't collide objects with themselves yield object1, object2 if object1.collides?(object2) end end end end |
#each_radius_collision(klasses = []) ⇒ Object
Works like each_collision but with inline-code for speedups
142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/chingu/traits/collision_detection.rb', line 142 def each_radius_collision(klasses = []) Array(klasses).each do |klass| object2_list = klass.all #total_radius = object1.radius + object2.radius # possible optimization? self.all.each do |object1| object2_list.each do |object2| next if object1 == object2 # Don't collide objects with themselves yield object1, object2 if distance(object1.x, object1.y, object2.x, object2.y) < object1.radius + object2.radius end end end end |