36 lines
1014 B
C++
36 lines
1014 B
C++
#include <destrum/Physics/PhysicsSceneBridge.h>
|
|
|
|
#include <destrum/Components/Physics/Rigidbody.h>
|
|
#include <destrum/ObjectModel/GameObject.h>
|
|
|
|
PhysicsSceneBridge::PhysicsSceneBridge(std::unique_ptr<PhysicsWorld> world)
|
|
: m_World(std::move(world)) {
|
|
}
|
|
|
|
void PhysicsSceneBridge::RegisterGameObject(GameObject& object) {
|
|
if (auto* rb = object.GetComponent<Rigidbody>()) {
|
|
if (!rb->HasPhysicsBody()) {
|
|
m_World->RegisterRigidbody(*rb);
|
|
}
|
|
}
|
|
}
|
|
|
|
void PhysicsSceneBridge::UnregisterGameObject(GameObject& object) {
|
|
if (auto* rb = object.GetComponent<Rigidbody>()) {
|
|
if (rb->HasPhysicsBody()) {
|
|
m_World->UnregisterRigidbody(*rb);
|
|
}
|
|
}
|
|
}
|
|
|
|
void PhysicsSceneBridge::FixedUpdate(float fixedDt) {
|
|
if (auto* simple = dynamic_cast<SimplePhysicsWorld*>(m_World.get())) {
|
|
simple->SyncKinematicBodiesToPhysics();
|
|
simple->Step(fixedDt);
|
|
simple->SyncDynamicBodiesToTransforms();
|
|
return;
|
|
}
|
|
|
|
m_World->Step(fixedDt);
|
|
}
|