|
|
|
|
@@ -1466,11 +1466,8 @@ CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector ta
|
|
|
|
|
targetNode = FindNodeClosestToCoors(target, type, distLimit);
|
|
|
|
|
else
|
|
|
|
|
targetNode = forcedTargetNode;
|
|
|
|
|
if(targetNode < 0) {
|
|
|
|
|
*pNumNodes = 0;
|
|
|
|
|
if(pDist) *pDist = 100000.0f;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(targetNode < 0)
|
|
|
|
|
goto fail;
|
|
|
|
|
|
|
|
|
|
// Find start
|
|
|
|
|
int numPathsToTry;
|
|
|
|
|
@@ -1489,28 +1486,19 @@ CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector ta
|
|
|
|
|
numPathsToTry = 1;
|
|
|
|
|
startObj = m_mapObjects[m_pathNodes[startNodeId].objectIndex];
|
|
|
|
|
}
|
|
|
|
|
if(numPathsToTry == 0) {
|
|
|
|
|
*pNumNodes = 0;
|
|
|
|
|
if(pDist) *pDist = 100000.0f;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(numPathsToTry == 0)
|
|
|
|
|
goto fail;
|
|
|
|
|
|
|
|
|
|
if(startNodeId < 0){
|
|
|
|
|
// why only check node 0?
|
|
|
|
|
if(m_pathNodes[startObj->m_nodeIndices[type][0]].group !=
|
|
|
|
|
m_pathNodes[targetNode].group) {
|
|
|
|
|
*pNumNodes = 0;
|
|
|
|
|
if(pDist) *pDist = 100000.0f;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(m_pathNodes[startObj->m_nodeIndices[type][0]].group != m_pathNodes[targetNode].group)
|
|
|
|
|
goto fail;
|
|
|
|
|
}else{
|
|
|
|
|
if(m_pathNodes[startNodeId].group != m_pathNodes[targetNode].group) {
|
|
|
|
|
*pNumNodes = 0;
|
|
|
|
|
if(pDist) *pDist = 100000.0f;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(m_pathNodes[startNodeId].group != m_pathNodes[targetNode].group)
|
|
|
|
|
goto fail;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < 512; i++)
|
|
|
|
|
m_searchNodes[i].next = nil;
|
|
|
|
|
AddNodeToList(&m_pathNodes[targetNode], 0);
|
|
|
|
|
@@ -1588,6 +1576,11 @@ CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector ta
|
|
|
|
|
for(i = 0; i < numNodesToBeCleared; i++)
|
|
|
|
|
apNodesToBeCleared[i]->distance = MAX_DIST;
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
fail:
|
|
|
|
|
*pNumNodes = 0;
|
|
|
|
|
if(pDist)
|
|
|
|
|
*pDist = 100000.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static CPathNode *pNodeList[32];
|
|
|
|
|
|