void UpdateEnemy(EnemyQuirk quirk, List <Unit> players) { Unit enemyUnit = quirk.unit; Unit.ManagerState.AiData aiData = enemyUnit.manState.aiData; switch (aiData.state) { case Unit.AiState.Idle: Unit closestPlayer = unitMan.GetClosestUnit(enemyUnit, players); aiData.closestTarget = closestPlayer; if (closestPlayer == null) { break; } if (unitMan.DistanceBetweenUnits(enemyUnit, closestPlayer) <= quirk.detectRange) { aiData.state = Unit.AiState.Chasing; aiData.chasingTarget = closestPlayer; } break; case Unit.AiState.Chasing: if (unitMan.DistanceBetweenUnits(enemyUnit, aiData.chasingTarget) > quirk.chaseRange) { aiData.state = Unit.AiState.Idle; } break; } }
#pragma warning restore 0649 #endregion // Serialized Fields #endregion // Fields #region Properties #endregion // Properties #region Methods public override void DoUpdate() { Unit.State.Persistent persistent = unit.state.persistent; Unit.State.Momentary momentary = unit.state.momentary; Unit.ManagerState manState = unit.manState; Unit.ManagerState.AiData aiData = manState.aiData; switch (aiData.state) { case Unit.AiState.Idle: persistent.navTarget = manState.homePoint; break; case Unit.AiState.Chasing: persistent.navTarget = aiData.closestTarget.transform.position; break; } }