RemoveSimulatedBody automatically updates the requested handle to be invalid once removed. (#740)
This commit is contained in:
@@ -88,13 +88,13 @@ namespace AzPhysics
|
||||
|
||||
//! Remove a simulated body from the Scene.z
|
||||
//! @param sceneHandle A handle to the scene to remove the requested simulated body.
|
||||
//! @param bodyHandle A handle to the simulated body being removed.
|
||||
virtual void RemoveSimulatedBody(SceneHandle sceneHandle, SimulatedBodyHandle bodyHandle) = 0;
|
||||
//! @param bodyHandle A handle to the simulated body being removed. This will be set to AzPhysics::InvalidSimulatedBodyHandle as they're no longer valid.
|
||||
virtual void RemoveSimulatedBody(SceneHandle sceneHandle, SimulatedBodyHandle& bodyHandle) = 0;
|
||||
|
||||
//! Remove a list of simulated bodies from the Scene.
|
||||
//! @param sceneHandle A handle to the scene to remove the simulated bodies from.
|
||||
//! @param bodyHandles A list of simulated body handles to be removed.
|
||||
virtual void RemoveSimulatedBodies(SceneHandle sceneHandle, const SimulatedBodyHandleList& bodyHandles) = 0;
|
||||
//! @param bodyHandles A list of simulated body handles to be removed. All handles will be set to AzPhysics::InvalidSimulatedBodyHandle as they're no longer valid.
|
||||
virtual void RemoveSimulatedBodies(SceneHandle sceneHandle, SimulatedBodyHandleList& bodyHandles) = 0;
|
||||
|
||||
//! Enable / Disable simulation of the requested body. By default all bodies added are enabled.
|
||||
//! Disabling simulation the body will no longer be affected by any forces, collisions, or found with scene queries.
|
||||
@@ -286,12 +286,12 @@ namespace AzPhysics
|
||||
virtual SimulatedBodyList GetSimulatedBodiesFromHandle(const SimulatedBodyHandleList& bodyHandles) = 0;
|
||||
|
||||
//! Remove a simulated body from the Scene.
|
||||
//! @param bodyHandle A handle to the simulated body being removed.
|
||||
virtual void RemoveSimulatedBody(SimulatedBodyHandle bodyHandle) = 0;
|
||||
//! @param bodyHandle A handle to the simulated body being removed. This will be set to AzPhysics::InvalidSimulatedBodyHandle as they're no longer valid.
|
||||
virtual void RemoveSimulatedBody(SimulatedBodyHandle& bodyHandle) = 0;
|
||||
|
||||
//! Remove a list of simulated bodies from the Scene.
|
||||
//! @param bodyHandles A list of simulated body handles to be removed.
|
||||
virtual void RemoveSimulatedBodies(const SimulatedBodyHandleList& bodyHandles) = 0;
|
||||
//! @param bodyHandles A list of simulated body handles to be removed. All handles will be set to AzPhysics::InvalidSimulatedBodyHandle as they're no longer valid.
|
||||
virtual void RemoveSimulatedBodies(SimulatedBodyHandleList& bodyHandles) = 0;
|
||||
|
||||
//! Enable / Disable simulation of the requested body. By default all bodies added are enabled.
|
||||
//! Disabling simulation the body will no longer be affected by any forces, collisions, or found with scene queries.
|
||||
|
||||
@@ -92,10 +92,10 @@ namespace Physics
|
||||
[[maybe_unused]] bool enable) override {}
|
||||
void RemoveSimulatedBody(
|
||||
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandle& bodyHandle) override {}
|
||||
void RemoveSimulatedBodies(
|
||||
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
|
||||
[[maybe_unused]] const AzPhysics::SimulatedBodyHandleList& bodyHandles) override {}
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandleList& bodyHandles) override {}
|
||||
void EnableSimulationOfBody(
|
||||
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
|
||||
|
||||
@@ -405,7 +405,6 @@ namespace PhysX
|
||||
if (m_sceneInterface)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorBodyHandle);
|
||||
m_editorBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -579,7 +578,6 @@ namespace PhysX
|
||||
if (m_sceneInterface && m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorBodyHandle);
|
||||
m_editorBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -634,7 +632,6 @@ namespace PhysX
|
||||
if (m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorBodyHandle);
|
||||
m_editorBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
|
||||
m_editorBodyHandle = m_sceneInterface->AddSimulatedBody(m_editorSceneHandle, &configuration);
|
||||
@@ -1051,7 +1048,6 @@ namespace PhysX
|
||||
if (m_sceneInterface && m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorBodyHandle);
|
||||
m_editorBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -283,7 +283,6 @@ namespace PhysX
|
||||
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorRigidBodyHandle);
|
||||
m_editorRigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,7 +427,6 @@ namespace PhysX
|
||||
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorRigidBodyHandle);
|
||||
m_editorRigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
|
||||
CreateEditorWorldRigidBody();
|
||||
}
|
||||
|
||||
@@ -271,7 +271,6 @@ namespace PhysX
|
||||
if (m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorBodyHandle);
|
||||
m_editorBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
|
||||
m_editorBodyHandle = m_sceneInterface->AddSimulatedBody(m_editorSceneHandle, &configuration);
|
||||
@@ -681,7 +680,6 @@ namespace PhysX
|
||||
if (m_sceneInterface && m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_editorBodyHandle);
|
||||
m_editorBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -343,7 +343,6 @@ namespace PhysX
|
||||
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_sceneOwner, m_shadowBodyHandle);
|
||||
m_shadowBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
m_shadowBody = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +163,6 @@ namespace PhysX
|
||||
sceneInterface->RemoveSimulatedBody(m_sceneOwner, m_rigidBodyHandle);
|
||||
}
|
||||
m_rigidBody = nullptr;
|
||||
m_rigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
m_sceneOwner = AzPhysics::InvalidSceneHandle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +184,6 @@ namespace PhysX
|
||||
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_attachedSceneHandle, m_rigidBodyHandle);
|
||||
m_rigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
|
||||
Physics::RigidBodyRequestBus::Handler::BusDisconnect();
|
||||
|
||||
@@ -729,7 +729,7 @@ namespace PhysX
|
||||
return results;
|
||||
}
|
||||
|
||||
void PhysXScene::RemoveSimulatedBody(AzPhysics::SimulatedBodyHandle bodyHandle)
|
||||
void PhysXScene::RemoveSimulatedBody(AzPhysics::SimulatedBodyHandle& bodyHandle)
|
||||
{
|
||||
if (bodyHandle == AzPhysics::InvalidSimulatedBodyHandle)
|
||||
{
|
||||
@@ -751,10 +751,12 @@ namespace PhysX
|
||||
m_deferredDeletions.push_back(m_simulatedBodies[index].second);
|
||||
m_simulatedBodies[index] = AZStd::make_pair(AZ::Crc32(), nullptr);
|
||||
m_freeSceneSlots.push(index);
|
||||
|
||||
bodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
}
|
||||
|
||||
void PhysXScene::RemoveSimulatedBodies(const AzPhysics::SimulatedBodyHandleList& bodyHandles)
|
||||
void PhysXScene::RemoveSimulatedBodies(AzPhysics::SimulatedBodyHandleList& bodyHandles)
|
||||
{
|
||||
for (auto& handle: bodyHandles)
|
||||
{
|
||||
|
||||
@@ -48,8 +48,8 @@ namespace PhysX
|
||||
AzPhysics::SimulatedBodyHandleList AddSimulatedBodies(const AzPhysics::SimulatedBodyConfigurationList& simulatedBodyConfigs) override;
|
||||
AzPhysics::SimulatedBody* GetSimulatedBodyFromHandle(AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
AzPhysics::SimulatedBodyList GetSimulatedBodiesFromHandle(const AzPhysics::SimulatedBodyHandleList& bodyHandles) override;
|
||||
void RemoveSimulatedBody(AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
void RemoveSimulatedBodies(const AzPhysics::SimulatedBodyHandleList& bodyHandles) override;
|
||||
void RemoveSimulatedBody(AzPhysics::SimulatedBodyHandle& bodyHandle) override;
|
||||
void RemoveSimulatedBodies(AzPhysics::SimulatedBodyHandleList& bodyHandles) override;
|
||||
void EnableSimulationOfBody(AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
void DisableSimulationOfBody(AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
AzPhysics::SceneQueryHits QueryScene(const AzPhysics::SceneQueryRequest* request) override;
|
||||
|
||||
@@ -112,7 +112,7 @@ namespace PhysX
|
||||
return {}; //return an empty list
|
||||
}
|
||||
|
||||
void PhysXSceneInterface::RemoveSimulatedBody(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle bodyHandle)
|
||||
void PhysXSceneInterface::RemoveSimulatedBody(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle& bodyHandle)
|
||||
{
|
||||
if (AzPhysics::Scene* scene = m_physxSystem->GetScene(sceneHandle))
|
||||
{
|
||||
@@ -120,7 +120,7 @@ namespace PhysX
|
||||
}
|
||||
}
|
||||
|
||||
void PhysXSceneInterface::RemoveSimulatedBodies(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyHandleList& bodyHandles)
|
||||
void PhysXSceneInterface::RemoveSimulatedBodies(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandleList& bodyHandles)
|
||||
{
|
||||
if (AzPhysics::Scene* scene = m_physxSystem->GetScene(sceneHandle))
|
||||
{
|
||||
|
||||
@@ -40,8 +40,8 @@ namespace PhysX
|
||||
AzPhysics::SimulatedBodyHandleList AddSimulatedBodies(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyConfigurationList& simulatedBodyConfigs) override;
|
||||
AzPhysics::SimulatedBody* GetSimulatedBodyFromHandle(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
AzPhysics::SimulatedBodyList GetSimulatedBodiesFromHandle(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyHandleList& bodyHandles) override;
|
||||
void RemoveSimulatedBody(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
void RemoveSimulatedBodies(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyHandleList& bodyHandles) override;
|
||||
void RemoveSimulatedBody(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle& bodyHandle) override;
|
||||
void RemoveSimulatedBodies(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandleList& bodyHandles) override;
|
||||
void EnableSimulationOfBody(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
void DisableSimulationOfBody(AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle bodyHandle) override;
|
||||
AzPhysics::SceneQueryHits QueryScene(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SceneQueryRequest* request) override;
|
||||
|
||||
@@ -117,7 +117,6 @@ namespace PhysX
|
||||
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_attachedSceneHandle, m_staticRigidBodyHandle);
|
||||
m_staticRigidBodyHandle = AzPhysics::InvalidSceneHandle;
|
||||
}
|
||||
|
||||
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
|
||||
|
||||
@@ -129,10 +129,8 @@ namespace PhysX::Benchmarks
|
||||
for (int i = 0; i < NumCylinderSide; i++)
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_sceneHandle, m_cylinder[i]);
|
||||
m_cylinder[i] = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
sceneInterface->RemoveSimulatedBody(m_sceneHandle, m_blade);
|
||||
m_blade = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
m_sceneHandle = AzPhysics::InvalidSceneHandle;
|
||||
}
|
||||
|
||||
@@ -404,10 +404,7 @@ namespace PhysX::Benchmarks
|
||||
}
|
||||
subTickTracker.Stop();
|
||||
|
||||
for (auto handle : snakeRigidBodyHandles)
|
||||
{
|
||||
m_defaultScene->RemoveSimulatedBody(handle);
|
||||
}
|
||||
m_defaultScene->RemoveSimulatedBodies(snakeRigidBodyHandles);
|
||||
snakeRigidBodyHandles.clear();
|
||||
|
||||
//sort the frame times and get the P50, P90, P99 percentiles
|
||||
|
||||
@@ -233,10 +233,7 @@ namespace PhysX::Benchmarks
|
||||
subTickTracker.Stop();
|
||||
|
||||
//object clean up
|
||||
for (auto handle : rigidBodies)
|
||||
{
|
||||
m_defaultScene->RemoveSimulatedBody(handle);
|
||||
}
|
||||
m_defaultScene->RemoveSimulatedBodies(rigidBodies);
|
||||
rigidBodies.clear();
|
||||
|
||||
//sort the frame times and get the P50, P90, P99 percentiles
|
||||
@@ -310,10 +307,7 @@ namespace PhysX::Benchmarks
|
||||
|
||||
//object clean up
|
||||
washingMachine.TearDownWashingMachine();
|
||||
for (auto handle : rigidBodies)
|
||||
{
|
||||
m_defaultScene->RemoveSimulatedBody(handle);
|
||||
}
|
||||
m_defaultScene->RemoveSimulatedBodies(rigidBodies);
|
||||
rigidBodies.clear();
|
||||
|
||||
//sort the frame times and get the P50, P90, P99 percentiles
|
||||
@@ -465,10 +459,7 @@ namespace PhysX::Benchmarks
|
||||
//object clean up
|
||||
collisionHandlers.clear();
|
||||
washingMachine.TearDownWashingMachine();
|
||||
for (auto handle : rigidBodies)
|
||||
{
|
||||
m_defaultScene->RemoveSimulatedBody(handle);
|
||||
}
|
||||
m_defaultScene->RemoveSimulatedBodies(rigidBodies);
|
||||
rigidBodies.clear();
|
||||
|
||||
//sort the frame times and get the P50, P90, P99 percentiles
|
||||
|
||||
@@ -237,13 +237,17 @@ namespace PhysX
|
||||
|
||||
//select 1 to remove
|
||||
AzPhysics::SimulatedBodyHandle removedSelection = simBodyHandles[simBodyHandles.size() / 2];
|
||||
const AzPhysics::SimulatedBodyIndex removedIndex = AZStd::get<AzPhysics::HandleTypeIndex::Index>(removedSelection);
|
||||
sceneInterface->RemoveSimulatedBody(m_testSceneHandle, removedSelection);
|
||||
|
||||
// The removedSelection handle should be set to invalid in RemoveSimulatedBody
|
||||
EXPECT_EQ(removedSelection, AzPhysics::InvalidSimulatedBodyHandle);
|
||||
|
||||
//add a new one.
|
||||
AzPhysics::SimulatedBodyHandle newSimBodyHandle = sceneInterface->AddSimulatedBody(m_testSceneHandle, &config);
|
||||
|
||||
//The old and new handle should share an index as the freed slot will be used
|
||||
EXPECT_EQ(AZStd::get<AzPhysics::HandleTypeIndex::Index>(removedSelection),
|
||||
EXPECT_EQ(removedIndex,
|
||||
AZStd::get<AzPhysics::HandleTypeIndex::Index>(newSimBodyHandle));
|
||||
}
|
||||
|
||||
@@ -287,9 +291,10 @@ namespace PhysX
|
||||
EXPECT_EQ(simBodyHandle, addEventSimBodyHandle);
|
||||
|
||||
//remove the body
|
||||
const AzPhysics::SimulatedBodyHandle removedHandle = simBodyHandle; //copy the handle as RemoveSimulatedBody will mark it invalid.
|
||||
sceneInterface->RemoveSimulatedBody(m_testSceneHandle, simBodyHandle);
|
||||
EXPECT_TRUE(removedTriggered);
|
||||
EXPECT_EQ(simBodyHandle, removeEventSimBodyHandle);
|
||||
EXPECT_EQ(removedHandle, removeEventSimBodyHandle);
|
||||
}
|
||||
|
||||
TEST_F(PhysXSceneFixture, StartFinishSimulationEvents_triggerAsExpected)
|
||||
|
||||
@@ -882,7 +882,6 @@ namespace PhysX
|
||||
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
|
||||
{
|
||||
sceneInterface->RemoveSimulatedBody(m_testSceneHandle, rigidBodyHandle);
|
||||
rigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
rigidBody = nullptr;
|
||||
}
|
||||
|
||||
@@ -90,10 +90,10 @@ namespace ScriptCanvasPhysicsTests
|
||||
[[maybe_unused]] bool enable) override {}
|
||||
void RemoveSimulatedBody(
|
||||
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandle& bodyHandle) override {}
|
||||
void RemoveSimulatedBodies(
|
||||
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
|
||||
[[maybe_unused]] const AzPhysics::SimulatedBodyHandleList& bodyHandles) override {}
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandleList& bodyHandles) override {}
|
||||
void EnableSimulationOfBody(
|
||||
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
|
||||
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
|
||||
|
||||
@@ -163,7 +163,6 @@ namespace WhiteBox
|
||||
if (m_sceneInterface)
|
||||
{
|
||||
m_sceneInterface->RemoveSimulatedBody(m_editorSceneHandle, m_rigidBodyHandle);
|
||||
m_rigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -132,7 +132,6 @@ namespace WhiteBox
|
||||
sceneInterface->RemoveSimulatedBody(defaultScene, m_simulatedBodyHandle);
|
||||
}
|
||||
}
|
||||
m_simulatedBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
|
||||
}
|
||||
|
||||
void WhiteBoxColliderComponent::OnTransformChanged(
|
||||
|
||||
Reference in New Issue
Block a user