#include "common/oneworldenv.h"
namespace
{
bool IsAPathNodeOnNavTag(
const Kaim::Path* path,
const Kaim::DynamicNavTag& navTag)
{
for (
KyUInt32 i = 0; i < path->
GetNodeCount(); ++i)
{
if (path->
GetNodeNavTrianglePtr(i).
GetNavTag() == navTag)
return true;
}
return false;
}
#define TEST_ENV_CLASS OneWorldEnv
TEST_ENV {}
TUTORIAL
{
KT_LOG_TITLE_BEGIN("TUTORIAL - How to setup GameKiNavTag with GameKitTraverseLogicData");
CHECK(env.LoadAndAddNavData(
"GeneratedNavData/plan/plan.NavData") !=
KY_NULL);
navTag_exclusive.
SetAsExclusive();
navTag_1.SetLayerID(1);
tagVolumeInitConfig.
m_world = env.GetWorld();
tagVolumeInitConfig.
m_altitudeMin = -1.0f;
tagVolumeInitConfig.
m_altitudeMax = 1.0f;
center.
Set(0.0f, 110.0f);
tagVolumeInitConfig.
m_navTag = navTag_0.
GetDynamicNavTag();
tagVolume_0->
Init(tagVolumeInitConfig);
tagVolumeInitConfig.
m_navTag = navTag_exclusive.GetDynamicNavTag();
Kaim::Ptr<Kaim::TagVolume> tagVolume_exclusive = *KY_NEW Kaim::TagVolume();
tagVolume_exclusive->
Init(tagVolumeInitConfig);
center.
Set(0.0f, -50.0f);
tagVolumeInitConfig.
m_navTag = navTag_1.GetDynamicNavTag();
Kaim::Ptr<Kaim::TagVolume> tagVolume_1 = *KY_NEW Kaim::TagVolume();
tagVolume_1->
Init(tagVolumeInitConfig);
env.StartVisualDebugUsingLocalFile("GamkitNavTag.VisualDebug");
while (env.GetWorld()->GetTagVolumesToBeIntegratedCount() != 0)
env.Update();
Kaim::Ptr<Kaim::GameKitNavTagLayerCostTable> layerCostTable = *KY_NEW Kaim::GameKitNavTagLayerCostTable();
Kaim::GameKitTraverseLogicData traverseLogicData;
traverseLogicData.SetLayerCostTable(layerCostTable);
query->BindToDatabase(env.GetDefaultDatabase());
query->SetTraverseLogicUserData(&traverseLogicData);
query->PerformQueryBlocking();
CHECK(IsAPathNodeOnNavTag(query->GetPath(), navTag_0.GetDynamicNavTag()));
layerCostTable->SetLayerCostMultiplier(0, 10.f);
query->PerformQueryBlocking();
CHECK(IsAPathNodeOnNavTag(query->GetPath(), navTag_1.GetDynamicNavTag()));
layerCostTable->SetLayerCostMultiplier(1, 2.f);
query->PerformQueryBlocking();
CHECK(IsAPathNodeOnNavTag(query->GetPath(), navTag_1.GetDynamicNavTag()));
layerCostTable->ForbidLayer(1);
query->PerformQueryBlocking();
CHECK(IsAPathNodeOnNavTag(query->GetPath(), navTag_0.GetDynamicNavTag()));
layerCostTable->AllowLayer(1);
query->PerformQueryBlocking();
CHECK(IsAPathNodeOnNavTag(query->GetPath(), navTag_1.GetDynamicNavTag()));
layerCostTable->SetLayerCostMultiplier(0, 1.f);
query->PerformQueryBlocking();
CHECK(IsAPathNodeOnNavTag(query->GetPath(), navTag_0.GetDynamicNavTag()));
}
}