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以及後面的部分
連接起來