Camera now following Pawn

This commit is contained in:
2022-01-26 16:48:58 +01:00
parent 986233d960
commit b7b9963a68
7 changed files with 56 additions and 45 deletions

View File

@ -3,6 +3,7 @@
#include "AdventureMap.h"
#include "HexTile.h"
#include "AdventurePlayerController.h"
#include "Kismet/GameplayStatics.h"
#include "Algo/Reverse.h"
@ -81,14 +82,19 @@ AHexTile* AAdventureMap::RandomHex()
TArray<AHexTile*> AAdventureMap::Neighbors(AHexTile* OfHex)
{
TArray<AHexTile*> Neighbors;
int32 Arr[] = { GridIndex(OfHex->Q+1, OfHex->R), GridIndex(OfHex->Q+1, OfHex->R-1),
GridIndex(OfHex->Q, OfHex->R-1), GridIndex(OfHex->Q-1, OfHex->R),
GridIndex(OfHex->Q-1, OfHex->R+1), GridIndex(OfHex->Q, OfHex->R+1) };
TArray<int32> Indeces;
Indeces.Append(Arr, UE_ARRAY_COUNT(Arr));
Neighbors.Add(RandomHex()); // pathetic but necessary
for (auto& I : Indeces) { if (Grid.IsValidIndex(I) && OfHex->Distance(Grid[I]) == 1) { Neighbors.Add(Grid[I]); } }
Indeces.Add(GridIndex(OfHex->Q + NE.Key, OfHex->R + NE.Value));
Indeces.Add(GridIndex(OfHex->Q + E.Key, OfHex->R + E.Value));
Indeces.Add(GridIndex(OfHex->Q + SE.Key, OfHex->R + SE.Value));
Indeces.Add(GridIndex(OfHex->Q + SW.Key, OfHex->R + SW.Value));
Indeces.Add(GridIndex(OfHex->Q + W.Key, OfHex->R + W.Value));
Indeces.Add(GridIndex(OfHex->Q + NW.Key, OfHex->R + NW.Value));
for (auto& I : Indeces) {
if (Grid.IsValidIndex(I)) { if (OfHex->Distance(Grid[I]) == 1) { Neighbors.Add(Grid[I]); } }
}
return Neighbors;
}
@ -98,6 +104,7 @@ TArray<AHexTile*> AAdventureMap::BreadthFirstSearch(AHexTile* Start, int32 Radiu
TArray<AHexTile*> ToExamine;
TSet<AHexTile*> Processed;
Results.Add(Start);
ToExamine.Add(Start);
while (!ToExamine.IsEmpty()) {
@ -107,19 +114,17 @@ TArray<AHexTile*> AAdventureMap::BreadthFirstSearch(AHexTile* Start, int32 Radiu
ToExamine.Remove(Candidate);
for (AHexTile* Neighbor : Neighbors(Candidate)) {
if (Neighbor->Distance(Candidate) > 1) { continue; }
if (Processed.Contains(Neighbor)) { continue; }
if (Neighbor->Distance(Candidate) > 1) { continue; }
if (Processed.Contains(Neighbor)) { continue; }
if (Neighbor->Distance(Start) > Radius) { continue; }
if (Neighbor->Distance(Start) <= Radius) {
ToExamine.Add(Neighbor);
Results.Add(Neighbor);
}
ToExamine.Add(Neighbor);
Results.Add(Neighbor);
}
}
Results.Add(Start);
return Results;
}
TArray<AHexTile*> AAdventureMap::AStar(AHexTile* Start, AHexTile* Goal)
{
TArray<AHexTile*> ToExamine;
@ -128,15 +133,15 @@ TArray<AHexTile*> AAdventureMap::AStar(AHexTile* Start, AHexTile* Goal)
while (!ToExamine.IsEmpty()) {
AHexTile* Candidate = ToExamine[0];
ToExamine.Remove(Candidate);
// estimate closest known Hex to Goal
for (auto& t : ToExamine) {
int32 FCost = t->GCost + t->HCost;
t->FCost = t->GCost + t->HCost;
if (t->FCost < Candidate->FCost || t->FCost == Candidate->FCost && t->HCost < Candidate->HCost) { Candidate = t; }
}
Processed.Add(Candidate);
ToExamine.Remove(Candidate);
// exit
if (Candidate == Goal) { break; }