Pathfinding now returns the nodes to reach a destination in preparation for use w/AI pathfinding
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
cb24484dfe
commit
debf151c46
@ -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 {};
|
||||
}
|
||||
}
|
@ -21,6 +21,6 @@ struct Pathfinding{
|
||||
sNode *nodeEnd = nullptr;
|
||||
|
||||
void Initialize();
|
||||
//maxRange in tiles.
|
||||
int Solve_AStar(vf2d startPos,vf2d endPos,float maxRange=8,bool upperLevel=false);
|
||||
//maxRange in tiles. Returns the path as points.
|
||||
std::vector<vf2d> Solve_AStar(vf2d startPos,vf2d endPos,float maxRange=8,bool upperLevel=false);
|
||||
};
|
@ -460,6 +460,6 @@ std::vector<Buff>Player::GetBuffs(BuffType buff){
|
||||
}
|
||||
|
||||
bool Player::CanPathfindTo(vf2d pos,vf2d targetPos,float range){
|
||||
int pathLength=path.Solve_AStar(pos,targetPos,8,upperLevel);
|
||||
return pathLength<8;//We'll say 7 tiles or less is close enough to 650 range. Have a little bit of wiggle room.
|
||||
std::vector<vf2d>pathing=path.Solve_AStar(pos,targetPos,8,upperLevel);
|
||||
return pathing.size()>0&&pathing.size()<8;//We'll say 7 tiles or less is close enough to 650 range. Have a little bit of wiggle room.
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user