public override IEnumerator RunTask(AIHuman _ai) { _ai.CurrentCover = null; crouch (false, _ai); yield return new WaitForSeconds(0.5f); }
public override IEnumerator RunTask(AIHuman _ai) { Vector3 last = lastKnowPosition.Position; if(!_ai.MoveTo(last)) { yield break; } while(true) { for(int i = 0; i < 4; i++) { yield return new WaitForSeconds(0.25f); if(_ai.CanSeePlayer()) //player visible { _ai.Stop(); yield break; } if(Vector3.Distance(_ai.transform.position, lastKnowPosition.Position) < 3f) //walk complete { _ai.Stop(); yield break; } } if(lastKnowPosition.Position != last) //player position changed { _ai.Stop(); break; } } }
public override IEnumerator RunTask(AIHuman _ai) { for(int i = 0; i < 16; i++) { yield return new WaitForSeconds (0.25f); _ai.transform.LookAt(EnemyUtils.PlayerCenter); Vector3 euler = _ai.transform.rotation.eulerAngles; euler.x = 0; _ai.transform.rotation = Quaternion.Euler(euler); _ai.Entity.Events.Invoke(new StartFireEvent()); if(!_ai.CanSeePlayer()) { _ai.Entity.Events.Invoke(new StopFireEvent()); break; } if(_ai.Entity.GetMagazine().Remaining == 0) { _ai.Entity.Events.Invoke(new AttemptReloadEvent()); break; } } }
public void crouch(bool _state, AIHuman _ai) { if (_state) { _ai.Movement.Crouching = true; _ai.Movement.Agent.height = 1.5f; _ai.Movement.Agent.baseOffset = 0.4f; } else { _ai.Movement.Crouching = false; _ai.Movement.Agent.height = 2f; _ai.Movement.Agent.baseOffset = 1f; } }
public override IEnumerator RunTask(AIHuman _ai) { _ai.MoveTo(target); while(true) { yield return new WaitForSeconds(0.25f); if(_ai.Movement.RemainingDistance < 0.5f) { break; } if(!_ai.CurrentCover.IsSafe) { break; } } }
public abstract IEnumerator RunTask(AIHuman _ai);
public override IEnumerator RunTask(AIHuman _ai) { if (cover.GetType () == typeof(CoverWall)) { CoverWall coverObstacle = (CoverWall)cover; if (_ai.Entity.GetMagazine ().Remaining == 0) { _ai.MoveTo (coverObstacle.transform.position); _ai.Entity.Events.Invoke (new AttemptReloadEvent ()); yield return new WaitForSeconds (1f); yield break; } else { _ai.MoveTo(coverObstacle.ShootPosition); for(int i = 0; i < 16; i++) { yield return new WaitForSeconds (0.1f); if(!_ai.IsMoving()) { break; } } _ai.transform.LookAt(EnemyUtils.PlayerCenter); Vector3 euler = _ai.transform.rotation.eulerAngles; euler.x = 0; _ai.transform.rotation = Quaternion.Euler(euler); _ai.Entity.Events.Invoke(new StartFireEvent()); EntityHealth health = _ai.Entity.GetHealth (); float startHealth = health.CurrentHealth; for(int i = 0; i < 20; i++) { yield return new WaitForSeconds (0.1f); if(!_ai.CanSeePlayer() || !_ai.CurrentCover.IsSafe) { _ai.Entity.Events.Invoke(new StopFireEvent()); break; } if(_ai.Entity.GetMagazine().Remaining == 0) { _ai.MoveTo (coverObstacle.transform.position); for(int j = 0; j < 16; j++) { yield return new WaitForSeconds (0.1f); if(!_ai.IsMoving()) { break; } } yield break; } if(health.CurrentHealth < startHealth - 2f) { _ai.Entity.Events.Invoke(new StopFireEvent()); _ai.MoveTo (coverObstacle.transform.position); for(int j = 0; j < 16; j++) { yield return new WaitForSeconds (0.1f); if(!_ai.IsMoving()) { break; } yield return new WaitForSeconds (2f); } yield break; } } } } else { crouch (false, _ai); yield return new WaitForSeconds (0.5f); _ai.transform.LookAt(EnemyUtils.PlayerCenter); Vector3 euler = _ai.transform.rotation.eulerAngles; euler.x = 0; _ai.transform.rotation = Quaternion.Euler(euler); _ai.Entity.Events.Invoke(new StartFireEvent()); for(int i = 0; i < 16; i++) { yield return new WaitForSeconds (0.25f); if(!_ai.CanSeePlayer() || !_ai.CurrentCover.IsSafe) { _ai.Entity.Events.Invoke(new StopFireEvent()); break; } if(_ai.Entity.GetMagazine().Remaining == 0) { crouch (true, _ai); yield return new WaitForSeconds (1f); _ai.Entity.Events.Invoke(new AttemptReloadEvent()); break; } } } }
public override IEnumerator RunTask(AIHuman _ai) { yield return new WaitForSeconds(1f); }