Remove physics world body notification bus (#576)

This commit is contained in:
amzn-sean
2021-05-07 14:12:07 +01:00
committed by GitHub
parent cb44a7ebb2
commit cb4e394784
43 changed files with 203 additions and 192 deletions
@@ -19,44 +19,29 @@
namespace AzPhysics
{
struct SimulatedBody;
}
namespace Physics
{
//! Requests for generic physical world bodies
class WorldBodyRequests
//! Requests for physics simulated body components.
class SimulatedBodyComponentRequests
: public AZ::ComponentBus
{
public:
using MutexType = AZStd::recursive_mutex;
//! Enable physics for this body
//! Enable physics for this body.
virtual void EnablePhysics() = 0;
//! Disable physics for this body
//! Disable physics for this body.
virtual void DisablePhysics() = 0;
//! Retrieve whether physics is enabled for this body
//! Retrieve whether physics is enabled for this body.
virtual bool IsPhysicsEnabled() const = 0;
//! Retrieves the AABB(aligned-axis bounding box) for this body
//! Retrieves the AABB(aligned-axis bounding box) for this body.
virtual AZ::Aabb GetAabb() const = 0;
//! Retrieves current WorldBody* for this body. Note: Do not hold a reference to AzPhysics::SimulatedBody* as could be deleted
virtual AzPhysics::SimulatedBody* GetWorldBody() = 0;
//! Perform a single-object raycast against this body
//! Get the Simulated Body Handle for this body.
virtual AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const = 0;
//! Retrieves current WorldBody* for this body.
//! @note Do not hold a reference to AzPhysics::SimulatedBody* as it could be deleted or moved.
virtual AzPhysics::SimulatedBody* GetSimulatedBody() = 0;
//! Perform a single-object raycast against this body.
virtual AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) = 0;
};
using WorldBodyRequestBus = AZ::EBus<WorldBodyRequests>;
//! Notifications for generic physical world bodies
class WorldBodyNotifications
: public AZ::ComponentBus
{
public:
//! Notification for physics enabled
virtual void OnPhysicsEnabled() = 0;
//! Notification for physics disabled
virtual void OnPhysicsDisabled() = 0;
};
using WorldBodyNotificationBus = AZ::EBus<WorldBodyNotifications>;
using SimulatedBodyComponentRequestsBus = AZ::EBus<SimulatedBodyComponentRequests>;
}
@@ -21,7 +21,7 @@
#include <AzFramework/Physics/ShapeConfiguration.h>
#include <AzCore/Serialization/EditContext.h>
#include <AzFramework/Physics/CollisionBus.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <AzFramework/Physics/WindBus.h>
#include <AzFramework/Physics/PhysicsSystem.h>
#include <AzFramework/Physics/Collision/CollisionEvents.h>
@@ -39,19 +39,19 @@ namespace Physics
{
namespace ReflectionUtils
{
void ReflectWorldBodyBus(AZ::ReflectContext* context)
void ReflectSimulatedBodyComponentRequestsBus(AZ::ReflectContext* context)
{
if (auto* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
{
behaviorContext->EBus<Physics::WorldBodyRequestBus>("WorldBodyRequestBus")
behaviorContext->EBus<AzPhysics::SimulatedBodyComponentRequestsBus>("SimulatedBodyComponentRequestBus")
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
->Attribute(AZ::Script::Attributes::Module, "physics")
->Attribute(AZ::Script::Attributes::Category, "PhysX")
->Event("EnablePhysics", &WorldBodyRequests::EnablePhysics)
->Event("DisablePhysics", &WorldBodyRequests::DisablePhysics)
->Event("IsPhysicsEnabled", &WorldBodyRequests::IsPhysicsEnabled)
->Event("GetAabb", &WorldBodyRequests::GetAabb)
->Event("RayCast", &WorldBodyRequests::RayCast)
->Event("EnablePhysics", &AzPhysics::SimulatedBodyComponentRequests::EnablePhysics)
->Event("DisablePhysics", &AzPhysics::SimulatedBodyComponentRequests::DisablePhysics)
->Event("IsPhysicsEnabled", &AzPhysics::SimulatedBodyComponentRequests::IsPhysicsEnabled)
->Event("GetAabb", &AzPhysics::SimulatedBodyComponentRequests::GetAabb)
->Event("RayCast", &AzPhysics::SimulatedBodyComponentRequests::RayCast)
;
}
}
@@ -131,7 +131,7 @@ namespace Physics
AnimationConfiguration::Reflect(context);
CharacterConfiguration::Reflect(context);
AzPhysics::SimulatedBody::Reflect(context);
ReflectWorldBodyBus(context);
ReflectSimulatedBodyComponentRequestsBus(context);
CollisionFilteringRequests::Reflect(context);
AzPhysics::SceneQuery::ReflectSceneQueryObjects(context);
ReflectWindBus(context);
@@ -213,6 +213,12 @@ set(FILES
StreamingInstall/StreamingInstall.cpp
StreamingInstall/StreamingInstallRequests.h
StreamingInstall/StreamingInstallNotifications.h
Physics/Collision/CollisionEvents.h
Physics/Collision/CollisionEvents.cpp
Physics/Collision/CollisionLayers.h
Physics/Collision/CollisionLayers.cpp
Physics/Collision/CollisionGroups.h
Physics/Collision/CollisionGroups.cpp
Physics/Common/PhysicsSceneQueries.h
Physics/Common/PhysicsSceneQueries.cpp
Physics/Common/PhysicsEvents.h
@@ -223,12 +229,7 @@ set(FILES
Physics/Common/PhysicsSimulatedBodyEvents.h
Physics/Common/PhysicsSimulatedBodyEvents.cpp
Physics/Common/PhysicsTypes.h
Physics/Collision/CollisionEvents.h
Physics/Collision/CollisionEvents.cpp
Physics/Collision/CollisionLayers.h
Physics/Collision/CollisionLayers.cpp
Physics/Collision/CollisionGroups.h
Physics/Collision/CollisionGroups.cpp
Physics/Components/SimulatedBodyComponentBus.h
Physics/Configuration/CollisionConfiguration.h
Physics/Configuration/CollisionConfiguration.cpp
Physics/Configuration/RigidBodyConfiguration.h
@@ -265,7 +266,6 @@ set(FILES
Physics/ShapeConfiguration.h
Physics/ShapeConfiguration.cpp
Physics/SystemBus.h
Physics/WorldBodyBus.h
Physics/ColliderComponentBus.h
Physics/RagdollPhysicsBus.h
Physics/CharacterPhysicsDataBus.h
+2 -2
View File
@@ -51,8 +51,8 @@ namespace Blast
virtual AZ::Transform GetTransform() const = 0;
virtual const BlastFamily& GetFamily() const = 0;
virtual Nv::Blast::TkActor& GetTkActor() const = 0;
virtual AzPhysics::SimulatedBody* GetWorldBody() = 0;
virtual const AzPhysics::SimulatedBody* GetWorldBody() const = 0;
virtual AzPhysics::SimulatedBody* GetSimulatedBody() = 0;
virtual const AzPhysics::SimulatedBody* GetSimulatedBody() const = 0;
virtual const AZ::Entity* GetEntity() const = 0;
virtual const AZStd::vector<uint32_t>& GetChunkIndices() const = 0;
virtual bool IsStatic() const = 0;
@@ -20,7 +20,7 @@
#include <AzFramework/Physics/Shape.h>
#include <AzFramework/Physics/SystemBus.h>
#include <AzFramework/Physics/Utils.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <Blast/BlastActor.h>
#include <Family/BlastFamily.h>
#include <NvBlastExtPxAsset.h>
@@ -164,7 +164,7 @@ namespace Blast
AZ::Transform BlastActorImpl::GetTransform() const
{
return GetWorldBody()->GetTransform();
return GetSimulatedBody()->GetTransform();
}
const BlastFamily& BlastActorImpl::GetFamily() const
@@ -177,19 +177,19 @@ namespace Blast
return m_tkActor;
}
AzPhysics::SimulatedBody* BlastActorImpl::GetWorldBody()
AzPhysics::SimulatedBody* BlastActorImpl::GetSimulatedBody()
{
AzPhysics::SimulatedBody* worldBody = nullptr;
Physics::WorldBodyRequestBus::EventResult(
worldBody, m_entity->GetId(), &Physics::WorldBodyRequests::GetWorldBody);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(
worldBody, m_entity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetSimulatedBody);
return worldBody;
}
const AzPhysics::SimulatedBody* BlastActorImpl::GetWorldBody() const
const AzPhysics::SimulatedBody* BlastActorImpl::GetSimulatedBody() const
{
AzPhysics::SimulatedBody* worldBody = nullptr;
Physics::WorldBodyRequestBus::EventResult(
worldBody, m_entity->GetId(), &Physics::WorldBodyRequests::GetWorldBody);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(
worldBody, m_entity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetSimulatedBody);
return worldBody;
}
@@ -12,7 +12,6 @@
#pragma once
#include <Actor/ShapesProvider.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <Blast/BlastActor.h>
#include <Actor/BlastActorDesc.h>
#include <PhysX/ColliderComponentBus.h>
@@ -45,8 +44,8 @@ namespace Blast
const AZStd::vector<uint32_t>& GetChunkIndices() const override;
bool IsStatic() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
const AzPhysics::SimulatedBody* GetWorldBody() const override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
const AzPhysics::SimulatedBody* GetSimulatedBody() const override;
protected:
//! We want to be able to override this function for testing purposes, because
@@ -11,7 +11,6 @@
*/
#pragma once
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Configuration/RigidBodyConfiguration.h>
#include <PhysX/ColliderComponentBus.h>
@@ -467,7 +467,7 @@ namespace Blast
}
// transform all added lines from local to global
const AZ::Transform& localToGlobal = blastActor->GetWorldBody()->GetTransform();
const AZ::Transform& localToGlobal = blastActor->GetSimulatedBody()->GetTransform();
for (uint32_t i = lineStartIndex; i < debugRenderBuffer.m_lines.size(); i++)
{
DebugLine& line = debugRenderBuffer.m_lines[i];
@@ -485,7 +485,7 @@ namespace Blast
{
for (auto actor : m_family->GetActorTracker().GetActors())
{
auto worldBody = actor->GetWorldBody();
auto worldBody = actor->GetSimulatedBody();
if (actor->IsStatic())
{
AZ::Vector3 gravity = AzPhysics::DefaultGravity;
@@ -74,7 +74,7 @@ namespace Blast
{
if (m_chunkActors[chunkId])
{
m_meshFeatureProcessor->SetTransform(m_chunkMeshHandles[chunkId], m_chunkActors[chunkId]->GetWorldBody()->GetTransform(), m_scale);
m_meshFeatureProcessor->SetTransform(m_chunkMeshHandles[chunkId], m_chunkActors[chunkId]->GetSimulatedBody()->GetTransform(), m_scale);
}
}
}
@@ -22,12 +22,12 @@ namespace Blast
{
m_actors.emplace(actor);
m_entityIdToActor.emplace(actor->GetEntity()->GetId(), actor);
m_bodyToActor.emplace(actor->GetWorldBody(), actor);
m_bodyToActor.emplace(actor->GetSimulatedBody(), actor);
}
void ActorTracker::RemoveActor(BlastActor* actor)
{
m_bodyToActor.erase(actor->GetWorldBody());
m_bodyToActor.erase(actor->GetSimulatedBody());
m_entityIdToActor.erase(actor->GetEntity()->GetId());
m_actors.erase(actor);
}
@@ -179,7 +179,7 @@ namespace Blast
{
return;
}
parentBody = parentActor->GetWorldBody();
parentBody = parentActor->GetSimulatedBody();
const bool parentStatic = parentActor->IsStatic();
@@ -493,7 +493,7 @@ namespace Blast
}
// transform all added lines from local to global
AZ::Transform localToGlobal = blastActor->GetWorldBody()->GetTransform();
AZ::Transform localToGlobal = blastActor->GetSimulatedBody()->GetTransform();
for (uint32_t i = lineStartIndex; i < debugRenderBuffer.m_lines.size(); i++)
{
DebugLine& line = debugRenderBuffer.m_lines[i];
@@ -124,7 +124,7 @@ namespace Blast
AZ::Vector3 DamageManager::TransformToLocal(BlastActor& actor, const AZ::Vector3& globalPosition)
{
const AZ::Transform hitToActorTransform(actor.GetWorldBody()->GetTransform().GetInverse());
const AZ::Transform hitToActorTransform(actor.GetSimulatedBody()->GetTransform().GetInverse());
const AZ::Vector3 hitPos = hitToActorTransform.TransformPoint(globalPosition);
return hitPos;
}
+2 -2
View File
@@ -284,12 +284,12 @@ namespace Blast
return m_transform;
}
AzPhysics::SimulatedBody* GetWorldBody() override
AzPhysics::SimulatedBody* GetSimulatedBody() override
{
return m_worldBody.get();
}
const AzPhysics::SimulatedBody* GetWorldBody() const override
const AzPhysics::SimulatedBody* GetSimulatedBody() const override
{
return m_worldBody.get();
}
@@ -88,7 +88,7 @@ namespace PhysX
Physics::RagdollNode* GetRagdollNode() const;
void SetRagdollNode(Physics::RagdollNode* ragdollNode);
AzPhysics::SimulatedBody* GetWorldBody() const;
AzPhysics::SimulatedBody* GetSimulatedBody() const;
private:
@@ -77,7 +77,7 @@ namespace PhysX
inline AzPhysics::SimulatedBodyHandle ActorData::GetBodyHandle() const
{
AzPhysics::SimulatedBody* body = GetWorldBody();
AzPhysics::SimulatedBody* body = GetSimulatedBody();
if (body)
{
return body->m_bodyHandle;
@@ -125,7 +125,7 @@ namespace PhysX
m_payload.m_ragdollNode = ragdollNode;
}
inline AzPhysics::SimulatedBody* ActorData::GetWorldBody() const
inline AzPhysics::SimulatedBody* ActorData::GetSimulatedBody() const
{
if (m_payload.m_rigidBody)
{
@@ -100,10 +100,9 @@ namespace PhysX
required.push_back(AZ_CRC("TransformService", 0x8ee22c50));
}
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
static void GetIncompatibleServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& incompatible)
{
// Not compatible with cry engine colliders
incompatible.push_back(AZ_CRC("ColliderService", 0x902d4e93));
}
// AZ::Component
@@ -258,9 +258,9 @@ namespace PhysX
{
ActorData* userData = Utils::GetUserData(actor);
Physics::Shape* shape = Utils::GetUserData(pxShape);
if (userData != nullptr && userData->GetWorldBody())
if (userData != nullptr && userData->GetSimulatedBody())
{
return GetPxHitType(m_filterCallback(userData->GetWorldBody(), shape));
return GetPxHitType(m_filterCallback(userData->GetSimulatedBody(), shape));
}
}
return m_hitType;
@@ -387,7 +387,7 @@ namespace PhysX
void EditorColliderComponent::Deactivate()
{
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
m_colliderDebugDraw.Disconnect();
AZ::Data::AssetBus::MultiHandler::BusDisconnect();
m_nonUniformScaleChangedHandler.Disconnect();
@@ -642,7 +642,7 @@ namespace PhysX
m_colliderDebugDraw.ClearCachedGeometry();
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
}
AZ::Data::Asset<Pipeline::MeshAsset> EditorColliderComponent::GetMeshAsset() const
@@ -1072,7 +1072,7 @@ namespace PhysX
return AZ::Aabb::CreateNull();
}
AzPhysics::SimulatedBody* EditorColliderComponent::GetWorldBody()
AzPhysics::SimulatedBody* EditorColliderComponent::GetSimulatedBody()
{
if (m_sceneInterface && m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
{
@@ -1084,6 +1084,11 @@ namespace PhysX
return nullptr;
}
AzPhysics::SimulatedBodyHandle EditorColliderComponent::GetSimulatedBodyHandle() const
{
return m_editorBodyHandle;
}
AzPhysics::SceneQueryHit EditorColliderComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
if (m_sceneInterface && m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle)
@@ -20,7 +20,7 @@
#include <AzFramework/Entity/EntityDebugDisplayBus.h>
#include <AzFramework/Physics/Shape.h>
#include <AzFramework/Physics/ShapeConfiguration.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <AzFramework/Physics/Common/PhysicsEvents.h>
#include <AzFramework/Physics/Common/PhysicsTypes.h>
@@ -105,7 +105,7 @@ namespace PhysX
, private PhysX::ColliderShapeRequestBus::Handler
, private AZ::Render::MeshComponentNotificationBus::Handler
, private PhysX::EditorColliderComponentRequestBus::Handler
, private Physics::WorldBodyRequestBus::Handler
, private AzPhysics::SimulatedBodyComponentRequestsBus::Handler
{
public:
AZ_RTTI(EditorColliderComponent, "{FD429282-A075-4966-857F-D0BBF186CFE6}", AzToolsFramework::Components::EditorComponentBase);
@@ -205,12 +205,13 @@ namespace PhysX
AZ::u32 OnConfigurationChanged();
void UpdateShapeConfigurationScale();
// WorldBodyRequestBus
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
void EnablePhysics() override;
void DisablePhysics() override;
bool IsPhysicsEnabled() const override;
AZ::Aabb GetAabb() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
// Mesh collider
@@ -265,14 +265,14 @@ namespace PhysX
}
CreateEditorWorldRigidBody();
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
}
void EditorRigidBodyComponent::Deactivate()
{
m_debugDisplayDataChangeHandler.Disconnect();
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
m_nonUniformScaleChangedHandler.Disconnect();
m_sceneStartSimHandler.Disconnect();
Physics::ColliderComponentEventBus::Handler::BusDisconnect();
@@ -461,11 +461,16 @@ namespace PhysX
return AZ::Aabb::CreateNull();
}
AzPhysics::SimulatedBody* EditorRigidBodyComponent::GetWorldBody()
AzPhysics::SimulatedBody* EditorRigidBodyComponent::GetSimulatedBody()
{
return m_editorBody;
}
AzPhysics::SimulatedBodyHandle EditorRigidBodyComponent::GetSimulatedBodyHandle() const
{
return m_rigidBodyHandle;
}
AzPhysics::SceneQueryHit EditorRigidBodyComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
if (m_editorBody)
@@ -16,7 +16,7 @@
#include <AzFramework/Entity/EntityDebugDisplayBus.h>
#include <AzFramework/Physics/SimulatedBodies/RigidBody.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <AzFramework/Physics/Common/PhysicsEvents.h>
#include <AzFramework/Physics/Common/PhysicsTypes.h>
@@ -49,7 +49,7 @@ namespace PhysX
, protected AzFramework::EntityDebugDisplayEventBus::Handler
, private AZ::TransformNotificationBus::Handler
, private Physics::ColliderComponentEventBus::Handler
, private Physics::WorldBodyRequestBus::Handler
, private AzPhysics::SimulatedBodyComponentRequestsBus::Handler
{
public:
AZ_EDITOR_COMPONENT(EditorRigidBodyComponent, "{F2478E6B-001A-4006-9D7E-DCB5A6B041DD}", AzToolsFramework::Components::EditorComponentBase);
@@ -107,12 +107,13 @@ namespace PhysX
// Physics::ColliderComponentEventBus
void OnColliderChanged() override;
// WorldBodyRequestBus
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
void EnablePhysics() override;
void DisablePhysics() override;
bool IsPhysicsEnabled() const override;
AZ::Aabb GetAabb() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
void CreateEditorWorldRigidBody();
@@ -120,8 +120,6 @@ namespace PhysX
void EditorShapeColliderComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
{
// Not compatible with Legacy Cry Physics services
incompatible.push_back(AZ_CRC("ColliderService", 0x902d4e93));
incompatible.push_back(AZ_CRC("LegacyCryPhysicsService", 0xbb370351));
incompatible.push_back(AZ_CRC("PhysXShapeColliderService", 0x98a7e779));
}
@@ -273,7 +271,7 @@ namespace PhysX
m_editorBody = azdynamic_cast<StaticRigidBody*>(m_sceneInterface->GetSimulatedBodyFromHandle(m_editorSceneHandle, m_editorBodyHandle));
}
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
}
AZ::u32 EditorShapeColliderComponent::OnConfigurationChanged()
@@ -663,7 +661,7 @@ namespace PhysX
void EditorShapeColliderComponent::Deactivate()
{
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
m_colliderDebugDraw.Disconnect();
m_nonUniformScaleChangedHandler.Disconnect();
@@ -761,11 +759,16 @@ namespace PhysX
return AZ::Aabb::CreateNull();
}
AzPhysics::SimulatedBody* EditorShapeColliderComponent::GetWorldBody()
AzPhysics::SimulatedBody* EditorShapeColliderComponent::GetSimulatedBody()
{
return m_editorBody;
}
AzPhysics::SimulatedBodyHandle EditorShapeColliderComponent::GetSimulatedBodyHandle() const
{
return m_editorBodyHandle;
}
AzPhysics::SceneQueryHit EditorShapeColliderComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
if (m_editorBody)
@@ -16,7 +16,7 @@
#include <AzCore/Component/NonUniformScaleBus.h>
#include <AzFramework/Entity/EntityDebugDisplayBus.h>
#include <AzFramework/Physics/Shape.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <AzFramework/Physics/Common/PhysicsEvents.h>
#include <AzFramework/Physics/Common/PhysicsTypes.h>
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
@@ -68,7 +68,7 @@ namespace PhysX
, protected DebugDraw::DisplayCallback
, protected LmbrCentral::ShapeComponentNotificationsBus::Handler
, private PhysX::ColliderShapeRequestBus::Handler
, protected Physics::WorldBodyRequestBus::Handler
, protected AzPhysics::SimulatedBodyComponentRequestsBus::Handler
{
public:
AZ_EDITOR_COMPONENT(EditorShapeColliderComponent, "{2389DDC7-871B-42C6-9C95-2A679DDA0158}",
@@ -120,12 +120,13 @@ namespace PhysX
// handling for non-uniform scale
void OnNonUniformScaleChanged(const AZ::Vector3& scale);
// WorldBodyRequestBus
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
void EnablePhysics() override;
void DisablePhysics() override;
bool IsPhysicsEnabled() const override;
AZ::Aabb GetAabb() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
// LmbrCentral::ShapeComponentNotificationBus
@@ -87,7 +87,7 @@ namespace PhysX
AZ::TransformNotificationBus::Handler::BusConnect(GetEntityId());
Physics::CharacterRequestBus::Handler::BusConnect(GetEntityId());
Physics::CollisionFilteringRequestBus::Handler::BusConnect(GetEntityId());
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
}
void CharacterControllerComponent::Deactivate()
@@ -95,7 +95,7 @@ namespace PhysX
DestroyController();
Physics::CollisionFilteringRequestBus::Handler::BusDisconnect();
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
AZ::TransformNotificationBus::Handler::BusDisconnect();
Physics::CharacterRequestBus::Handler::BusDisconnect();
}
@@ -215,11 +215,20 @@ namespace PhysX
return AZ::Aabb::CreateNull();
}
AzPhysics::SimulatedBody* CharacterControllerComponent::GetWorldBody()
AzPhysics::SimulatedBody* CharacterControllerComponent::GetSimulatedBody()
{
return GetCharacter();
}
AzPhysics::SimulatedBodyHandle CharacterControllerComponent::GetSimulatedBodyHandle() const
{
if (m_controller)
{
return m_controller->m_bodyHandle;
}
return AzPhysics::InvalidSimulatedBodyHandle;
}
AzPhysics::SceneQueryHit CharacterControllerComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
if (m_controller)
@@ -456,7 +465,5 @@ namespace PhysX
m_preSimulateHandler.Disconnect();
CharacterControllerRequestBus::Handler::BusDisconnect();
Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsDisabled);
}
} // namespace PhysX
@@ -15,7 +15,7 @@
#include <AzFramework/Physics/CharacterBus.h>
#include <AzFramework/Physics/SystemBus.h>
#include <AzFramework/Physics/CollisionBus.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <AzFramework/Physics/Common/PhysicsEvents.h>
#include <PhysXCharacters/API/CharacterController.h>
#include <AzCore/Component/TransformBus.h>
@@ -35,7 +35,7 @@ namespace PhysX
class CharacterControllerComponent
: public AZ::Component
, public Physics::CharacterRequestBus::Handler
, public Physics::WorldBodyRequestBus::Handler
, public AzPhysics::SimulatedBodyComponentRequestsBus::Handler
, public AZ::TransformNotificationBus::Handler
, public CharacterControllerRequestBus::Handler
, public Physics::CollisionFilteringRequestBus::Handler
@@ -99,12 +99,13 @@ namespace PhysX
bool IsPresent() const override { return IsPhysicsEnabled(); }
Physics::Character* GetCharacter() override;
// WorldBodyRequestBus
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
void EnablePhysics() override;
void DisablePhysics() override;
bool IsPhysicsEnabled() const override;
AZ::Aabb GetAabb() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
// CharacterControllerRequestBus
@@ -13,7 +13,6 @@
#include <PhysX_precompiled.h>
#include <PhysXCharacters/Components/CharacterGameplayComponent.h>
#include <AzFramework/Physics/CharacterBus.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Common/PhysicsSimulatedBody.h>
#include <AzCore/Serialization/EditContext.h>
#include <PhysX/PhysXLocks.h>
@@ -158,7 +157,7 @@ namespace PhysX
void CharacterGameplayComponent::Activate()
{
AzPhysics::SimulatedBody* worldBody = nullptr;
Physics::WorldBodyRequestBus::EventResult(worldBody, GetEntityId(), &Physics::WorldBodyRequests::GetWorldBody);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(worldBody, GetEntityId(), &AzPhysics::SimulatedBodyComponentRequests::GetSimulatedBody);
if (worldBody)
{
if (auto* sceneInterface = AZ::Interface<AzPhysics::SceneInterface>::Get())
@@ -257,11 +257,20 @@ namespace PhysX
return AZ::Aabb::CreateNull();
}
AzPhysics::SimulatedBody* RagdollComponent::GetWorldBody()
AzPhysics::SimulatedBody* RagdollComponent::GetSimulatedBody()
{
return GetRagdoll();
}
AzPhysics::SimulatedBodyHandle RagdollComponent::GetSimulatedBodyHandle() const
{
if (m_ragdoll)
{
return m_ragdoll->m_bodyHandle;
}
return AzPhysics::InvalidSimulatedBodyHandle;
}
AzPhysics::SceneQueryHit RagdollComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
if (m_ragdoll)
@@ -357,7 +366,7 @@ namespace PhysX
}
AzFramework::RagdollPhysicsRequestBus::Handler::BusConnect(GetEntityId());
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
AzFramework::RagdollPhysicsNotificationBus::Event(GetEntityId(),
&AzFramework::RagdollPhysicsNotifications::OnRagdollActivated);
@@ -367,7 +376,6 @@ namespace PhysX
{
if (m_ragdoll)
{
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzFramework::RagdollPhysicsRequestBus::Handler::BusDisconnect();
AzFramework::RagdollPhysicsNotificationBus::Event(GetEntityId(),
&AzFramework::RagdollPhysicsNotifications::OnRagdollDeactivated);
@@ -15,7 +15,7 @@
#include <PhysXCharacters/API/Ragdoll.h>
#include <AzCore/Component/Component.h>
#include <AzFramework/Physics/CharacterPhysicsDataBus.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
namespace AzPhysics
{
@@ -28,7 +28,7 @@ namespace PhysX
class RagdollComponent
: public AZ::Component
, public AzFramework::RagdollPhysicsRequestBus::Handler
, public Physics::WorldBodyRequestBus::Handler
, public AzPhysics::SimulatedBodyComponentRequestsBus::Handler
, public AzFramework::CharacterPhysicsDataNotificationBus::Handler
{
public:
@@ -81,12 +81,13 @@ namespace PhysX
void SetNodeState(size_t nodeIndex, const Physics::RagdollNodeState& nodeState) override;
Physics::RagdollNode* GetNode(size_t nodeIndex) const override;
// WorldBodyRequestBus
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
void EnablePhysics() override;
void DisablePhysics() override;
bool IsPhysicsEnabled() const override;
AZ::Aabb GetAabb() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
// CharacterPhysicsDataNotificationBus
@@ -189,7 +189,7 @@ namespace PhysX
}
Physics::RigidBodyRequestBus::Handler::BusDisconnect();
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
AZ::TransformNotificationBus::MultiHandler::BusDisconnect();
m_sceneFinishSimHandler.Disconnect();
AZ::TickBus::Handler::BusDisconnect();
@@ -309,7 +309,7 @@ namespace PhysX
AZ::TickBus::Handler::BusConnect();
AZ::TransformNotificationBus::MultiHandler::BusConnect(GetEntityId());
Physics::RigidBodyRequestBus::Handler::BusConnect(GetEntityId());
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
}
void RigidBodyComponent::EnablePhysics()
@@ -341,7 +341,6 @@ namespace PhysX
m_initialScale = transform.ExtractScale();
Physics::RigidBodyNotificationBus::Event(GetEntityId(), &Physics::RigidBodyNotificationBus::Events::OnPhysicsEnabled);
Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsEnabled);
}
void RigidBodyComponent::DisablePhysics()
@@ -352,7 +351,6 @@ namespace PhysX
}
Physics::RigidBodyNotificationBus::Event(GetEntityId(), &Physics::RigidBodyNotificationBus::Events::OnPhysicsDisabled);
Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsDisabled);
}
bool RigidBodyComponent::IsPhysicsEnabled() const
@@ -526,11 +524,16 @@ namespace PhysX
return m_rigidBody;
}
AzPhysics::SimulatedBody* RigidBodyComponent::GetWorldBody()
AzPhysics::SimulatedBody* RigidBodyComponent::GetSimulatedBody()
{
return m_rigidBody;
}
AzPhysics::SimulatedBodyHandle RigidBodyComponent::GetSimulatedBodyHandle() const
{
return m_rigidBodyHandle;
}
AzPhysics::SceneQueryHit RigidBodyComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
if (m_rigidBody)
+5 -4
View File
@@ -16,7 +16,7 @@
#include <AzCore/Component/TickBus.h>
#include <AzCore/Component/TransformBus.h>
#include <AzFramework/Physics/RigidBodyBus.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <AzFramework/Physics/Common/PhysicsEvents.h>
#include <AzFramework/Physics/Configuration/RigidBodyConfiguration.h>
#include <AzFramework/Physics/SimulatedBodies/RigidBody.h>
@@ -35,7 +35,7 @@ namespace PhysX
class RigidBodyComponent
: public AZ::Component
, public Physics::RigidBodyRequestBus::Handler
, public Physics::WorldBodyRequestBus::Handler
, public AzPhysics::SimulatedBodyComponentRequestsBus::Handler
, public AZ::TickBus::Handler
, public AzFramework::SliceGameEntityOwnershipServiceNotificationBus::Handler
, protected AZ::TransformNotificationBus::MultiHandler
@@ -120,8 +120,9 @@ namespace PhysX
void SetSleepThreshold(float threshold) override;
AzPhysics::RigidBody* GetRigidBody() override;
// WorldBodyRequestBus
AzPhysics::SimulatedBody* GetWorldBody() override;
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
// SliceGameEntityOwnershipServiceNotificationBus
void OnSliceInstantiated(const AZ::Data::AssetId&, const AZ::SliceComponent::SliceInstanceAddress&,
@@ -83,8 +83,8 @@ namespace PhysX
continue;
}
AzPhysics::SimulatedBody* body1 = actorData1->GetWorldBody();
AzPhysics::SimulatedBody* body2 = actorData2->GetWorldBody();
AzPhysics::SimulatedBody* body1 = actorData1->GetSimulatedBody();
AzPhysics::SimulatedBody* body2 = actorData2->GetSimulatedBody();
if (!body1 || !body2)
{
@@ -161,7 +161,7 @@ namespace PhysX
}
ActorData* triggerBodyActorData = Utils::GetUserData(triggerPair.triggerActor);
AzPhysics::SimulatedBody* triggerBody = triggerBodyActorData->GetWorldBody();
AzPhysics::SimulatedBody* triggerBody = triggerBodyActorData->GetSimulatedBody();
if (!triggerBody)
{
AZ_Error("PhysX", false, "onTrigger:: trigger body was invalid");
@@ -174,7 +174,7 @@ namespace PhysX
}
ActorData* otherActorData = Utils::GetUserData(triggerPair.otherActor);
AzPhysics::SimulatedBody* otherBody = otherActorData->GetWorldBody();
AzPhysics::SimulatedBody* otherBody = otherActorData->GetSimulatedBody();
if (!otherBody)
{
AZ_Error("PhysX", false, "onTrigger:: otherBody was invalid");
@@ -62,8 +62,6 @@ namespace PhysX
void StaticRigidBodyComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
{
// Not compatible with cry engine colliders
incompatible.push_back(AZ_CRC("ColliderService", 0x902d4e93));
// There can be only one StaticRigidBodyComponent per entity
incompatible.push_back(AZ_CRC("PhysXStaticRigidBodyService", 0xaae8973b));
// Cannot have both StaticRigidBodyComponent and RigidBodyComponent
@@ -75,11 +73,6 @@ namespace PhysX
dependent.push_back(AZ_CRC("PhysXColliderService", 0x4ff43f7c));
}
PhysX::StaticRigidBody* StaticRigidBodyComponent::GetStaticRigidBody()
{
return m_staticRigidBody;
}
void StaticRigidBodyComponent::InitStaticRigidBody()
{
AZ::Transform transform = AZ::Transform::CreateIdentity();
@@ -117,8 +110,7 @@ namespace PhysX
InitStaticRigidBody();
Physics::WorldBodyRequestBus::Handler::BusConnect(GetEntityId());
Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsEnabled);
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(GetEntityId());
}
void StaticRigidBodyComponent::Deactivate()
@@ -130,7 +122,7 @@ namespace PhysX
m_staticRigidBody = nullptr;
}
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
AZ::TransformNotificationBus::Handler::BusDisconnect();
}
@@ -149,8 +141,6 @@ namespace PhysX
{
sceneInterface->EnableSimulationOfBody(m_attachedSceneHandle, m_staticRigidBodyHandle);
}
Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsEnabled);
}
void StaticRigidBodyComponent::DisablePhysics()
@@ -159,8 +149,6 @@ namespace PhysX
{
sceneInterface->DisableSimulationOfBody(m_attachedSceneHandle, m_staticRigidBodyHandle);
}
Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsDisabled);
}
bool StaticRigidBodyComponent::IsPhysicsEnabled() const
@@ -173,7 +161,12 @@ namespace PhysX
return m_staticRigidBody->GetAabb();
}
AzPhysics::SimulatedBody* StaticRigidBodyComponent::GetWorldBody()
AzPhysics::SimulatedBodyHandle StaticRigidBodyComponent::GetSimulatedBodyHandle() const
{
return m_staticRigidBodyHandle;
}
AzPhysics::SimulatedBody* StaticRigidBodyComponent::GetSimulatedBody()
{
return m_staticRigidBody;
}
@@ -13,7 +13,7 @@
#include <AzCore/Component/Component.h>
#include <AzCore/Component/TransformBus.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <PhysX/ComponentTypeIds.h>
namespace AzPhysics
@@ -27,7 +27,7 @@ namespace PhysX
class StaticRigidBodyComponent final
: public AZ::Component
, public Physics::WorldBodyRequestBus::Handler
, public AzPhysics::SimulatedBodyComponentRequestsBus::Handler
, private AZ::TransformNotificationBus::Handler
{
public:
@@ -44,14 +44,14 @@ namespace PhysX
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent);
PhysX::StaticRigidBody* GetStaticRigidBody();
// WorldBodyRequestBus
// AzPhysics::SimulatedBodyComponentRequestsBus::Handler overrides ...
void EnablePhysics() override;
void DisablePhysics() override;
bool IsPhysicsEnabled() const override;
AZ::Aabb GetAabb() const override;
AzPhysics::SimulatedBody* GetWorldBody() override;
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
AzPhysics::SimulatedBody* GetSimulatedBody() override;
AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
private:
@@ -460,14 +460,14 @@ namespace PhysX
characterEntity->Activate();
bool physicsEnabled = false;
Physics::WorldBodyRequestBus::EventResult(physicsEnabled, characterEntity->GetId(),
&Physics::WorldBodyRequestBus::Events::IsPhysicsEnabled);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(physicsEnabled, characterEntity->GetId(),
&AzPhysics::SimulatedBodyComponentRequestsBus::Events::IsPhysicsEnabled);
EXPECT_TRUE(physicsEnabled);
// when physics is disabled
Physics::WorldBodyRequestBus::Event(characterEntity->GetId(), &Physics::WorldBodyRequestBus::Events::DisablePhysics);
Physics::WorldBodyRequestBus::EventResult(physicsEnabled, characterEntity->GetId(),
&Physics::WorldBodyRequestBus::Events::IsPhysicsEnabled);
AzPhysics::SimulatedBodyComponentRequestsBus::Event(characterEntity->GetId(), &AzPhysics::SimulatedBodyComponentRequestsBus::Events::DisablePhysics);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(physicsEnabled, characterEntity->GetId(),
&AzPhysics::SimulatedBodyComponentRequestsBus::Events::IsPhysicsEnabled);
EXPECT_FALSE(physicsEnabled);
// expect no error occurs when sending common events
@@ -77,7 +77,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const AZ::Aabb aabb = staticBody->GetAabb();
EXPECT_THAT(aabb.GetMin(), UnitTest::IsCloseTolerance(AZ::Vector3(5.6045f, 4.9960f, 11.7074f), 1e-3f));
@@ -153,7 +153,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const AZ::Aabb aabb = staticBody->GetAabb();
@@ -231,7 +231,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const AZ::Aabb aabb = staticBody->GetAabb();
@@ -121,7 +121,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const auto* pxRigidStatic = static_cast<const physx::PxRigidStatic*>(staticBody->GetNativePointer());
PHYSX_SCENE_READ_LOCK(pxRigidStatic->getScene());
@@ -613,17 +613,17 @@ namespace PhysX
// Create 3 colliders, one of each type and check that the AABB of their body is the expected
EntityPtr box = TestUtils::CreateBoxEntity(m_testSceneHandle, AZ::Vector3(0, 0, 0), AZ::Vector3(32, 32, 32));
AZ::Aabb boxAABB;
Physics::WorldBodyRequestBus::EventResult(boxAABB, box->GetId(), &Physics::WorldBodyRequests::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(boxAABB, box->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetAabb);
EXPECT_TRUE(boxAABB.GetMin().IsClose(AZ::Vector3(-16, -16, -16)) && boxAABB.GetMax().IsClose(AZ::Vector3(16, 16, 16)));
EntityPtr sphere = TestUtils::CreateSphereEntity(m_testSceneHandle, AZ::Vector3(-100, 0, 0), 16);
AZ::Aabb sphereAABB;
Physics::WorldBodyRequestBus::EventResult(sphereAABB, sphere->GetId(), &Physics::WorldBodyRequests::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(sphereAABB, sphere->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetAabb);
EXPECT_TRUE(sphereAABB.GetMin().IsClose(AZ::Vector3(-16 -100, -16, -16)) && sphereAABB.GetMax().IsClose(AZ::Vector3(16 -100, 16, 16)));
EntityPtr capsule = TestUtils::CreateCapsuleEntity(m_testSceneHandle, AZ::Vector3(100, 0, 0), 128, 16);
AZ::Aabb capsuleAABB;
Physics::WorldBodyRequestBus::EventResult(capsuleAABB, capsule->GetId(), &Physics::WorldBodyRequests::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(capsuleAABB, capsule->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetAabb);
EXPECT_TRUE(capsuleAABB.GetMin().IsClose(AZ::Vector3(-16 +100, -16, -64)) && capsuleAABB.GetMax().IsClose(AZ::Vector3(16 +100, 16, 64)));
}
@@ -632,17 +632,17 @@ namespace PhysX
// Create 3 colliders, one of each type and check that the AABB of their body is the expected
EntityPtr box = TestUtils::CreateStaticBoxEntity(m_testSceneHandle, AZ::Vector3(0, 0, 0), AZ::Vector3(32, 32, 32));
AZ::Aabb boxAABB;
Physics::WorldBodyRequestBus::EventResult(boxAABB, box->GetId(), &Physics::WorldBodyRequests::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(boxAABB, box->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetAabb);
EXPECT_TRUE(boxAABB.GetMin().IsClose(AZ::Vector3(-16, -16, -16)) && boxAABB.GetMax().IsClose(AZ::Vector3(16, 16, 16)));
EntityPtr sphere = TestUtils::CreateStaticSphereEntity(m_testSceneHandle, AZ::Vector3(-100, 0, 0), 16);
AZ::Aabb sphereAABB;
Physics::WorldBodyRequestBus::EventResult(sphereAABB, sphere->GetId(), &Physics::WorldBodyRequests::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(sphereAABB, sphere->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetAabb);
EXPECT_TRUE(sphereAABB.GetMin().IsClose(AZ::Vector3(-16 -100, -16, -16)) && sphereAABB.GetMax().IsClose(AZ::Vector3(16 -100, 16, 16)));
EntityPtr capsule = TestUtils::CreateStaticCapsuleEntity(m_testSceneHandle, AZ::Vector3(100, 0, 0), 128, 16);
AZ::Aabb capsuleAABB;
Physics::WorldBodyRequestBus::EventResult(capsuleAABB, capsule->GetId(), &Physics::WorldBodyRequests::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(capsuleAABB, capsule->GetId(), &AzPhysics::SimulatedBodyComponentRequests::GetAabb);
EXPECT_TRUE(capsuleAABB.GetMin().IsClose(AZ::Vector3(-16 +100, -16, -64)) && capsuleAABB.GetMax().IsClose(AZ::Vector3(16 +100, 16, 64)));
}
@@ -662,19 +662,19 @@ namespace PhysX
request.m_direction = AZ::Vector3(0, 0, -1);
request.m_distance = 200.f;
Physics::WorldBodyRequestBus::Event(entity->GetId(), &Physics::WorldBodyRequests::DisablePhysics);
AzPhysics::SimulatedBodyComponentRequestsBus::Event(entity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::DisablePhysics);
bool enabled = true;
Physics::WorldBodyRequestBus::EventResult(enabled, entity->GetId(), &Physics::WorldBodyRequests::IsPhysicsEnabled);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(enabled, entity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::IsPhysicsEnabled);
EXPECT_FALSE(enabled);
AzPhysics::SceneQueryHits result = sceneInterface->QueryScene(sceneHandle, &request);
EXPECT_FALSE(result);
Physics::WorldBodyRequestBus::Event(entity->GetId(), &Physics::WorldBodyRequests::EnablePhysics);
AzPhysics::SimulatedBodyComponentRequestsBus::Event(entity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::EnablePhysics);
enabled = false;
Physics::WorldBodyRequestBus::EventResult(enabled, entity->GetId(), &Physics::WorldBodyRequests::IsPhysicsEnabled);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(enabled, entity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::IsPhysicsEnabled);
EXPECT_TRUE(enabled);
result = sceneInterface->QueryScene(sceneHandle, &request);
@@ -718,7 +718,7 @@ namespace PhysX
request.m_distance = 200.0f;
AzPhysics::SceneQueryHit hit;
Physics::WorldBodyRequestBus::EventResult(hit, staticBoxEntity->GetId(), &Physics::WorldBodyRequests::RayCast, request);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(hit, staticBoxEntity->GetId(), &AzPhysics::SimulatedBodyComponentRequests::RayCast, request);
EXPECT_TRUE(hit);
@@ -922,7 +922,7 @@ namespace PhysX
static const RayCastFunc WorldBodyRaycastEBusCall = []([[maybe_unused]] AZ::EntityId entityId, [[maybe_unused]] const AzPhysics::RayCastRequest& request)
{
AzPhysics::SceneQueryHit ret;
Physics::WorldBodyRequestBus::EventResult(ret, entityId, &Physics::WorldBodyRequests::RayCast, request);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(ret, entityId, &AzPhysics::SimulatedBodyComponentRequests::RayCast, request);
return ret;
};
+4 -4
View File
@@ -312,7 +312,7 @@ namespace PhysX
{
// set up a trigger box
auto triggerBox = TestUtils::CreateTriggerAtPosition<BoxColliderComponent>(AZ::Vector3(0.0f, 0.0f, 12.0f));
auto triggerBody = triggerBox->FindComponent<StaticRigidBodyComponent>()->GetStaticRigidBody();
auto* triggerBody = azdynamic_cast<PhysX::StaticRigidBody*>(triggerBox->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
auto triggerShape = triggerBody->GetShape(0);
TestTriggerAreaNotificationListener testTriggerAreaNotificationListener(triggerBox->GetId());
@@ -445,7 +445,7 @@ namespace PhysX
auto obj02 = TestUtils::AddStaticUnitTestObject<BoxColliderComponent>(m_testSceneHandle, AZ::Vector3(0.0f, 0.0f, 0.0f), "TestBox01");
auto body01 = obj01->FindComponent<RigidBodyComponent>()->GetRigidBody();
auto body02 = obj02->FindComponent<StaticRigidBodyComponent>()->GetStaticRigidBody();
auto* body02 = azdynamic_cast<PhysX::StaticRigidBody*>(obj02->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
auto shape01 = body01->GetShape(0).get();
auto shape02 = body02->GetShape(0).get();
@@ -588,7 +588,7 @@ namespace PhysX
{
// set up a trigger box
auto triggerBox = TestUtils::CreateTriggerAtPosition<BoxColliderComponent>(AZ::Vector3(0.0f, 0.0f, 0.0f));
auto triggerBody = triggerBox->FindComponent<StaticRigidBodyComponent>()->GetStaticRigidBody();
auto* triggerBody = azdynamic_cast<PhysX::StaticRigidBody*>(triggerBox->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
// Create a test box above the trigger so when it falls down it'd enter and leave the trigger box
auto testBox = TestUtils::AddUnitTestObject(m_testSceneHandle, AZ::Vector3(0.0f, 0.0f, 1.5f), "TestBox");
@@ -628,7 +628,7 @@ namespace PhysX
{
// Set up a static non trigger box
auto staticBox = TestUtils::AddStaticUnitTestObject<BoxColliderComponent>(m_testSceneHandle, AZ::Vector3(0.0f, 0.0f, 0.0f));
auto staticBody = staticBox->FindComponent<StaticRigidBodyComponent>()->GetStaticRigidBody();
auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(staticBox->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
// Create a test trigger box above the static box so when it falls down it'd enter and leave the trigger box
auto dynamicTrigger = TestUtils::CreateDynamicTriggerAtPosition<BoxColliderComponent>(AZ::Vector3(0.0f, 0.0f, 5.0f));
+1 -1
View File
@@ -37,7 +37,7 @@ namespace PhysX
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
<Class name="AZ::u64" field="Id" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class>
<Class name="PhysX::Ragdoll" field="PhysXRagdoll" type="{55D477B5-B922-4D3E-89FE-7FB7B9FDD635}"/>
<Class name="AZStd::shared_ptr" field="PhysXRagdoll" type="{A3E470C6-D6E0-5A32-9E83-96C379D9E7FA}"/>
</Class>
</ObjectStream>)DELIMITER";
@@ -138,7 +138,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const auto* pxRigidStatic = static_cast<const physx::PxRigidStatic*>(staticBody->GetNativePointer());
PHYSX_SCENE_READ_LOCK(pxRigidStatic->getScene());
@@ -196,7 +196,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const auto* pxRigidStatic = static_cast<const physx::PxRigidStatic*>(staticBody->GetNativePointer());
PHYSX_SCENE_READ_LOCK(pxRigidStatic->getScene());
@@ -247,7 +247,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
// the vertices of the input polygon prism ranged from (0, 0) to (3, 3) and the height was set to 2
// the bounding box of the static rigid body should reflect those values combined with the scale values above
@@ -291,7 +291,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const auto* pxRigidStatic = static_cast<const physx::PxRigidStatic*>(staticBody->GetNativePointer());
PHYSX_SCENE_READ_LOCK(pxRigidStatic->getScene());
@@ -363,7 +363,7 @@ namespace PhysXEditorTests
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
// since there was no editor rigid body component, the runtime entity should have a static rigid body
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
const auto* pxRigidStatic = static_cast<const physx::PxRigidStatic*>(staticBody->GetNativePointer());
PHYSX_SCENE_READ_LOCK(pxRigidStatic->getScene());
@@ -442,7 +442,7 @@ namespace PhysXEditorTests
// make a game entity and check its bounding box is consistent with the changed transform
EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get());
const auto* staticBody = gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetStaticRigidBody();
const auto* staticBody = azdynamic_cast<PhysX::StaticRigidBody*>(gameEntity->FindComponent<PhysX::StaticRigidBodyComponent>()->GetSimulatedBody());
AZ::Aabb aabb = staticBody->GetAabb();
EXPECT_TRUE(aabb.GetMax().IsClose(translation + 0.5f * scale * boxDimensions));
EXPECT_TRUE(aabb.GetMin().IsClose(translation - 0.5f * scale * boxDimensions));
-1
View File
@@ -102,7 +102,6 @@ set(FILES
Source/PhysXCharacters/Components/CharacterGameplayComponent.h
Source/PhysXCharacters/Components/RagdollComponent.cpp
Source/PhysXCharacters/Components/RagdollComponent.h
Include/PhysX/Debug/PhysXDebugConfiguration.h
Include/PhysX/Debug/PhysXDebugInterface.h
Include/PhysX/Configuration/PhysXConfiguration.h
@@ -19,8 +19,8 @@
#include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/Math/IntersectSegment.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Common/PhysicsSceneQueries.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
#include <SurfaceData/SurfaceDataSystemRequestBus.h>
#include <SurfaceData/Utility/SurfaceDataUtility.h>
@@ -221,7 +221,7 @@ namespace SurfaceData
}
AzPhysics::SceneQueryHit result;
Physics::WorldBodyRequestBus::EventResult(result, GetEntityId(), &Physics::WorldBodyRequestBus::Events::RayCast, request);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(result, GetEntityId(), &AzPhysics::SimulatedBodyComponentRequestsBus::Events::RayCast, request);
if (result)
{
@@ -319,7 +319,7 @@ namespace SurfaceData
colliderValidBeforeUpdate = m_colliderBounds.IsValid();
m_colliderBounds = AZ::Aabb::CreateNull();
Physics::WorldBodyRequestBus::EventResult(m_colliderBounds, GetEntityId(), &Physics::WorldBodyRequestBus::Events::GetAabb);
AzPhysics::SimulatedBodyComponentRequestsBus::EventResult(m_colliderBounds, GetEntityId(), &AzPhysics::SimulatedBodyComponentRequestsBus::Events::GetAabb);
colliderValidAfterUpdate = m_colliderBounds.IsValid();
}
@@ -23,7 +23,7 @@
#include <AzFramework/Physics/Common/PhysicsSceneQueries.h>
#include <AzFramework/Physics/Shape.h>
#include <AzFramework/Physics/WorldBodyBus.h>
#include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
namespace UnitTest
{
@@ -45,12 +45,12 @@ namespace UnitTest
};
class MockPhysicsWorldBusProvider
: public Physics::WorldBodyRequestBus::Handler
: public AzPhysics::SimulatedBodyComponentRequestsBus::Handler
{
public:
MockPhysicsWorldBusProvider(const AZ::EntityId& id, AZ::Vector3 inPosition, bool setHitResult, const SurfaceData::SurfacePoint& hitResult)
{
Physics::WorldBodyRequestBus::Handler::BusConnect(id);
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusConnect(id);
// Whether or not the test should return a successful hit, we still want to create a valid
// AABB so that the SurfaceData component registers itself as a provider.
@@ -73,14 +73,15 @@ namespace UnitTest
virtual ~MockPhysicsWorldBusProvider()
{
Physics::WorldBodyRequestBus::Handler::BusDisconnect();
AzPhysics::SimulatedBodyComponentRequestsBus::Handler::BusDisconnect();
}
// Minimal mocks needed to mock out this ebus
void EnablePhysics() override {}
void DisablePhysics() override {}
bool IsPhysicsEnabled() const override { return true; }
AzPhysics::SimulatedBody* GetWorldBody() override { return nullptr; }
AzPhysics::SimulatedBody* GetSimulatedBody() override { return nullptr; }
AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override { return AzPhysics::InvalidSimulatedBodyHandle; }
// Functional mocks to mock out the data needed by the component
AZ::Aabb GetAabb() const override { return m_aabb; }