public override void Mover(Vector2Int posFinal, MapaSala mapa) { if (_percurso == null || _percurso.Count == 0 || _posfinal != posFinal) { _percurso = new Queue <Node>(FindObjectOfType <Pathfinding>().MenorCaminho(CurrentNode.PosMatrix, posFinal, mapa)); _posfinal = posFinal; } float distancia = Vector3.Distance(_transform.position, _currentPosition.PosWorld); if (distancia > 0.1f) { Vector3 direcao = _currentPosition.PosWorld - transform.position; direcao = direcao.normalized; direcao.z = 0; _transform.position += direcao * Time.deltaTime * 2; } else if (_percurso.Count > 0) { _currentPosition = _percurso.Dequeue(); if (_percurso.Count == 0) { foreach (Node node in mapa.Mapa.Values) { node.transform.GetComponent <SpriteRenderer>().color = Color.white; } } } }
public override IEnumerator Enter() { Debug.Log("Aonde está você?"); yield return(new WaitForSeconds(1)); MapaSala[] todosMapas = GameObject.FindObjectOfType <GameManager>().Mapas; foreach (MapaSala mapa in todosMapas) { if (mapa.Regiao == _stateMachine.Enemy._regiaoAtual) { _mapa = mapa; _alvo = mapa.GetRandomNode(); } } base.Enter(); }
public override IEnumerator Enter() { yield return(new WaitForSeconds(0.1f)); MapaSala[] todosMapas = GameObject.FindObjectOfType <GameManager>().Mapas; foreach (MapaSala mapa in todosMapas) { if (mapa.Regiao == _stateMachine.Enemy._regiaoAtual) { _mapa = mapa; _alvo = GameObject.FindObjectOfType <GameManager>().Personagem.CurrentPosition; break; } } base.Enter(); }
public Node[] MenorCaminho(Vector2Int inicio, Vector2Int fim, MapaSala mapa) { _percuso = mapa.Mapa; Node inicioNode = _percuso[inicio]; Node fimNode = _percuso[fim]; LimparNodes(); DistanciaHeuristica(fimNode); inicioNode.G = 0; List <Node> listaAberta = new List <Node>(); HashSet <Node> listaFechada = new HashSet <Node>(); listaAberta.Add(inicioNode); while (listaAberta.Count > 0) { Node currentNode = BuscarMenorF(listaAberta); listaAberta.Remove(currentNode); listaFechada.Add(currentNode); if (currentNode.PosMatrix == fimNode.PosMatrix) { Node[] resultado = new Node[listaFechada.Count]; listaFechada.CopyTo(resultado); List <Node> caminhoFinal = new List <Node>(); Node node = currentNode; caminhoFinal.Add(currentNode); while (node.Anterior != null) { caminhoFinal.Add(node.Anterior); node = node.Anterior; } caminhoFinal.Reverse(); return(caminhoFinal.ToArray()); } foreach (Node item in BuscarAdjacentes(currentNode)) { if (listaFechada.Contains(item)) { continue; } float novoG = DistanciaEntreDoisNode(currentNode, item); if (novoG < item.G) { item.G = novoG + currentNode.G; item.Anterior = currentNode; if (!listaAberta.Contains(item)) { listaAberta.Add(item); } } } } return(null); }