Module: Engine::Physics::PhysicsResolver

Defined in:
lib/engine/physics/physics_resolver.rb

Class Method Summary collapse

Class Method Details

.apply_collisions(rigidbody) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/engine/physics/physics_resolver.rb', line 37

def self.apply_collisions(rigidbody)
  other_colliders = colliders.reject { |c| rigidbody.colliders.include?(c) }

  rigidbody.colliders.map do |collider|
    other_colliders.map do |other_collider|
      collider.collision_for(other_collider)
    end.compact
  end.flatten.each do |collision|
    rigidbody.apply_impulse(collision.impulse, collision.point)
  end
end

.collidersObject



15
16
17
# File 'lib/engine/physics/physics_resolver.rb', line 15

def self.colliders
  @cached_colliders ||= []
end

.register_collider(collider) ⇒ Object



27
28
29
# File 'lib/engine/physics/physics_resolver.rb', line 27

def self.register_collider(collider)
  colliders << collider
end

.register_rigidbody(rigidbody) ⇒ Object



19
20
21
# File 'lib/engine/physics/physics_resolver.rb', line 19

def self.register_rigidbody(rigidbody)
  rigidbodies << rigidbody
end

.resolveObject



5
6
7
8
9
# File 'lib/engine/physics/physics_resolver.rb', line 5

def self.resolve
  rigidbodies.each do |rb|
    apply_collisions(rb)
  end
end

.rigidbodiesObject



11
12
13
# File 'lib/engine/physics/physics_resolver.rb', line 11

def self.rigidbodies
  @cached_rigidbodies ||= []
end

.unregister_collider(collider) ⇒ Object



31
32
33
# File 'lib/engine/physics/physics_resolver.rb', line 31

def self.unregister_collider(collider)
  colliders.delete(collider)
end

.unregister_rigidbody(rigidbody) ⇒ Object



23
24
25
# File 'lib/engine/physics/physics_resolver.rb', line 23

def self.unregister_rigidbody(rigidbody)
  rigidbodies.delete(rigidbody)
end