astar is animated primitively

This commit is contained in:
Simon O'Shea
2023-08-09 09:37:44 -04:00
parent ea904845a7
commit cd15c103c6
3 changed files with 32 additions and 20 deletions
@@ -78,6 +78,24 @@ public class CellMesh : MonoBehaviour
mesh.triangles = triangles; mesh.triangles = triangles;
} }
public void Animate(Stack<Node> result)
{
int count = result.Count;
for (int i = 0; i < count; i++)
{
Node n = result.Pop();
Debug.Log("Agent at: " + n.agent.x + ", " + n.agent.y);
Debug.Log(n.lastMove);
grid.SetValue(n.agent.x, n.agent.y, 3);
//grid.SetValue(n.parent.agent.x, n.parent.agent.y, 0);
UpdateCellVisual();
}
}
void Start() void Start()
{ {
@@ -102,14 +102,16 @@ public class Main : MonoBehaviour
public void ResetGrid() public void ResetGrid()
{ {
world.reset(); world.reset();
agent = new Vector2Int(-1, -1); agent = new Vector2Int();
obstacles = new List<Vector2Int>(); obstacles = new List<Vector2Int>();
samples = new List<Vector2Int>(); samples = new List<Vector2Int>();
} }
public void StartAlgorithm() public void StartAlgorithm()
{ {
Vector2Int coord = new Vector2Int(); Vector2Int coord = new Vector2Int();
bool agentFound = false;
// Collect information about world // Collect information about world
for (int x = 0; x < world.GetWidth(); x++) for (int x = 0; x < world.GetWidth(); x++)
@@ -138,15 +140,16 @@ public class Main : MonoBehaviour
if (!samples.Contains(coord)) if (!samples.Contains(coord))
samples.Add(coord); samples.Add(coord);
} }
// Add coordinate to obstacle array // Add coordinate to agent array
if (value == 3) if (value == 3)
{ {
agent.x = x; agent.x = x;
agent.y = y; agent.y = y;
agentFound = true;
} }
} }
if (agent.x == -1 && agent.y == -1) if (!agentFound)
{ {
Debug.Log("NO AGENT!"); Debug.Log("NO AGENT!");
return; return;
@@ -158,10 +161,11 @@ public class Main : MonoBehaviour
return; return;
} }
if ( true ) if ( true )
{ {
Pathfinder path = new Pathfinder(world, agent, obstacles, samples, 0, 0); Pathfinder path = new Pathfinder(world, agent, obstacles, samples, 0, 0);
Stack<Node> result = path.result;
cellMesh.Animate(result);
} }
} }
@@ -21,12 +21,12 @@ public class Pathfinder
public static int height; public static int height;
public static int width; public static int width;
public static Stack<Node> result; public Stack<Node> result;
public Pathfinder(LogicGrid world, Vector2Int a, List<Vector2Int> o, List<Vector2Int> s, int algo, int heu) public Pathfinder(LogicGrid world, Vector2Int a, List<Vector2Int> o, List<Vector2Int> s, int algo, int heu)
{ {
this.world = world; this.world = world;
height = world.GetHeight(); height = world.GetHeight();
width = world.GetWidth(); width = world.GetWidth();
@@ -39,9 +39,6 @@ public class Pathfinder
//printInfo(); //printInfo();
StartWork(); StartWork();
} }
@@ -69,21 +66,14 @@ public class Pathfinder
if (algorithm == 0) if (algorithm == 0)
{ {
result = StartAStar(initialState); result = StartAStar(initialState);
Debug.Log(" ");
int count = result.Count;
for(int i = 0; i < count; i++)
{
Node n = result.Pop();
Debug.Log("Agent at: " + n.agent.x + ", " + n.agent.y);
Debug.Log(n.lastMove);
}
} }
} }
public static Stack<Node> StartAStar(Node initialState) public static Stack<Node> StartAStar(Node initialState)
{ {
Stack<Node> solution = new Stack<Node>(); Debug.Log("GO!");
Stack<Node> solution = new Stack<Node>();
List<Node> open = new List<Node>(); List<Node> open = new List<Node>();
@@ -106,6 +96,7 @@ public class Pathfinder
{ {
Debug.Log("Gottem"); Debug.Log("Gottem");
//Node n = FindLastSample(open); //Node n = FindLastSample(open);
while (currentNode.parent != null) while (currentNode.parent != null)
@@ -299,7 +290,6 @@ public class Node
onSample = CanSample(); onSample = CanSample();
if (onSample.x == 1) if (onSample.x == 1)
{ {
Debug.Log("SAMPLING");
Node child = new Node(this, this.agent, this.samples, 'S', this.distanceTraveled + 1, this.heuristic); Node child = new Node(this, this.agent, this.samples, 'S', this.distanceTraveled + 1, this.heuristic);
child.samples.RemoveAt(onSample.y); child.samples.RemoveAt(onSample.y);