feat: add moving platform support + fix jolt
This commit is contained in:
@@ -548,7 +548,7 @@ public:
|
||||
return events;
|
||||
}
|
||||
|
||||
void SyncKinematicBodiesToPhysics()
|
||||
void SyncKinematicBodiesToPhysics(float fixedDt)
|
||||
{
|
||||
BodyInterface& bodyInterface = m_PhysicsSystem.GetBodyInterface();
|
||||
|
||||
@@ -562,11 +562,11 @@ public:
|
||||
|
||||
Transform& transform = record.desc.owner->GetTransform();
|
||||
|
||||
bodyInterface.SetPositionAndRotation(
|
||||
bodyInterface.MoveKinematic(
|
||||
record.bodyID,
|
||||
ToJoltRVec3(transform.GetWorldPosition()),
|
||||
ToJoltQuat(transform.GetWorldRotation()),
|
||||
EActivation::Activate);
|
||||
fixedDt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -819,9 +819,9 @@ void JoltPhysicsWorld::Step(float fixedDt)
|
||||
m_Impl->Step(fixedDt);
|
||||
}
|
||||
|
||||
void JoltPhysicsWorld::SyncKinematicBodiesToPhysics()
|
||||
void JoltPhysicsWorld::SyncKinematicBodiesToPhysics(float fixedDt)
|
||||
{
|
||||
m_Impl->SyncKinematicBodiesToPhysics();
|
||||
m_Impl->SyncKinematicBodiesToPhysics(fixedDt);
|
||||
}
|
||||
|
||||
void JoltPhysicsWorld::SyncDynamicBodiesToTransforms()
|
||||
|
||||
@@ -35,7 +35,7 @@ void PhysicsSceneBridge::RefreshGameObject(GameObject& object) {
|
||||
|
||||
void PhysicsSceneBridge::FixedUpdate(float fixedDt) {
|
||||
if (!m_World) return;
|
||||
m_World->SyncKinematicBodiesToPhysics();
|
||||
m_World->SyncKinematicBodiesToPhysics(fixedDt);
|
||||
m_World->Step(fixedDt);
|
||||
|
||||
for (const auto& event : m_World->ConsumeTriggerEvents()) {
|
||||
|
||||
@@ -115,7 +115,7 @@ void PhysicsWorld::UnregisterRigidbody(Rigidbody& rigidbody) {
|
||||
rigidbody.DetachPhysicsBody();
|
||||
}
|
||||
|
||||
void PhysicsWorld::SyncKinematicBodiesToPhysics() {
|
||||
void PhysicsWorld::SyncKinematicBodiesToPhysics(float) {
|
||||
// Backend-independent sync is intentionally not possible here because
|
||||
// PhysicsWorld does not own the list of active rigidbodies.
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@ void SimplePhysicsWorld::Step(float fixedDt) {
|
||||
m_Bodies.end());
|
||||
}
|
||||
|
||||
void SimplePhysicsWorld::SyncKinematicBodiesToPhysics() {
|
||||
void SimplePhysicsWorld::SyncKinematicBodiesToPhysics(float fixedDt) {
|
||||
for (BodyRecord& body : m_Bodies) {
|
||||
if (!body.alive || body.desc.type != RigidbodyType::Kinematic || !body.desc.owner ||
|
||||
body.desc.owner->IsBeingDestroyed() || !body.desc.owner->IsActiveInHierarchy()) {
|
||||
@@ -146,6 +146,9 @@ void SimplePhysicsWorld::SyncKinematicBodiesToPhysics() {
|
||||
body.previousTransform = body.currentTransform;
|
||||
body.currentTransform.position = transform.GetWorldPosition();
|
||||
body.currentTransform.rotation = transform.GetWorldRotation();
|
||||
body.linearVelocity = fixedDt > 0.0f
|
||||
? (body.currentTransform.position - body.previousTransform.position) / fixedDt
|
||||
: glm::vec3{0.0f};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user