IEnumerator AStar()
{
tiles[0, 0].gx = 0;
queue.Add(tiles[0, 0]); //우선순위 큐
while(queue.Count > 0)
{
var node = queue.Get();
if(!set.Add(node))
{
continue;
}
node.CheckVisited(); //이미지 색 변경
yield return new WaitForSeconds(0.1f);
if(node.x == 14 && node.y == 14) //경로 발견
{
Debug.Log("Found!");
yield break;
}
for(int i=-1;i<=1;i++)
{
for(int j=-1;j<=1;j++)
{
int nextx = Mathf.Clamp(node.x+i, 0, 14);
int nexty = Mathf.Clamp(node.y+j, 0, 14);
int cost = i == 0 || j == 0 ? 10 : 14;
if(!set.Contains(tiles[nextx, nexty]) && !tiles[nextx, nexty].isWall)
{
if(tiles[node.x, node.y].gx + cost + tiles[nextx,nexty].hx < tiles[nextx, nexty].gx + tiles[nextx, nexty].hx)
{
tiles[nextx, nexty].gx = tiles[node.x, node.y].gx+cost;
tiles[nextx, nexty].parentx = node.x;
tiles[nextx, nexty].parenty = node.y;
queue.Add(tiles[nextx, nexty]);
}
}
}
}
}
//경로 미발견
Debug.Log("Not Found!!");
}