Module: Chingu::Traits::CollisionDetection::ClassMethods

Defined in:
lib/chingu/traits/collision_detection.rb

Instance Method Summary collapse

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