Merge branch 'GoaLitiuM-physicsscene_change_fix'

This commit is contained in:
Wojtek Figat
2024-03-14 17:32:05 +01:00
6 changed files with 10 additions and 7 deletions

View File

@@ -569,7 +569,7 @@ void RigidBody::OnTransformChanged()
void RigidBody::OnPhysicsSceneChanged(PhysicsScene* previous)
{
PhysicsBackend::RemoveSceneActor(previous->GetPhysicsScene(), _actor);
PhysicsBackend::RemoveSceneActor(previous->GetPhysicsScene(), _actor, true);
void* scene = GetPhysicsScene()->GetPhysicsScene();
PhysicsBackend::AddSceneActor(scene, _actor);
const bool putToSleep = !_startAwake && GetEnableSimulation() && !GetIsKinematic() && IsActiveInHierarchy();

View File

@@ -438,7 +438,7 @@ void Collider::OnPhysicsSceneChanged(PhysicsScene* previous)
if (_staticActor != nullptr)
{
PhysicsBackend::RemoveSceneActor(previous->GetPhysicsScene(), _staticActor);
PhysicsBackend::RemoveSceneActor(previous->GetPhysicsScene(), _staticActor, true);
void* scene = GetPhysicsScene()->GetPhysicsScene();
PhysicsBackend::AddSceneActor(scene, _staticActor);
}

View File

@@ -1998,11 +1998,14 @@ void PhysicsBackend::AddSceneActor(void* scene, void* actor)
FlushLocker.Unlock();
}
void PhysicsBackend::RemoveSceneActor(void* scene, void* actor)
void PhysicsBackend::RemoveSceneActor(void* scene, void* actor, bool immediately)
{
auto scenePhysX = (ScenePhysX*)scene;
FlushLocker.Lock();
scenePhysX->RemoveActors.Add((PxActor*)actor);
if (immediately)
scenePhysX->Scene->removeActor(*(PxActor*)actor);
else
scenePhysX->RemoveActors.Add((PxActor*)actor);
FlushLocker.Unlock();
}

View File

@@ -113,7 +113,7 @@ public:
static void SetSceneBounceThresholdVelocity(void* scene, float value);
static void SetSceneOrigin(void* scene, const Vector3& oldOrigin, const Vector3& newOrigin);
static void AddSceneActor(void* scene, void* actor);
static void RemoveSceneActor(void* scene, void* actor);
static void RemoveSceneActor(void* scene, void* actor, bool immediately = false);
static void AddSceneActorAction(void* scene, void* actor, ActionType action);
#if COMPILE_WITH_PROFILER
static void GetSceneStatistics(void* scene, PhysicsStatistics& result);

View File

@@ -115,7 +115,7 @@ void PhysicsBackend::AddSceneActor(void* scene, void* actor)
{
}
void PhysicsBackend::RemoveSceneActor(void* scene, void* actor)
void PhysicsBackend::RemoveSceneActor(void* scene, void* actor, bool immediately)
{
}

View File

@@ -2582,7 +2582,7 @@ void TerrainPatch::Deserialize(DeserializeStream& stream, ISerializeModifier* mo
void TerrainPatch::OnPhysicsSceneChanged(PhysicsScene* previous)
{
PhysicsBackend::RemoveSceneActor(previous->GetPhysicsScene(), _physicsActor);
PhysicsBackend::RemoveSceneActor(previous->GetPhysicsScene(), _physicsActor, true);
void* scene = _terrain->GetPhysicsScene()->GetPhysicsScene();
PhysicsBackend::AddSceneActor(scene, _physicsActor);
}