示例#1
0
        private void SetAgentRandomPatrolPoint()
        {
            if (_lazingAround)
            {
                return;
            }

            _droidAgent.stoppingDistance = distanceToStopFromPatrolPoint;
            var randomPatrolPoint = DroidPatrolHelpers.GetNextTarget(_terrainMeshVertices) +
                                    _meshCenter;

            _currentTarget = transform.parent;

            SetAgentDestination(randomPatrolPoint);
            LookTowardsTarget(randomPatrolPoint);
        }
示例#2
0
        private void CheckPatrolPointTargetReached()
        {
            if (!_droidAgent.isOnNavMesh)
            {
                return;
            }

            switch (_droidAttackTarget)
            {
            case DroidAttackTarget.Player:
                if (!_attacking &&
                    DroidPatrolHelpers.IsAngleWithinToleranceLevel(_currentNormalizedLookAngle, angleTolerance))
                {
                    _coroutine = StartCoroutine(AttackTarget(_player, true));
                }

                break;

            case DroidAttackTarget.Distractor:
                if (!_attacking &&
                    DroidPatrolHelpers.IsAngleWithinToleranceLevel(_currentNormalizedLookAngle, angleTolerance))
                {
                    _coroutine = StartCoroutine(AttackTarget(_currentTarget));
                }

                break;
            }

            if (!_droidAgent.pathPending && !_lazingAround && _droidAttackTarget == DroidAttackTarget.None)
            {
                if (_droidAgent.remainingDistance <= _droidAgent.stoppingDistance)
                {
                    if (!_droidAgent.hasPath || _droidAgent.velocity.sqrMagnitude == 0f)
                    {
                        _coroutine = StartCoroutine(LazePatrolPoint());
                    }
                }
            }
        }
示例#3
0
        private void CheckAndSetNextTarget()
        {
            var angleWRTTarget = DroidPatrolHelpers
                                 .CheckTargetInsideFOV(_player, minimumDetectionDistance, maxLookAngle, lookingPoint);

            _currentNormalizedLookAngle = angleWRTTarget;

            if (angleWRTTarget != -1)
            {
                _droidAttackTarget = DroidAttackTarget.Player;
                CheckAndSetInterestingTarget(_player);
                MissionManager.instance.IncrementSpottedTimes();
            }
            else
            {
                var closestDistractor = DroidPatrolHelpers
                                        .GetClosestDistractor(_distractorHolder, transform);

                angleWRTTarget = DroidPatrolHelpers
                                 .CheckTargetInsideFOV(closestDistractor,
                                                       minimumDetectionDistance, maxLookAngle, lookingPoint, false);

                _currentNormalizedLookAngle = angleWRTTarget;

                if (angleWRTTarget != -1)
                {
                    _droidAttackTarget = DroidAttackTarget.Distractor;
                    CheckAndSetInterestingTarget(closestDistractor);
                }
                else if (_droidAttackTarget != DroidAttackTarget.None)
                {
                    _droidAttackTarget = DroidAttackTarget.None;
                    SetAgentRandomPatrolPoint();
                }
            }
        }