void Start() { droidInformation = GetComponent<DroidInformation>(); path = GetComponent<DroidPath>(); droidInformation.CharacterStateChanged += EnemyInformation_CharacterStateChanged; mode = DroidMode.SeekingPoint; StartCoroutine(SeekPoint(path.NextPoint)); }
void Update() { if (GameInformation.Instance.GameState != GameState.Playing) return; if (droidInformation.CharacterState != CharacterState.Alive) return; cooldown += Time.deltaTime; switch (mode) { case DroidMode.Walking: { if (PlayerIsVisible()) { mode = DroidMode.SeekingPlayer; StopAllCoroutines(); StartCoroutine(SeekPlayer()); } else if (Vector3.Distance(transform.position, path.NextPoint) < MaxDistanceTriggerNextPoint) { mode = DroidMode.SeekingPoint; StopAllCoroutines(); StartCoroutine(SeekPoint(path.GetAndSetNextPointIndex())); } else { transform.position += (path.NextPoint - transform.position).normalized * droidInformation.WalkSpeed * Time.deltaTime / 10; } } break; case DroidMode.SeekingPoint: { DebugController.Instance.LogLine("DROID ANGLE: " + Vector3.Angle(transform.forward, path.NextPoint - transform.position)); if (PlayerIsVisible()) { mode = DroidMode.SeekingPlayer; StopAllCoroutines(); StartCoroutine(SeekPlayer()); } else if (Vector3.Angle(transform.forward, path.NextPoint - transform.position) < 0.8) { mode = DroidMode.Walking; StopAllCoroutines(); } } break; case DroidMode.SeekingPlayer: { if (!PlayerIsVisible()) { mode = DroidMode.SeekingPoint; StopAllCoroutines(); StartCoroutine(SeekPoint(path.NextPoint)); } else if (CanFireOnPlayer()) { Fire(); } } break; default: break; } }