#include "GwNavTestFwk/GwNavTestFwk.h"
#include "GwNavTestFwk/TestEnv.h"
#include "common/oneworldenv.h"
#include "LabEngine/utils/labengineutils.h"
namespace
{
class MyGamePointOfInterest
{
public:
MyGamePointOfInterest() : m_navPointOfInterest(
KY_NULL) {}
void Destroy();
Kaim::Ptr<Kaim::PointOfInterest> m_navPointOfInterest;
};
{
m_id = id;
++id;
pointOfInterestInitConfig.
m_world = world;
pointOfInterestInitConfig.
m_startPosition = position;
m_navPointOfInterest->
Init(pointOfInterestInitConfig);
m_navPointOfInterest->AddToWorld();
m_navPointOfInterest->SetUserData(this);
m_navPointOfInterest->SetCurrentVisualDebugLOD(Kaim::VisualDebugLOD_Maximal);
}
void MyGamePointOfInterest::Destroy()
{
m_navPointOfInterest->RemoveFromWorld();
}
void MyGamePointOfInterest::SetPosition(
const Kaim::Vec3f& newPosition)
{
m_navPointOfInterest->SetPosition(newPosition);
}
{
Kaim::SpatializedPointCollectorFilter_SelectiveCollect selectiveCollect;
selectiveCollect.Select(Kaim::SpatializedPointObjectType_PointOfInterest);
const Kaim::Vec3f collectorBoxHalfExtentVec3f(collectorBoxHalfExtentFloat, collectorBoxHalfExtentFloat, collectorBoxHalfExtentFloat);
const Kaim::Box3f collectorBoxExtent(collectorBoxHalfExtentVec3f, collectorBoxHalfExtentVec3f);
query.
Initialize(collectorBoxCenter, collectorBoxExtent);
Kaim::VisualShapeColor displayColor;
displayList.PushBox(query.
ComputeAABB(), displayColor);
{
if (queryDynamicOutput)
{
for(
KyUInt32 i = 0; i < queryDynamicOutput->
GetSpatializedPointCount(); ++i)
{
if (spatializedPoint)
{
const Kaim::Vec3f& position = spatializedPoint->
GetPosition();
if (spatializedPoint->
GetObjectType() == Kaim::SpatializedPointObjectType_PointOfInterest)
{
Kaim::StringStream displayText;
MyGamePointOfInterest* myGamePointOfInterest = (MyGamePointOfInterest*)pointOfInterest->
GetUserData();
displayText << " POI #" << myGamePointOfInterest->m_id;
}
}
}
}
}
}
#define TEST_ENV_CLASS OneWorldEnv
TEST_ENV {}
TUTORIAL
{
KT_LOG_TITLE_BEGIN("TUTORIAL - PointOfInterest");
const KyUInt32 simulationFrameCount = 60;
const KyFloat32 simulationDeltaTimeInSeconds = 0.016f;
CHECK(env.LoadAndAddNavData(
"GeneratedNavData/plan/plan.NavData") !=
KY_NULL);
env.StartVisualDebugUsingLab();
LabEngine::GameBotInitConfig gameBotInitConfig;
gameBotInitConfig.m_botInitConfig.m_database = navDatabase;
gameBotInitConfig.m_botInitConfig.m_startPosition.Set(0.0f, 0.0f, 0.0f);
LabEngine::GameBot* gameBot = env.AddBotFromConfig(gameBotInitConfig);
gameBot->PushWayPoint(
Kaim::Vec3f(15.0f, 15.0f, 0.0f));
Kaim::Array<Kaim::Vec3f> positions;
MyGamePointOfInterest pointOfInterest[2];
pointOfInterest[0].Initialize(navWorld, positions[0]);
pointOfInterest[1].Initialize(navWorld,
Kaim::Vec3f(7.5f, 7.5f, 0.0f));
for (
KyUInt32 frameIdx = 0; frameIdx < simulationFrameCount; ++frameIdx)
{
env.Update(simulationDeltaTimeInSeconds);
LabEngine::Utils::TimedBusyWait(1000.0f * simulationDeltaTimeInSeconds);
CollectAndRenderNearbyPointsOfInterest(navDatabase, gameBot->m_navBot->GetPosition(), 2.0f);
if (frameIdx % 10 == 0)
{
const KyUInt32 scenarioCycleIdx = frameIdx / 10;
const Kaim::Vec3f& newPosition = positions[scenarioCycleIdx % positions.GetSize()];
pointOfInterest[0].SetPosition(newPosition);
}
}
pointOfInterest[0].Destroy();
pointOfInterest[1].Destroy();
env.CleanUpWorld();
}
}