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
@@ -15,12 +15,15 @@
#include <AzTest/GemTestEnvironment.h>
#include <gmock/gmock.h>
#include <AzFramework/Physics/Material.h>
#include <AzFramework/Physics/PhysicsScene.h>
#include <AzFramework/Physics/Shape.h>
#include <AzFramework/Physics/ShapeConfiguration.h>
#include <AzFramework/Physics/World.h>
#include <AzFramework/Physics/ShapeConfiguration.h>
#include <AzFramework/Components/TransformComponent.h>
#include <AzFramework/Physics/Collision/CollisionGroups.h>
#include <AzFramework/Physics/Collision/CollisionLayers.h>
#include <AzFramework/Physics/Common/PhysicsSimulatedBody.h>
#include <AzFramework/Physics/Common/PhysicsTypes.h>
#include <WorldNodes.h>
namespace ScriptCanvasPhysics
@@ -53,7 +56,7 @@ namespace ScriptCanvasPhysics
const AZStd::string& collisionGroup,
AZ::EntityId ignore);
extern AZStd::vector<Physics::RayCastHit> RayCastMultipleLocalSpaceWithGroup(const AZ::EntityId& fromEntityId,
extern AZStd::vector<AzPhysics::SceneQueryHit> RayCastMultipleLocalSpaceWithGroup(const AZ::EntityId& fromEntityId,
const AZ::Vector3& direction,
float distance,
const AZStd::string& collisionGroup,
@@ -62,7 +65,7 @@ namespace ScriptCanvasPhysics
extern Result ShapecastQuery(float distance,
const AZ::Transform& pose,
const AZ::Vector3& direction,
Physics::ShapeConfiguration& shape,
AZStd::shared_ptr<Physics::ShapeConfiguration> shape,
const AZStd::string& collisionGroup,
AZ::EntityId ignore);
}
@@ -72,59 +75,103 @@ namespace ScriptCanvasPhysicsTests
{
using namespace ::testing;
class MockWorld
: public Physics::WorldRequestBus::Handler
//Mocked of the AzPhysics Scene Interface. To keep things simple just mocked functions that have a return value OR required for a test.
class MockPhysicsSceneInterface
: AZ::Interface<AzPhysics::SceneInterface>::Registrar
{
public:
MockWorld()
{
Physics::WorldRequestBus::Handler::BusConnect(Physics::DefaultPhysicsWorldId);
}
~MockWorld() override
{
Physics::WorldRequestBus::Handler::BusDisconnect();
}
MOCK_METHOD1(Update, void(float deltaTime));
MOCK_METHOD1(StartSimulation, void(float deltaTime));
MOCK_METHOD0(FinishSimulation, void());
MOCK_METHOD1(RayCast, Physics::RayCastHit(const Physics::RayCastRequest& request));
MOCK_METHOD1(RayCastMultiple, AZStd::vector<Physics::RayCastHit>(const Physics::RayCastRequest& request));
MOCK_METHOD1(ShapeCast, Physics::RayCastHit(const Physics::ShapeCastRequest& request));
MOCK_METHOD1(ShapeCastMultiple, AZStd::vector<Physics::RayCastHit>(const Physics::ShapeCastRequest& request));
MOCK_METHOD1(Overlap, AZStd::vector<Physics::OverlapHit>(const Physics::OverlapRequest& request));
MOCK_METHOD2(OverlapUnbounded, void(const Physics::OverlapRequest& request, const Physics::HitCallback<Physics::OverlapHit>& hitCallback));
MOCK_METHOD2(RegisterSuppressedCollision, void(const Physics::WorldBody& body0, const Physics::WorldBody& body1));
MOCK_METHOD2(UnregisterSuppressedCollision, void(const Physics::WorldBody& body0, const Physics::WorldBody& body1));
MOCK_METHOD1(AddBody, void(Physics::WorldBody& body));
MOCK_METHOD1(RemoveBody, void(Physics::WorldBody& body));
MOCK_METHOD1(SetSimFunc, void(std::function<void(void*)> func));
MOCK_METHOD1(SetEventHandler, void(Physics::WorldEventHandler* eventHandler));
MOCK_CONST_METHOD0(GetGravity, AZ::Vector3());
MOCK_METHOD1(SetGravity, void(const AZ::Vector3& gravity));
MOCK_METHOD1(SetMaxDeltaTime, void(float maxDeltaTime));
MOCK_METHOD1(SetFixedDeltaTime, void(float fixedDeltaTime));
MOCK_METHOD1(DeferDelete, void(AZStd::unique_ptr<Physics::WorldBody> worldBody));
MOCK_METHOD1(SetTriggerEventCallback, void(Physics::ITriggerEventCallback* triggerCallback));
MOCK_CONST_METHOD0(GetWorldId, AZ::Crc32());
void StartSimulation(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] float deltatime) override {}
void FinishSimulation([[maybe_unused]] AzPhysics::SceneHandle sceneHandle) override {}
void SetEnabled(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] bool enable) override {}
void RemoveSimulatedBody(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
void RemoveSimulatedBodies(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] const AzPhysics::SimulatedBodyHandleList& bodyHandles) override {}
void EnableSimulationOfBody(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
void DisableSimulationOfBody(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SimulatedBodyHandle bodyHandle) override {}
void SuppressCollisionEvents(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] const AzPhysics::SimulatedBodyHandle& bodyHandleA,
[[maybe_unused]] const AzPhysics::SimulatedBodyHandle& bodyHandleB) override {}
void UnsuppressCollisionEvents(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] const AzPhysics::SimulatedBodyHandle& bodyHandleA,
[[maybe_unused]] const AzPhysics::SimulatedBodyHandle& bodyHandleB) override {}
void SetGravity(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] const AZ::Vector3& gravity) override {}
void RegisterSceneConfigurationChangedEventHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSceneConfigurationChanged::Handler& handler) override {}
void RegisterSimulationBodyAddedHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSimulationBodyAdded::Handler& handler) override {}
void RegisterSimulationBodyRemovedHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSimulationBodyRemoved::Handler& handler) override {}
void RegisterSimulationBodySimulationEnabledHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSimulationBodySimulationEnabled::Handler& handler) override {}
void RegisterSimulationBodySimulationDisabledHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSimulationBodySimulationDisabled::Handler& handler) override {}
void RegisterSceneSimulationStartHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSceneSimulationStartHandler& handler) override {}
void RegisterSceneActiveSimulatedBodiesHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSceneActiveSimulatedBodiesEvent::Handler& handler) override {}
void RegisterSceneCollisionEventHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSceneCollisionsEvent::Handler& handler) override {}
void RegisterSceneTriggersEventHandler(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSceneTriggersEvent::Handler& handler) override {}
void RegisterSceneGravityChangedEvent(
[[maybe_unused]] AzPhysics::SceneHandle sceneHandle,
[[maybe_unused]] AzPhysics::SceneEvents::OnSceneGravityChangedEvent::Handler& handler) override {}
MOCK_METHOD1(GetSceneHandle, AzPhysics::SceneHandle(const AZStd::string& sceneName));
MOCK_CONST_METHOD1(IsEnabled, bool(AzPhysics::SceneHandle sceneHandle));
MOCK_METHOD2(AddSimulatedBody, AzPhysics::SimulatedBodyHandle(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyConfiguration* simulatedBodyConfig));
MOCK_METHOD2(AddSimulatedBodies, AzPhysics::SimulatedBodyHandleList(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyConfigurationList& simulatedBodyConfigs));
MOCK_METHOD2(GetSimulatedBodyFromHandle, AzPhysics::SimulatedBody* (AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle bodyHandle));
MOCK_METHOD2(GetSimulatedBodiesFromHandle, AzPhysics::SimulatedBodyList(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SimulatedBodyHandleList& bodyHandles));
MOCK_CONST_METHOD1(GetGravity, AZ::Vector3(AzPhysics::SceneHandle sceneHandle));
MOCK_METHOD2(RegisterSceneSimulationFinishHandler, void(AzPhysics::SceneHandle sceneHandle, AzPhysics::SceneEvents::OnSceneSimulationFinishHandler& handler));
MOCK_CONST_METHOD2(GetLegacyBody, AzPhysics::SimulatedBody* (AzPhysics::SceneHandle sceneHandle, AzPhysics::SimulatedBodyHandle handle));
MOCK_METHOD2(QueryScene, AzPhysics::SceneQueryHits(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SceneQueryRequest* request));
MOCK_METHOD2(QuerySceneBatch, AzPhysics::SceneQueryHitsList(AzPhysics::SceneHandle sceneHandle, const AzPhysics::SceneQueryRequests& requests));
MOCK_METHOD4(QuerySceneAsync, bool(AzPhysics::SceneHandle sceneHandle, AzPhysics::SceneQuery::AsyncRequestId requestId,
const AzPhysics::SceneQueryRequest* request, AzPhysics::SceneQuery::AsyncCallback callback));
MOCK_METHOD4(QuerySceneAsyncBatch, bool(AzPhysics::SceneHandle sceneHandle, AzPhysics::SceneQuery::AsyncRequestId requestId,
const AzPhysics::SceneQueryRequests& requests, AzPhysics::SceneQuery::AsyncBatchCallback callback));
};
class MockWorldBody
: public Physics::WorldBody
class MockSimulatedBody
: public AzPhysics::SimulatedBody
{
public:
MOCK_CONST_METHOD0(GetEntityId, AZ::EntityId());
MOCK_CONST_METHOD0(GetWorld, Physics::World*());
MOCK_CONST_METHOD0(GetTransform, AZ::Transform());
MOCK_METHOD1(SetTransform, void(const AZ::Transform& transform));
MOCK_CONST_METHOD0(GetPosition, AZ::Vector3());
MOCK_CONST_METHOD0(GetOrientation, AZ::Quaternion());
MOCK_CONST_METHOD0(GetAabb, AZ::Aabb());
MOCK_METHOD1(RayCast, Physics::RayCastHit(const Physics::RayCastRequest& request));
MOCK_METHOD1(RayCast, AzPhysics::SceneQueryHit(const AzPhysics::RayCastRequest& request));
MOCK_CONST_METHOD0(GetNativeType, AZ::Crc32());
MOCK_CONST_METHOD0(GetNativePointer, void*());
MOCK_METHOD1(AddToWorld, void(Physics::World&));
MOCK_METHOD1(RemoveFromWorld, void(Physics::World&));
};
class MockShape
@@ -144,8 +191,8 @@ namespace ScriptCanvasPhysicsTests
MOCK_CONST_METHOD0(GetTag, AZ::Crc32());
MOCK_METHOD1(AttachedToActor, void(void* actor));
MOCK_METHOD0(DetachedFromActor, void());
MOCK_METHOD2(RayCast, Physics::RayCastHit(const Physics::RayCastRequest& worldSpaceRequest, const AZ::Transform& worldTransform));
MOCK_METHOD1(RayCastLocal, Physics::RayCastHit(const Physics::RayCastRequest& localSpaceRequest));
MOCK_METHOD2(RayCast, AzPhysics::SceneQueryHit(const AzPhysics::RayCastRequest& worldSpaceRequest, const AZ::Transform& worldTransform));
MOCK_METHOD1(RayCastLocal, AzPhysics::SceneQueryHit(const AzPhysics::RayCastRequest& localSpaceRequest));
MOCK_METHOD3(GetGeometry, void(AZStd::vector<AZ::Vector3>&, AZStd::vector<AZ::u32>&, AZ::Aabb*));
MOCK_CONST_METHOD1(GetAabb, AZ::Aabb(const AZ::Transform& worldTransform));
MOCK_CONST_METHOD0(GetAabbLocal, AZ::Aabb());
@@ -198,28 +245,34 @@ namespace ScriptCanvasPhysicsTests
ON_CALL(m_material, GetSurfaceType())
.WillByDefault(Return(AZ::Crc32("CustomSurface")));
m_hit.m_body = &m_worldBody;
m_hit.m_position = AZ::Vector3(1.f, 2.f, 3.f);
m_hit.m_distance = 2.5f;
m_hit.m_normal = AZ::Vector3(-1.f, 3.5f, 0.5f);
m_hit.m_shape = &m_shape;
m_hit.m_material = &m_material;
m_hit.m_resultFlags = AzPhysics::SceneQuery::ResultFlags::Position |
AzPhysics::SceneQuery::ResultFlags::Distance |
AzPhysics::SceneQuery::ResultFlags::Normal |
AzPhysics::SceneQuery::ResultFlags::Shape |
AzPhysics::SceneQuery::ResultFlags::Material;
m_hitResult.m_hits.push_back(m_hit);
}
NiceMock<MockWorldBody> m_worldBody;
NiceMock<MockSimulatedBody> m_worldBody;
NiceMock<MockShape> m_shape;
NiceMock<MockPhysicsMaterial> m_material;
NiceMock<MockWorld> m_worldMock;
Physics::RayCastHit m_hit;
NiceMock<MockPhysicsSceneInterface> m_sceneInterfaceMock;
AzPhysics::SceneQueryHit m_hit;
AzPhysics::SceneQueryHits m_hitResult;
bool ResultIsEqualToHit(const ScriptCanvasPhysics::WorldNodes::Result& result, const Physics::RayCastHit& hit)
bool ResultIsEqualToHit(const ScriptCanvasPhysics::WorldNodes::Result& result, const AzPhysics::SceneQueryHit& hit)
{
return
AZStd::get<0>(result) == (hit.m_body != nullptr) &&
AZStd::get<0>(result) == hit.IsValid() &&
AZStd::get<1>(result) == hit.m_position &&
AZStd::get<2>(result) == hit.m_normal &&
AZStd::get<3>(result) == hit.m_distance &&
AZStd::get<4>(result) == (hit.m_body ? hit.m_body->GetEntityId() : AZ::EntityId()) &&
AZStd::get<4>(result) == hit.m_entityId &&
AZStd::get<5>(result) == (hit.m_material ? hit.m_material->GetSurfaceType() : AZ::Crc32())
;
}
@@ -228,8 +281,8 @@ namespace ScriptCanvasPhysicsTests
TEST_F(ScriptCanvasPhysicsTest, WorldNodes_RayCastWorldSpaceWithGroup_FT)
{
ON_CALL(m_worldMock, RayCast(_))
.WillByDefault(Return(m_hit));
ON_CALL(m_sceneInterfaceMock, QueryScene(_, _))
.WillByDefault(Return(m_hitResult));
// given raycast data
const AZ::Vector3 start = AZ::Vector3::CreateZero();
@@ -253,8 +306,8 @@ namespace ScriptCanvasPhysicsTests
TEST_F(ScriptCanvasPhysicsTest, WorldNodes_RayCastLocalSpaceWithGroup_FT)
{
ON_CALL(m_worldMock, RayCast(_))
.WillByDefault(Return(m_hit));
ON_CALL(m_sceneInterfaceMock, QueryScene(_, _))
.WillByDefault(Return(m_hitResult));
// given raycast data
const AZ::Vector3 start = AZ::Vector3::CreateZero();
@@ -283,11 +336,11 @@ namespace ScriptCanvasPhysicsTests
TEST_F(ScriptCanvasPhysicsTest, WorldNodes_RayCastMultipleLocalSpaceWithGroup_FT)
{
AZStd::vector<Physics::RayCastHit> hits;
AZStd::vector<AzPhysics::SceneQueryHit> hits;
hits.push_back(m_hit);
ON_CALL(m_worldMock, RayCastMultiple(_))
.WillByDefault(Return(hits));
ON_CALL(m_sceneInterfaceMock, QueryScene(_, _))
.WillByDefault(Return(m_hitResult));
// given raycast data
const AZ::Vector3 start = AZ::Vector3::CreateZero();
@@ -315,7 +368,6 @@ namespace ScriptCanvasPhysicsTests
for (auto result : results)
{
EXPECT_EQ(result.m_body, m_hit.m_body);
EXPECT_EQ(result.m_distance, m_hit.m_distance);
EXPECT_EQ(result.m_material, m_hit.m_material);
EXPECT_EQ(result.m_normal, m_hit.m_normal);
@@ -326,8 +378,8 @@ namespace ScriptCanvasPhysicsTests
TEST_F(ScriptCanvasPhysicsTest, WorldNodes_ShapecastQuery_FT)
{
ON_CALL(m_worldMock, ShapeCast(_))
.WillByDefault(Return(m_hit));
ON_CALL(m_sceneInterfaceMock, QueryScene(_, _))
.WillByDefault(Return(m_hitResult));
// given shapecast data
const AZ::Vector3 start = AZ::Vector3::CreateZero();
@@ -336,14 +388,13 @@ namespace ScriptCanvasPhysicsTests
const AZStd::string collisionGroup = "default";
const AZ::EntityId ignoreEntityId;
const AZ::Transform pose = AZ::Transform::CreateIdentity();
Physics::BoxShapeConfiguration boxShapeConfiguration = Physics::BoxShapeConfiguration();
// when a shapecast is performed
auto result = ScriptCanvasPhysics::WorldNodes::ShapecastQuery(
distance,
pose,
direction,
boxShapeConfiguration,
AZStd::make_shared<Physics::BoxShapeConfiguration>(),
collisionGroup,
ignoreEntityId
);