public IEnumerator Execute() { while (owner.StateMachine.CurrentState is PatrolState) { var isPatrol = Random.Range(1, 3) == 1; if (isPatrol) { var startPos = owner.transform.position; var numberOfMoves = Random.Range(1, 10); while (numberOfMoves > 0) { EnemyAnimations.ResetAllAnimParameters(owner); EnemyAnimations.SetAnimation(owner, "Walk"); var dest = startPos + new Vector3(Random.Range(-10f, 10f), 0, Random.Range(-10f, 10f)); agent.SetDestination(dest); var time = (dest - owner.transform.position).magnitude / agent.speed; yield return(new WaitForSeconds(time)); numberOfMoves--; } } else { agent.ResetPath(); EnemyAnimations.ResetAllAnimParameters(owner); EnemyAnimations.SetAnimation(owner, "Idle"); yield return(new WaitForSeconds(ownerChillTime)); } } }
public IEnumerator Execute() { EnemyAnimations.ResetAllAnimParameters(owner); EnemyAnimations.SetAnimation(owner, "Walk"); while (owner.StateMachine.CurrentState is ChasingState) { LookAt(player); agent.SetDestination(player.position); yield return(null); } }
public IEnumerator Execute() { agent.ResetPath(); if (owner.EnemySo.TypeEnemy == EnemySO.EnemyType.Ranged) { Coroutine lookAtCoroutine = null; while (owner.StateMachine.CurrentState is AttackState) { EnemyAnimations.ResetAllAnimParameters(owner); EnemyAnimations.SetAnimation(owner, "Attack"); if (!(lookAtCoroutine is null)) { owner.StopCoroutine(lookAtCoroutine); } lookAtCoroutine = owner.StartCoroutine(LookAtPlayer(player)); if (Physics.Raycast(owner.transform.position, owner.transform.TransformDirection(Vector3.forward), out var hit, layerMask)) { owner.Line.SetPosition(0, owner.transform.position); owner.Line.SetPosition(1, hit.point); if (hit.transform.TryGetComponent <PlayerHealth>(out var plHealth)) { plHealth.playerHealthDecrease.Invoke(owner.EnemyRaw.Damage); } } else { owner.Line.SetPosition(0, owner.transform.position); owner.Line.SetPosition(1, owner.transform.TransformDirection(Vector3.forward)); } yield return(new WaitForSeconds(ownerAnimator.GetCurrentAnimatorStateInfo(0).length)); }