IEnumerator ResolvePorAEstrela() { List <Celula> fila = new List <Celula>(); List <Celula> visitados = new List <Celula>(); Celula atual = raiz; Transform fundo = atual.gameObject.transform.GetChild(1); fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.blue; atual.GScore = 0; atual.HScore = (int)((atual.gameObject.transform.position - fim.gameObject.transform.position).magnitude * 1000); atual.FScore = atual.HScore; while (true) // && c<15) { { List <Celula> filhos = atual.getFilhos(); print(string.Format("atual: {0} H: {1} G: {2} F: {3}", atual.id, atual.HScore, atual.GScore, atual.FScore)); foreach (Celula v in filhos) { v.HScore = (int)((v.gameObject.transform.position - fim.gameObject.transform.position).magnitude * 1000); v.GScore = v.pai.GScore + 10; v.FScore = v.GScore + v.HScore; fila.Add(v); fundo = v.gameObject.transform.GetChild(1); fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.gray; } if (!instantaneo) { yield return(new WaitForSeconds(velocidade)); } ; fila.Sort((x, y) => x.FScore.CompareTo(y.FScore)); atual = fila[0]; visitados.Add(atual); fila.Remove(atual); if (atual == fim) { fundo = fim.gameObject.transform.GetChild(1); fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.red; break; } fundo = atual.gameObject.transform.GetChild(1); fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.blue; if (!instantaneo) { yield return(new WaitForSeconds(velocidade)); } } //achou o caminho atual = fim; while (atual.pai != null) { atual = atual.pai; fundo = atual.gameObject.transform.GetChild(1); fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.green; yield return(new WaitForSeconds(velocidade)); } btnGera.interactable = true; yield return(null); }