Expand tests to cover path types and edge cases

This commit is contained in:
Aaron Kimbre 2024-02-17 02:14:36 -06:00
parent c35ab1f9e3
commit 92696606e1
3 changed files with 140 additions and 77 deletions

View File

@ -15,6 +15,7 @@
#include "CDClientManager.h" #include "CDClientManager.h"
#include "CDMovingPlatformComponentTable.h" #include "CDMovingPlatformComponentTable.h"
#include "Zone.h" #include "Zone.h"
#include "StringifiedEnum.h"
//------------- PlatformSubComponent begin -------------- //------------- PlatformSubComponent begin --------------
@ -84,22 +85,10 @@ void PlatformSubComponent::UpdateLinearVelocity() {
} }
void PlatformSubComponent::AdvanceToNextWaypoint() { void PlatformSubComponent::AdvanceToNextWaypoint() {
uint32_t numWaypoints = m_Path->pathWaypoints.size();
m_CurrentWaypointIndex = m_NextWaypointIndex; m_CurrentWaypointIndex = m_NextWaypointIndex;
m_ParentComponent->GetParent()->SetPosition(GetCurrentWaypoint().position); m_ParentComponent->GetParent()->SetPosition(GetCurrentWaypoint().position);
m_ParentComponent->GetParent()->SetRotation(GetCurrentWaypoint().rotation); m_ParentComponent->GetParent()->SetRotation(GetCurrentWaypoint().rotation);
uint32_t nextWaypointIndex = m_CurrentWaypointIndex + 1; int32_t nextWaypointIndex = FindNextWaypointIndex();
if (numWaypoints <= nextWaypointIndex) {
PathBehavior behavior = m_Path->pathBehavior;
if (behavior == PathBehavior::Once) {
nextWaypointIndex = m_Path->pathWaypoints.size() - 1;
} else if (behavior == PathBehavior::Bounce) {
nextWaypointIndex = m_Path->pathWaypoints.size() - 2;
m_InReverse = true;
} else {
m_NextWaypointIndex = 0;
}
}
m_NextWaypointIndex = nextWaypointIndex; m_NextWaypointIndex = nextWaypointIndex;
m_DesiredWaypointIndex = nextWaypointIndex; m_DesiredWaypointIndex = nextWaypointIndex;
UpdateLinearVelocity(); UpdateLinearVelocity();
@ -108,22 +97,10 @@ void PlatformSubComponent::AdvanceToNextWaypoint() {
} }
void PlatformSubComponent::AdvanceToNextReverseWaypoint() { void PlatformSubComponent::AdvanceToNextReverseWaypoint() {
uint32_t numWaypoints = m_Path->pathWaypoints.size();
m_ParentComponent->GetParent()->SetPosition(GetCurrentWaypoint().position); m_ParentComponent->GetParent()->SetPosition(GetCurrentWaypoint().position);
m_ParentComponent->GetParent()->SetRotation(GetCurrentWaypoint().rotation); m_ParentComponent->GetParent()->SetRotation(GetCurrentWaypoint().rotation);
m_CurrentWaypointIndex = m_NextWaypointIndex; m_CurrentWaypointIndex = m_NextWaypointIndex;
int32_t nextWaypointIndex = m_CurrentWaypointIndex - 1; int32_t nextWaypointIndex = FindNextReversedWaypointIndex();
if (nextWaypointIndex < 0) {
PathBehavior behavior = m_Path->pathBehavior;
if (behavior == PathBehavior::Once) {
nextWaypointIndex = 0;
} else if (behavior == PathBehavior::Bounce) {
nextWaypointIndex = 1;
m_InReverse = false;
} else {
nextWaypointIndex = m_Path->pathWaypoints.size() - 1;
}
}
m_NextWaypointIndex = nextWaypointIndex; m_NextWaypointIndex = nextWaypointIndex;
m_DesiredWaypointIndex = nextWaypointIndex; m_DesiredWaypointIndex = nextWaypointIndex;
UpdateLinearVelocity(); UpdateLinearVelocity();
@ -141,13 +118,49 @@ void PlatformSubComponent::SetupPath(const std::string& pathName, uint32_t start
m_InReverse = startsInReverse; m_InReverse = startsInReverse;
m_CurrentWaypointIndex = startingWaypointIndex; m_CurrentWaypointIndex = startingWaypointIndex;
m_TimeBasedMovement = m_Path->movingPlatform.timeBasedMovement; m_TimeBasedMovement = m_Path->movingPlatform.timeBasedMovement;
m_NextWaypointIndex = m_InReverse ? m_CurrentWaypointIndex - 1 : m_CurrentWaypointIndex + 1; m_NextWaypointIndex = m_InReverse ? FindNextReversedWaypointIndex() : FindNextWaypointIndex();
} }
const PathWaypoint& PlatformSubComponent::GetNextWaypoint() const { const PathWaypoint& PlatformSubComponent::GetNextWaypoint() const {
DluAssert(m_Path != nullptr); DluAssert(m_Path != nullptr);
return m_Path->pathWaypoints.at(m_NextWaypointIndex); return m_Path->pathWaypoints.at(m_NextWaypointIndex);
} }
const int32_t PlatformSubComponent::FindNextWaypointIndex() {
DluAssert(m_Path != nullptr);
uint32_t numWaypoints = m_Path->pathWaypoints.size();
uint32_t nextWaypointIndex = m_CurrentWaypointIndex + 1;
if (numWaypoints <= nextWaypointIndex) {
PathBehavior behavior = m_Path->pathBehavior;
if (behavior == PathBehavior::Once) {
nextWaypointIndex = m_Path->pathWaypoints.size() - 1;
} else if (behavior == PathBehavior::Bounce) {
nextWaypointIndex = m_Path->pathWaypoints.size() - 2;
m_InReverse = true;
} else {
nextWaypointIndex = 0;
}
}
return nextWaypointIndex;
}
const int32_t PlatformSubComponent::FindNextReversedWaypointIndex() {
DluAssert(m_Path != nullptr);
uint32_t numWaypoints = m_Path->pathWaypoints.size();
int32_t nextWaypointIndex = m_CurrentWaypointIndex - 1;
if (nextWaypointIndex < 0) {
PathBehavior behavior = m_Path->pathBehavior;
if (behavior == PathBehavior::Once) {
nextWaypointIndex = 0;
} else if (behavior == PathBehavior::Bounce) {
nextWaypointIndex = 1;
m_InReverse = false;
} else {
nextWaypointIndex = m_Path->pathWaypoints.size() - 1;
}
}
return nextWaypointIndex;
}
const PathWaypoint& PlatformSubComponent::GetCurrentWaypoint() const { const PathWaypoint& PlatformSubComponent::GetCurrentWaypoint() const {
DluAssert(m_Path != nullptr); DluAssert(m_Path != nullptr);

View File

@ -60,6 +60,8 @@ public:
float CalculateSpeed() const; float CalculateSpeed() const;
const PathWaypoint& GetNextWaypoint() const; const PathWaypoint& GetNextWaypoint() const;
const PathWaypoint& GetCurrentWaypoint() const; const PathWaypoint& GetCurrentWaypoint() const;
const int32_t FindNextWaypointIndex();
const int32_t FindNextReversedWaypointIndex();
void SetupPath(const std::string& pathName, uint32_t startingWaypointIndex, bool startsInReverse); void SetupPath(const std::string& pathName, uint32_t startingWaypointIndex, bool startsInReverse);
void AdvanceToNextWaypoint(); void AdvanceToNextWaypoint();
void AdvanceToNextReverseWaypoint(); void AdvanceToNextReverseWaypoint();

View File

@ -16,12 +16,11 @@ protected:
std::unique_ptr<Entity> baseEntity; std::unique_ptr<Entity> baseEntity;
CBITSTREAM; CBITSTREAM;
uint32_t flags = 0; uint32_t flags = 0;
Path path; Path pathOnce;
Path pathBounce;
Path pathLoop;
void SetUp() override { void SetUp() override {
SetUpDependencies(); SetUpDependencies();
path.movingPlatform.timeBasedMovement = false;
path.pathBehavior = PathBehavior::Once;
path.pathName = "ExamplePath";
PathWaypoint waypointStart; PathWaypoint waypointStart;
waypointStart.position = NiPoint3(1, 2, 3); waypointStart.position = NiPoint3(1, 2, 3);
waypointStart.rotation = NiQuaternion(4, 5, 6, 7); waypointStart.rotation = NiQuaternion(4, 5, 6, 7);
@ -36,13 +35,40 @@ protected:
waypointEnd.position = NiPoint3(4, 5, 7); waypointEnd.position = NiPoint3(4, 5, 7);
waypointEnd.rotation = NiQuaternion(7, 8, 9, 10); waypointEnd.rotation = NiQuaternion(7, 8, 9, 10);
waypointStart.movingPlatform.speed = 16.0f; waypointStart.movingPlatform.speed = 16.0f;
{
pathOnce.movingPlatform.timeBasedMovement = false;
pathOnce.pathBehavior = PathBehavior::Once;
pathOnce.pathName = "ExampleOncePath";
path.pathWaypoints.push_back(waypointStart); pathOnce.pathWaypoints.push_back(waypointStart);
path.pathWaypoints.push_back(waypointMiddle); pathOnce.pathWaypoints.push_back(waypointMiddle);
path.pathWaypoints.push_back(waypointEnd); pathOnce.pathWaypoints.push_back(waypointEnd);
Game::zoneManager->GetZone()->AddPath(path); Game::zoneManager->GetZone()->AddPath(pathOnce);
}
{
pathBounce.movingPlatform.timeBasedMovement = false;
pathBounce.pathBehavior = PathBehavior::Bounce;
pathBounce.pathName = "ExampleBouncePath";
pathBounce.pathWaypoints.push_back(waypointStart);
pathBounce.pathWaypoints.push_back(waypointMiddle);
pathBounce.pathWaypoints.push_back(waypointEnd);
Game::zoneManager->GetZone()->AddPath(pathBounce);
}
{
pathLoop.movingPlatform.timeBasedMovement = false;
pathLoop.pathBehavior = PathBehavior::Loop;
pathLoop.pathName = "ExampleLoopPath";
pathLoop.pathWaypoints.push_back(waypointStart);
pathLoop.pathWaypoints.push_back(waypointMiddle);
pathLoop.pathWaypoints.push_back(waypointEnd);
Game::zoneManager->GetZone()->AddPath(pathLoop);
}
// Set our starting position // Set our starting position
info.pos = NiPoint3(25, 26, 27); info.pos = NiPoint3(25, 26, 27);
info.rot = NiQuaternion(28, 29, 30, 31); info.rot = NiQuaternion(28, 29, 30, 31);
@ -61,7 +87,7 @@ protected:
baseEntity = std::make_unique<Entity>(15, GameDependenciesTest::info); baseEntity = std::make_unique<Entity>(15, GameDependenciesTest::info);
auto* simplePhysicsComponent = baseEntity->AddComponent<SimplePhysicsComponent>(1); auto* simplePhysicsComponent = baseEntity->AddComponent<SimplePhysicsComponent>(1);
auto* movingPlatformComponent = baseEntity->AddComponent<MovingPlatformComponent>("ExamplePath"); auto* movingPlatformComponent = baseEntity->AddComponent<MovingPlatformComponent>("ExampleOncePath");
movingPlatformComponent->LoadConfigData(); movingPlatformComponent->LoadConfigData();
movingPlatformComponent->LoadDataFromTemplate(); movingPlatformComponent->LoadDataFromTemplate();
} }
@ -176,7 +202,7 @@ protected:
ASSERT_TRUE(bitStream.Read(pathNameLength)); ASSERT_TRUE(bitStream.Read(pathNameLength));
pathName.resize(pathNameLength); pathName.resize(pathNameLength);
ASSERT_TRUE(bitStream.ReadBits(reinterpret_cast<unsigned char*>(pathName.data()), BYTES_TO_BITS(pathNameLength) * 2)); ASSERT_TRUE(bitStream.ReadBits(reinterpret_cast<unsigned char*>(pathName.data()), BYTES_TO_BITS(pathNameLength) * 2));
ASSERT_EQ(pathName, u"ExamplePath"); ASSERT_EQ(pathName, u"ExampleOncePath");
uint32_t pathStartIndex; uint32_t pathStartIndex;
ASSERT_TRUE(bitStream.Read(pathStartIndex)); ASSERT_TRUE(bitStream.Read(pathStartIndex));
@ -229,10 +255,12 @@ TEST_F(MovingPlatformComponentTests, MovingPlatformSerializationTest) {
TestSerialization(); TestSerialization();
} }
TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathAdvanceForwardTest) { TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathOnceAdvanceTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>()); MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, false); moverPlatformSubComponent.SetupPath("ExampleOncePath", 0, false);
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1);
moverPlatformSubComponent.AdvanceToNextWaypoint(); moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
@ -240,36 +268,18 @@ TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathAdvanceForwar
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 2); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 2);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
ASSERT_FALSE(moverPlatformSubComponent.GetInReverse()); ASSERT_FALSE(moverPlatformSubComponent.GetInReverse());
path.pathBehavior = PathBehavior::Bounce;
moverPlatformSubComponent.AdvanceToNextWaypoint(); moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 2); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 2);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse()); ASSERT_FALSE(moverPlatformSubComponent.GetInReverse());
} }
TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathAdvanceReverseTest) { TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathBounceAdvanceTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>()); MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, true); moverPlatformSubComponent.SetupPath("ExampleBouncePath", 0, false);
moverPlatformSubComponent.AdvanceToNextReverseWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 0);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
moverPlatformSubComponent.AdvanceToNextReverseWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 0);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
path.pathBehavior = PathBehavior::Bounce;
moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
}
TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathAdvanceTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, false);
moverPlatformSubComponent.AdvanceToNextWaypoint(); moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
@ -286,16 +296,53 @@ TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentPathAdvanceTest)
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1);
ASSERT_FALSE(moverPlatformSubComponent.GetInReverse()); ASSERT_FALSE(moverPlatformSubComponent.GetInReverse());
}
TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentLoopAdvanceTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExampleLoopPath", 0, false);
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1);
moverPlatformSubComponent.AdvanceToNextWaypoint(); moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 2);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 0);
ASSERT_FALSE(moverPlatformSubComponent.GetInReverse());
moverPlatformSubComponent.AdvanceToNextWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1);
ASSERT_FALSE(moverPlatformSubComponent.GetInReverse()); ASSERT_FALSE(moverPlatformSubComponent.GetInReverse());
} }
TEST_F(MovingPlatformComponentTests, MovingPlatformSubComponentLoopAdvanceReverseTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExampleLoopPath", 0, true);
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
moverPlatformSubComponent.AdvanceToNextReverseWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 2);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 1);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
moverPlatformSubComponent.AdvanceToNextReverseWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 1);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 0);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
moverPlatformSubComponent.AdvanceToNextReverseWaypoint();
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypointIndex(), 0);
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypointIndex(), 2);
ASSERT_TRUE(moverPlatformSubComponent.GetInReverse());
}
TEST_F(MovingPlatformComponentTests, MovingPlatformMoverSpeedCalculationTest) { TEST_F(MovingPlatformComponentTests, MovingPlatformMoverSpeedCalculationTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>()); MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, false); moverPlatformSubComponent.SetupPath("ExampleOncePath", 0, false);
ASSERT_EQ(moverPlatformSubComponent.CalculateSpeed(), 16.0f); ASSERT_EQ(moverPlatformSubComponent.CalculateSpeed(), 16.0f);
NiPoint3 r = moverPlatformSubComponent.CalculateLinearVelocity(); NiPoint3 r = moverPlatformSubComponent.CalculateLinearVelocity();
@ -307,7 +354,7 @@ TEST_F(MovingPlatformComponentTests, MovingPlatformMoverSpeedCalculationTest) {
TEST_F(MovingPlatformComponentTests, MovingPlatformNextAndCurrentWaypointAccess) { TEST_F(MovingPlatformComponentTests, MovingPlatformNextAndCurrentWaypointAccess) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>()); MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, false); moverPlatformSubComponent.SetupPath("ExampleOncePath", 0, false);
ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypoint().position, NiPoint3(1, 2, 3)); ASSERT_EQ(moverPlatformSubComponent.GetCurrentWaypoint().position, NiPoint3(1, 2, 3));
ASSERT_EQ(moverPlatformSubComponent.GetNextWaypoint().position, NiPoint3(4, 5, 6)); ASSERT_EQ(moverPlatformSubComponent.GetNextWaypoint().position, NiPoint3(4, 5, 6));
@ -318,29 +365,30 @@ TEST_F(MovingPlatformComponentTests, MovingPlatformNextAndCurrentWaypointAccess)
TEST_F(MovingPlatformComponentTests, MovingPlatformRunTest) { TEST_F(MovingPlatformComponentTests, MovingPlatformRunTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>()); MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, false); moverPlatformSubComponent.SetupPath("ExampleOncePath", 0, false);
path.pathWaypoints.at(0).position = NiPoint3(99.296440f, 419.293335f, 207.219498f); pathOnce.pathWaypoints.at(1).position = NiPoint3(99.296440f, 419.293335f, 207.219498f);
path.pathWaypoints.at(0).movingPlatform.speed = 16.0f; pathOnce.pathWaypoints.at(1).movingPlatform.speed = 16.0f;
path.pathWaypoints.at(1).position = NiPoint3(141.680099f, 419.990051f, 208.680450f); pathOnce.pathWaypoints.at(2).position = NiPoint3(141.680099f, 419.990051f, 208.680450f);
path.pathWaypoints.at(1).movingPlatform.speed = 16.0f; pathOnce.pathWaypoints.at(2).movingPlatform.speed = 16.0f;
moverPlatformSubComponent.UpdateLinearVelocity(); moverPlatformSubComponent.UpdateLinearVelocity();
moverPlatformSubComponent.Update(2.65f); moverPlatformSubComponent.Update(2.65f);
auto [x,y,z] = moverPlatformSubComponent.GetPosition();
LOG_TEST("x: %f, y: %f, z: %f", x, y, z);
// just check that its close enough // just check that its close enough
EXPECT_LT(141.680099f - moverPlatformSubComponent.GetPosition().x, 0.1f); EXPECT_LT(141.680099f - x, 0.1f);
EXPECT_LT(419.990051f - moverPlatformSubComponent.GetPosition().y, 0.1f); EXPECT_LT(419.990051f - y, 0.1f);
EXPECT_LT(208.680450f - moverPlatformSubComponent.GetPosition().z, 0.1f); EXPECT_LT(208.680450f - z, 0.1f);
} }
TEST_F(MovingPlatformComponentTests, MovingPlatformPercentBetweenPointsTest) { TEST_F(MovingPlatformComponentTests, MovingPlatformPercentBetweenPointsTest) {
MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>()); MoverPlatformSubComponent moverPlatformSubComponent(baseEntity->GetComponent<MovingPlatformComponent>());
moverPlatformSubComponent.SetupPath("ExamplePath", 0, false); moverPlatformSubComponent.SetupPath("ExampleOncePath", 0, false);
path.pathWaypoints.at(0).position = NiPoint3(0, 0, 1); pathOnce.pathWaypoints.at(0).position = NiPoint3(0, 0, 1);
path.pathWaypoints.at(1).position = NiPoint3(0, 0, 3); pathOnce.pathWaypoints.at(1).position = NiPoint3(0, 0, 3);
// moverPlatformSubComponent.m_Position = NiPoint3(0, 0, 1); // moverPlatformSubComponent.m_Position = NiPoint3(0, 0, 1);
ASSERT_FLOAT_EQ(moverPlatformSubComponent.CalculatePercentToNextWaypoint(), 0.0f); ASSERT_FLOAT_EQ(moverPlatformSubComponent.CalculatePercentToNextWaypoint(), 0.0f);
// moverPlatformSubComponent.m_Position = NiPoint3(0, 0, 2); // moverPlatformSubComponent.m_Position = NiPoint3(0, 0, 2);