// Start is called before the first frame update void Start() { badGuyStates = BadGuyStates.Idle; lastPosition = transform.position; coolTimer = 0; followTimer = 0; }
// Update is called once per frame void Update() { switch (badGuyStates) { case BadGuyStates.Idle: if (BadGuy.LineToPlayer(eyeSight.position)) { badGuyStates = BadGuyStates.SeekingPlayer; lastPosition = transform.position; } break; case BadGuyStates.SeekingPlayer: if (Time.time - followTimer > followPrecision) { followTimer = Time.time; BadGuy.FollowPlayerShell(navMeshAgent, 3, Random.Range(0, 360)); } if (Time.time - fireRateTimer > fireRateTimer) { if (BadGuy.LineToPlayer(eyeSight.position, 10)) { navMeshAgent.isStopped = true; badGuyStates = BadGuyStates.ShotPlayer; coolTimer = Time.time; BadGuy.LaunchProjectile2D(prefab_projectile, eyeSight.position); fireRateTimer = Time.time; } } break; case BadGuyStates.ShotPlayer: if (Time.time - coolTimer < coolDown) { navMeshAgent.isStopped = false; navMeshAgent.SetDestination(lastPosition + Vector3.right * Random.Range(-3, 3)); } else { badGuyStates = BadGuyStates.Idle; } break; } }