dtCrowd::update在updateMoveRequest后会执行updateTopologyOptimization
----------
dtCrowd::updateTopologyOptimization(dtCrowdAgent**agents,constintnagents,constfloatdt):
强制位移可能导致agent position不在corridor里面了,
久而久之会导致corridor不是最优的了,
这个函数用来re-optimizethe corridor.
首先把符合条件的agent加入到queue里面
然后遍历queue执行optimizePathTopology
====
dtPathCorridor::optimizePathTopology(dtNavMeshQuery*navquery,constdtQueryFilter*filter)
还是先走
initSlicedFindPath
updateSlicedFindPath
finalizeSlicedFindPathPartial
dtMergeCorridorStartShortcut相当于NavMeshTesterTool里面的fixupCorridor
总得来说就是把visited里面有而path里面没有的加到path里面去
dtMergeCorridorStartShortcut(dtPolyRef*path,constintnpath,constintmaxPath,
constdtPolyRef*visited,constintnvisited):
首先path和visited从后往前找path[i]== visited[j]
constintreq= furthestVisited;
if(req<= 0)
returnnpath;
当是0的时候直接返回
已经找到了visited的第一个了
后面的操作就是把visited里面的furthestVisited之前的部分
与path里面furthestPath以及后面的部分
连接起来