removed alternative implemenation of A* for now

This commit is contained in:
Maximilian Fajnberg 2022-01-17 17:58:30 +01:00
parent 6c1c0579cb
commit 5c1535da32
1 changed files with 1 additions and 80 deletions

View File

@ -178,83 +178,4 @@ TArray<AHexTile*> AAdventureMap::FindPathAStar(AHexTile* Start, AHexTile* Goal)
}
Algo::Reverse(Path);
return Path;
}
/*
// alternative implementation using faster built in priority queue data structure
TArray<AHexTile*> AAdventureMap::FindPathAStarPQ(AHexTile* Start, AHexTile* Goal)
{
// TArray<AHexTile*> PQ;
std::priority_queue<AHexTile*, std::vector<AHexTile*>> PQ; // currently missing a custom comparator as third template arg (designating effective priority of pq elements)
std::unordered_map<AHexTile*, AHexTile*> CameFrom; // if in doubt: switch to templates instead of predefined hex types
// PQ.Init(Start, 1);
PQ.push(Start);
CameFrom[Start] = Start;
// while (!PQ.IsEmpty())
while (!PQ.empty())
{
AHexTile* Current = PQ.top();
// PQ.RemoveAt(0);
PQ.pop();
if (Current == Goal)
{
UE_LOG(LogTemp, Warning, TEXT("Goal found!")); // debug
break;
}
// Expanding the Frontier
for (AHexTile* Next : Neighbors(Current))
{
int32 NewCost = Current->CostSoFar + Next->MoveCost;
// UE_LOG(LogTemp, Warning, TEXT("Cost calculated.")); // debug
if (!PQ.Contains(Next) || NewCost < Next->CostSoFar)
{
// UE_LOG(LogTemp, Warning, TEXT("New candidate found.")); // debug
Next->CostSoFar = NewCost;
int32 NewPrio = NewCost + Next->Distance(Goal);
// Adjust the Priority Queue
if (PQ.Contains(Next)) { PQ.Remove(Next); }
for (AHexTile* Hex : PQ) // at this point PQ is empty, need to make sure it's not.
{
int32 OldPrio = Hex->CostSoFar + Hex->Distance(Goal);
int32 Index;
PQ.Find(Hex, Index);
// UE_LOG(LogTemp, Warning, TEXT("Comparing priorities...")); // debug
if (OldPrio > NewPrio)
{
PQ.Insert(Next, Index);
Next->CameFrom = Current;
// UE_LOG(LogTemp, Warning, TEXT("Looks promising!")); // debug
break;
}
if (Index == PQ.Num() - 1 && OldPrio <= NewPrio)
{
PQ.Emplace(Next);
Next->CameFrom = Current;
// UE_LOG(LogTemp, Warning, TEXT("Low prio added")); // debug
break;
}
}
if (PQ.IsEmpty()) { PQ.Emplace(Next); }
}
}
}
TArray<AHexTile*> Path;
AHexTile* Hex = Goal;
while (Hex != Start)
{
Path.Emplace(Hex);
Hex = Hex->CameFrom;
}
Algo::Reverse(Path);
return Path;
}
*/
}