Integrating up through commit 90f050496

This commit is contained in:
alexpete
2021-04-07 14:03:29 -07:00
parent 8f2ed080a9
commit c2cbd430fe
2694 changed files with 285622 additions and 176874 deletions
+28 -55
View File
@@ -30,10 +30,9 @@
#include <AzFramework/Physics/Shape.h>
#include <AzFramework/Physics/ShapeConfiguration.h>
#include <AzFramework/Physics/SystemBus.h>
#include <AzFramework/Physics/TriggerBus.h>
#include <AzFramework/Physics/World.h>
#include <AzFramework/Physics/WorldEventhandler.h>
#include <AzFramework/Physics/PhysicsSystem.h>
#include <AzFramework/Physics/Collision/CollisionEvents.h>
#include <AzFramework/Physics/Common/PhysicsSimulatedBody.h>
#include <Tests/PhysXTestCommon.h>
@@ -52,19 +51,15 @@ namespace PhysX
class PhysXForceRegionTest
: public::testing::Test
, protected Physics::DefaultWorldBus::Handler
, protected Physics::WorldEventHandler
{
void SetUp() override
{
if (auto* physicsSystem = AZ::Interface<AzPhysics::SystemInterface>::Get())
{
AzPhysics::SceneConfiguration sceneConfiguration = physicsSystem->GetDefaultSceneConfiguration();
sceneConfiguration.m_legacyId = Physics::DefaultPhysicsWorldId;
sceneConfiguration.m_sceneName = AzPhysics::DefaultPhysicsSceneName;
m_testSceneHandle = physicsSystem->AddScene(sceneConfiguration);
if (m_defaultScene = physicsSystem->GetScene(m_testSceneHandle))
{
m_defaultScene->GetLegacyWorld()->SetEventHandler(this);
}
m_defaultScene = physicsSystem->GetScene(m_testSceneHandle);
}
Physics::DefaultWorldBus::Handler::BusConnect();
@@ -84,37 +79,10 @@ namespace PhysX
TestUtils::ResetPhysXSystem();
}
// DefaultWorldBus
AZStd::shared_ptr<Physics::World> GetDefaultWorld() override
// DefaultWorldBus
AzPhysics::SceneHandle GetDefaultSceneHandle() const override
{
return m_defaultScene->GetLegacyWorld();
}
// WorldEventHandler
void OnCollisionBegin(const Physics::CollisionEvent&) override //Not used in force region tests
{
}
void OnCollisionPersist(const Physics::CollisionEvent&) override //Not used in force region tests
{
}
void OnCollisionEnd(const Physics::CollisionEvent&) override //Not used in force region tests
{
}
void OnTriggerEnter(const Physics::TriggerEvent& triggerEvent) override
{
Physics::TriggerNotificationBus::QueueEvent(triggerEvent.m_triggerBody->GetEntityId()
, &Physics::TriggerNotifications::OnTriggerEnter
, triggerEvent);
}
void OnTriggerExit(const Physics::TriggerEvent& triggerEvent) override
{
Physics::TriggerNotificationBus::QueueEvent(triggerEvent.m_triggerBody->GetEntityId()
, &Physics::TriggerNotifications::OnTriggerExit
, triggerEvent);
return m_testSceneHandle;
}
AzPhysics::Scene* m_defaultScene = nullptr;
@@ -125,10 +93,15 @@ namespace PhysX
{
return m_defaultScene;
}
AzPhysics::SceneHandle GetTestSceneHandle() const
{
return m_testSceneHandle;
}
};
AZStd::unique_ptr<AZ::Entity> AddTestRigidBodyCollider(AZ::Vector3& position
, ForceType forceType
, AzPhysics::SceneHandle sceneHandle
, const char* name = "TestObjectEntity")
{
AZStd::unique_ptr<AZ::Entity> entity(aznew AZ::Entity(name));
@@ -146,9 +119,9 @@ namespace PhysX
auto boxColliderComponent = entity->CreateComponent<BoxColliderComponent>();
boxColliderComponent->SetShapeConfigurationList({ AZStd::make_pair(colliderConfiguration, boxShapeConfiguration) });
Physics::RigidBodyConfiguration rigidBodyConfig;
AzPhysics::RigidBodyConfiguration rigidBodyConfig;
rigidBodyConfig.m_computeMass = false;
entity->CreateComponent<PhysX::RigidBodyComponent>(rigidBodyConfig);
entity->CreateComponent<PhysX::RigidBodyComponent>(rigidBodyConfig, sceneHandle);
entity->Init();
entity->Activate();
@@ -260,17 +233,17 @@ namespace PhysX
}
template<typename ColliderType>
AZ::Vector3 TestForceVolume(AzPhysics::Scene* scene, ForceType forceType)
AZ::Vector3 TestForceVolume(AzPhysics::SceneHandle sceneHandle, ForceType forceType)
{
AZ::Vector3 velocity = AZ::Vector3::CreateZero();
AZ::Vector3 position(0.0f, 0.0f, 16.0f);
auto rigidBodyCollider = AddTestRigidBodyCollider(position, forceType, "TestBox");
auto rigidBodyCollider = AddTestRigidBodyCollider(position, forceType, sceneHandle, "TestBox" );
auto forceRegion = AddForceRegion<ColliderType>(AZ::Vector3(0.0f, 0.0f, 12.0f), forceType);
//Run simulation for a while - bounces box once on force volume
constexpr const float deltaTime = 1.0f / 180.0f;
TestUtils::UpdateScene(scene, deltaTime, 240);
TestUtils::UpdateScene(sceneHandle, deltaTime, 240);
Physics::RigidBodyRequestBus::EventResult(velocity
, rigidBodyCollider->GetId()
@@ -280,7 +253,7 @@ namespace PhysX
}
template<typename ColliderType>
void TestAppliesSameMagnitude(AzPhysics::Scene* scene, ForceType forceType)
void TestAppliesSameMagnitude(AzPhysics::SceneHandle sceneHandle, ForceType forceType)
{
struct ForceRegionMagnitudeChecker
: public ForceRegionNotificationBus::Handler
@@ -306,12 +279,12 @@ namespace PhysX
bool m_failed = false;
};
ForceRegionMagnitudeChecker magnitudeChecker;
TestForceVolume<ColliderType>(scene, forceType);
TestForceVolume<ColliderType>(sceneHandle, forceType);
}
TEST_F(PhysXForceRegionTest, ForceRegion_WorldSpaceForce_EntityVelocityZPositive)
{
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestScene(), WorldSpaceForce);
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestSceneHandle(), WorldSpaceForce);
// World space force direction: AZ::Vector3(0.0f, 0.0f, 1.0f)
EXPECT_TRUE(entityVelocity.GetZ() > 0.0f); // World space force causes box to bounce upwards
EXPECT_NEAR(entityVelocity.GetX(), 0.0f, AZ::Constants::FloatEpsilon);
@@ -320,7 +293,7 @@ namespace PhysX
TEST_F(PhysXForceRegionTest, ForceRegion_LocalSpaceForce_EntityVelocityZPositive)
{
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestScene(), LocalSpaceForce);
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestSceneHandle(), LocalSpaceForce);
// Local space force direction: AZ::Vector3(0.0f, 0.0f, 1.0f)
// Force region was rotated about Y-axis by 90 deg
EXPECT_TRUE(entityVelocity.GetX() > 0.0f); // Falling body should be moving in positive X direction since force region is rotated.
@@ -333,7 +306,7 @@ namespace PhysX
// Falling body was positioned at AZ::Vector3(0.05f, 0.0f, 16.0f)
// Force region was positioned at AZ::Vector3(0.0f, 0.0f, 12.0f)
// PointForce causes box to bounce upwards and to the right.
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestScene(), PointForce);
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestSceneHandle(), PointForce);
EXPECT_TRUE(entityVelocity.GetX() > 0.0f);
EXPECT_NEAR(entityVelocity.GetY(), 0.0f, AZ::Constants::FloatEpsilon);
EXPECT_TRUE(entityVelocity.GetZ() > 0.0f);
@@ -341,7 +314,7 @@ namespace PhysX
TEST_F(PhysXForceRegionTest, ForceRegion_SplineFollowForce_EntityVelocitySpecificValue)
{
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestScene(), SplineFollowForce);
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestSceneHandle(), SplineFollowForce);
// Follow spline direction towards positive X and Y.
EXPECT_TRUE(entityVelocity.GetX() > 0.0f);
EXPECT_TRUE(entityVelocity.GetY() > 0.0f);
@@ -349,7 +322,7 @@ namespace PhysX
TEST_F(PhysXForceRegionTest, ForceRegion_SimpleDragForce_EntityVelocitySpecificValue)
{
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestScene(), SimpleDragForce);
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestSceneHandle(), SimpleDragForce);
EXPECT_TRUE(entityVelocity.GetZ() > -12.65f); // Falling velocity should be slower than free fall velocity, which is -12.65.
EXPECT_NEAR(entityVelocity.GetX(), 0.0f, AZ::Constants::FloatEpsilon); // Dragging should not change original direction.
EXPECT_NEAR(entityVelocity.GetY(), 0.0f, AZ::Constants::FloatEpsilon); // Dragging should not change original direction.
@@ -357,7 +330,7 @@ namespace PhysX
TEST_F(PhysXForceRegionTest, ForceRegion_LinearDampingForce_EntityVelocitySpecificValue)
{
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestScene(), LinearDampingForce);
AZ::Vector3 entityVelocity = TestForceVolume<BoxColliderComponent>(GetTestSceneHandle(), LinearDampingForce);
EXPECT_TRUE(entityVelocity.GetZ() > -12.65f); // Falling velocity should be slower than free fall velocity, which is -12.65.
EXPECT_NEAR(entityVelocity.GetX(), 0.0f, AZ::Constants::FloatEpsilon); // Damping should not change original direction.
EXPECT_NEAR(entityVelocity.GetY(), 0.0f, AZ::Constants::FloatEpsilon); // Damping should not change original direction.
@@ -365,17 +338,17 @@ namespace PhysX
TEST_F(PhysXForceRegionTest, ForceRegion_PointForce_AppliesSameMagnitude)
{
TestAppliesSameMagnitude<BoxColliderComponent>(GetTestScene(), PointForce);
TestAppliesSameMagnitude<BoxColliderComponent>(GetTestSceneHandle(), PointForce);
}
TEST_F(PhysXForceRegionTest, ForceRegion_WorldSpaceForce_AppliesSameMagnitude)
{
TestAppliesSameMagnitude<BoxColliderComponent>(GetTestScene(), WorldSpaceForce);
TestAppliesSameMagnitude<BoxColliderComponent>(GetTestSceneHandle(), WorldSpaceForce);
}
TEST_F(PhysXForceRegionTest, ForceRegion_LocalSpaceForce_AppliesSameMagnitude)
{
TestAppliesSameMagnitude<BoxColliderComponent>(GetTestScene(), LocalSpaceForce);
TestAppliesSameMagnitude<BoxColliderComponent>(GetTestSceneHandle(), LocalSpaceForce);
}
}