//Espera terminar de andar para interagir com o objeto. private IEnumerator WaitForInteractable(Vector3[] _destinoWorldPoint, GotToInteractable _event) { if (path != null && path.Count > 1) { path.RemoveRange(0, path.Count - 2); } yield return(new WaitUntil(() => walkCoroutine == null)); if (_camera == null) { _camera = FindObjectOfType <Camera>(); } path = GridScript.gridScript.FindPathToInteractable(transform.position + footbaseOffset, _destinoWorldPoint); // Configurar as funções que serão executadas quando Lurdinha // chegar ao seu destino // Primeiro, o campo hasTarget = false para que os próximos comandos // de movimento não sejam ignorados (Lurdinha NÃO se movimenta se // ela tiver um alvo, ou seja, se hasTarget == true) //PathFinder.gotToInteractable += (() => hasTarget = false); // Então, a função relacionada ao seu objetivo será executada, ela foi // passada como o parâmetro _event PathFinder.gotToInteractable += _event; if (path == null) { if (gotToInteractable != null) { gotToInteractable(); gotToInteractable -= gotToInteractable; Vector3 point = lookTo[0]; for (int i = 1; i < lookTo.Length; i++) { if ((point - transform.position).magnitude > (lookTo[i] - transform.position).magnitude) { point = lookTo[i]; } } Turn(point); lookTo = null; } else { Turn(_camera.ScreenToWorldPoint(Input.mousePosition)); } } }
//Começar a corotina WaitForInteractable public void WalkToInteractable(Vector3[] _destinoWorldPoint, GotToInteractable _event) { lookTo = _destinoWorldPoint; StartCoroutine(WaitForInteractable(_destinoWorldPoint, _event)); }