diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index 93ee09295..d6c5e82c8 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -1606,6 +1606,24 @@ PxMaterial* PhysicsBackendPhysX::GetDefaultMaterial() return DefaultMaterial; } +void PhysicsBackendPhysX::SimulationStepDone(PxScene* scene, float dt) +{ +#if WITH_VEHICLE + ScenePhysX* scenePhysX = nullptr; + for (auto e : Physics::Scenes) + { + if (((ScenePhysX*)e->GetPhysicsScene())->Scene == scene) + { + scenePhysX = (ScenePhysX*)e->GetPhysicsScene(); + break; + } + } + if (!scenePhysX) + return; + scenePhysX->UpdateVehicles(dt); +#endif +} + bool PhysicsBackend::Init() { #define CHECK_INIT(value, msg) if (!value) { LOG(Error, msg); return true; } @@ -1895,10 +1913,6 @@ void PhysicsBackend::EndSimulateScene(void* scene) scenePhysX->Stepper.wait(scenePhysX->Scene); } -#if WITH_VEHICLE - scenePhysX->UpdateVehicles(scenePhysX->LastDeltaTime); -#endif - { PROFILE_CPU_NAMED("Physics.FlushActiveTransforms"); diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.h b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.h index 7267058f9..f7f245abd 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.h +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.h @@ -18,6 +18,7 @@ public: static PxCooking* GetCooking(); #endif static PxMaterial* GetDefaultMaterial(); + static void SimulationStepDone(PxScene* scene, float dt); }; #endif diff --git a/Source/Engine/Physics/PhysX/PhysicsStepperPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsStepperPhysX.cpp index dc303c89f..155642ba6 100644 --- a/Source/Engine/Physics/PhysX/PhysicsStepperPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsStepperPhysX.cpp @@ -3,7 +3,7 @@ #if COMPILE_WITH_PHYSX #include "PhysicsStepperPhysX.h" -#include "Engine/Physics/Physics.h" +#include "PhysicsBackendPhysX.h" #include "Engine/Profiler/ProfilerCPU.h" #include #include @@ -66,7 +66,7 @@ void MultiThreadStepper::substepDone(StepperTask* ownerTask) } // -> OnSubstep - //Physics::OnSubstep(); + PhysicsBackendPhysX::SimulationStepDone(mScene, mSubStepSize); if (mCurrentSubStep >= mNbSubSteps) {