IEnumerator DecideAction() { while (true) { if (stateHandler.IsCurrentState(EnemyStateHandler.States.Patrolling) || stateHandler.IsCurrentState(EnemyStateHandler.States.Chasing)) { if (playerDetection.IsPlayerInView()) { stateHandler.SwitchToDetectedPlayerState(); movement.StopRotating(); Vector3 rotateDir = (GameManager.instance.player.transform.position - transform.position).normalized; yield return(StartCoroutine(movement.RotateTowardsDirection(rotateDir))); if (!stateHandler.IsCurrentState(EnemyStateHandler.States.Dead)) { yield return(StartCoroutine(playerDetection.CheckIfHeldLineOfSight())); } } else { HandleWaypoint(waypointHandler.GetCurrentWaypoint()); } } else if (stateHandler.IsCurrentState(EnemyStateHandler.States.Shooting)) { gunHandler.Shoot(); transform.forward = (GameManager.instance.player.transform.position - transform.position).normalized; if (!playerDetection.IsPlayerInView()) { stateHandler.SwitchToChasingState(); } } else if (stateHandler.IsCurrentState(EnemyStateHandler.States.LookAround)) { if (!movement.isLookingAround) { StartCoroutine(movement.LookAroundForPlayer()); } } yield return(new WaitForFixedUpdate()); } }