feat: add moving platform support + fix jolt

This commit is contained in:
2026-10-18 13:34:30 +02:00
parent 65a7310b56
commit 7223e9ce07
15 changed files with 291 additions and 34 deletions
+5 -5
View File
@@ -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()
+1 -1
View File
@@ -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()) {
+1 -1
View File
@@ -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.
}
+4 -1
View File
@@ -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};
}
}