Module: Chingu::Traits::CollisionDetection::ClassMethods
- Defined in:
- lib/chingu/traits/collision_detection.rb
Instance Method Summary collapse
-
#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_collsion but with inline-code for speedups.
Instance Method Details
#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
143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/chingu/traits/collision_detection.rb', line 143 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.all.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_collsion but with inline-code for speedups
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/chingu/traits/collision_detection.rb', line 119 def each_radius_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 distance(object1.x, object1.y, object2.x, object2.y) < object1.radius end end end end |