private void UpdateActionIfTargetPointReached() { switch (_creatureState) { case CreatureState.PlayerHostile: _creatureAgent.stoppingDistance = stopFromPlayer; if (!_attacking && CreatureHelpers.IsAngleWithinToleranceLevel(_currentNormalizedAngle, angleToleranceLevel)) { _coroutine = StartCoroutine(AttackPlayer()); } break; case CreatureState.PlayerFound: _creatureAgent.stoppingDistance = stopFromPlayer; break; case CreatureState.Idle: _creatureAgent.stoppingDistance = stopFromPoint; break; } if (!_creatureAgent.pathPending && !_lazingAround && _creatureState == CreatureState.Idle) { if (_creatureAgent.remainingDistance <= _creatureAgent.stoppingDistance) { if (!_creatureAgent.hasPath || _creatureAgent.velocity.sqrMagnitude == 0f) { _coroutine = StartCoroutine(LazeAroundPoint()); } } } }
private void CheckAndSetNextTarget() { if (_creatureState == CreatureState.PlayerHostile) { SetPlayerTarget(); } else { float angleWRTTarget = CreatureHelpers .CheckTargetInsideFOV(_player, maximumDetectionDistance, lookAngle, lookingPoint); if (angleWRTTarget != -1) { _creatureState = CreatureState.PlayerFound; _currentNormalizedAngle = angleWRTTarget; SetPlayerTarget(); } else if (_creatureState == CreatureState.PlayerFound) { _creatureState = CreatureState.Idle; SelectRandomPatrolPoint(); } } }