|
|
|
@ -45,9 +45,9 @@ void Pathfinding::Initialize(){ |
|
|
|
|
nodeEnd = &nodes[(game->WORLD_SIZE.y / 2) * game->WORLD_SIZE.x + game->WORLD_SIZE.x-2]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int Pathfinding::Solve_AStar(vf2d startPos,vf2d endPos,float maxRange,bool upperLevel){ |
|
|
|
|
std::vector<vf2d> Pathfinding::Solve_AStar(vf2d startPos,vf2d endPos,float maxRange,bool upperLevel){ |
|
|
|
|
float dist=sqrt(pow(endPos.x-startPos.x,2)+pow(endPos.y-startPos.y,2)); |
|
|
|
|
if(dist>maxRange*24)return maxRange; |
|
|
|
|
if(dist>maxRange*24)return {}; |
|
|
|
|
|
|
|
|
|
nodeStart=&nodes[int(startPos.y/24)*game->WORLD_SIZE.x+int(startPos.x/24)]; |
|
|
|
|
nodeEnd=&nodes[int(endPos.y/24)*game->WORLD_SIZE.x+int(endPos.x/24)]; |
|
|
|
@ -112,12 +112,13 @@ int Pathfinding::Solve_AStar(vf2d startPos,vf2d endPos,float maxRange,bool upper |
|
|
|
|
nodeNeighbour->fGlobalGoal = nodeNeighbour->fLocalGoal + heuristic(nodeNeighbour, nodeEnd); |
|
|
|
|
} |
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (nodeEnd != nullptr) |
|
|
|
|
{ |
|
|
|
|
int pathLength=INFINITE; |
|
|
|
|
sNode *p = nodeEnd; |
|
|
|
|
std::vector<vf2d>finalPath; |
|
|
|
|
while (p->parent != nullptr) |
|
|
|
|
{ |
|
|
|
|
if(pathLength==INFINITE){ |
|
|
|
@ -125,10 +126,12 @@ int Pathfinding::Solve_AStar(vf2d startPos,vf2d endPos,float maxRange,bool upper |
|
|
|
|
} else { |
|
|
|
|
pathLength++; |
|
|
|
|
} |
|
|
|
|
finalPath.push_back({float((*p).x),float((*p).y)}); |
|
|
|
|
p = p->parent; |
|
|
|
|
} |
|
|
|
|
return pathLength; |
|
|
|
|
std::reverse(finalPath.begin(),finalPath.end()); |
|
|
|
|
return finalPath; |
|
|
|
|
} else { |
|
|
|
|
return INFINITE; |
|
|
|
|
return {}; |
|
|
|
|
} |
|
|
|
|
} |