本文整理汇总了C++中UNavigationSystem::GetCustomLink方法的典型用法代码示例。如果您正苦于以下问题:C++ UNavigationSystem::GetCustomLink方法的具体用法?C++ UNavigationSystem::GetCustomLink怎么用?C++ UNavigationSystem::GetCustomLink使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UNavigationSystem
的用法示例。
在下文中一共展示了UNavigationSystem::GetCustomLink方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateAgentPaths
void UCrowdManager::UpdateAgentPaths()
{
UNavigationSystem* NavSys = Cast<UNavigationSystem>(GetOuter());
ARecastNavMesh* RecastNavData = Cast<ARecastNavMesh>(MyNavData);
FPImplRecastNavMesh* PImplNavMesh = RecastNavData ? RecastNavData->RecastNavMeshImpl : NULL;
if (PImplNavMesh == NULL)
{
return;
}
const dtCrowdAgentAnimation* AgentAnims = DetourCrowd->getAgentAnims();
for (auto It = ActiveAgents.CreateIterator(); It; ++It)
{
FCrowdAgentData& AgentData = It.Value();
if (AgentData.bIsSimulated && AgentData.IsValid())
{
UCrowdFollowingComponent* CrowdComponent = nullptr;
const dtCrowdAgent* Agent = DetourCrowd->getAgent(AgentData.AgentIndex);
dtPolyRef AgentPolyRef = Agent->corridor.getFirstPoly();
// look for newly triggered smart links
const dtCrowdAgentAnimation& AnimInfo = AgentAnims[AgentData.AgentIndex];
if (AnimInfo.active)
{
AgentPolyRef = AnimInfo.polyRef;
if (AnimInfo.t == 0)
{
const uint32 NavLinkId = PImplNavMesh->GetLinkUserId(AnimInfo.polyRef);
INavLinkCustomInterface* CustomLink = NavSys->GetCustomLink(NavLinkId);
if (CustomLink)
{
FVector EndPt = Recast2UnrealPoint(AnimInfo.endPos);
// switch to waiting state
DetourCrowd->setAgentWaiting(AgentData.AgentIndex);
DetourCrowd->resetAgentVelocity(AgentData.AgentIndex);
// start using smart link
CrowdComponent = (CrowdComponent ? CrowdComponent : (UCrowdFollowingComponent*)Cast<const UCrowdFollowingComponent>(It.Key()));
if (CrowdComponent)
{
CrowdComponent->StartUsingCustomLink(CustomLink, EndPt);
}
}
}
}
// look for poly updates
if (AgentPolyRef != AgentData.PrevPoly)
{
CrowdComponent = (CrowdComponent ? CrowdComponent : (UCrowdFollowingComponent*)Cast<const UCrowdFollowingComponent>(It.Key()));
if (CrowdComponent)
{
CrowdComponent->OnNavNodeChanged(AgentPolyRef, AgentData.PrevPoly, Agent->corridor.getPathCount());
AgentData.PrevPoly = AgentPolyRef;
}
}
}
}
}