astar is animated primitively
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user