public NavNode GetBestNode(NavNode currentNode, NavNode startNode, NavNode destinationNode)
        {
            if (currentNode != null && startNode != null && currentNode.NeighbourRefs != null)
            {
                var foundNewNode      = false;
                var furthestFromStart = currentNode;
                var furthestDistance  = VectorFunctions.DistanceSquared(currentNode.Position, startNode.Position);

                foreach (var neighbour in currentNode.NeighbourRefs)
                {
                    var neighbourDistance =
                        VectorFunctions.DistanceSquared(neighbour.Position, startNode.Position);
                    if (neighbourDistance > furthestDistance)
                    {
                        furthestDistance  = neighbourDistance;
                        furthestFromStart = neighbour;
                        foundNewNode      = true;
                    }
                }

                if (foundNewNode)
                {
                    return(furthestFromStart);
                }
            }

            return(null);
        }
Exemple #2
0
        protected void Update()
        {
            for (
                var currentNoiseIndex = 0;
                currentNoiseIndex < _noisesToUpdate.Count && currentNoiseIndex < NoiseServiceConstants.NoisesPerUpdate;
                currentNoiseIndex++
                )
            {
                var currentNoise = _noisesToUpdate[currentNoiseIndex];
                foreach (var listenerEntry in _listenerEntries)
                {
                    if (VectorFunctions.DistanceSquared(currentNoise.NoiseLocation, listenerEntry.Location) < currentNoise.NoiseRadius)
                    {
                        listenerEntry.Listener.OnNoiseHeard(currentNoise);
                    }
                }
            }

            if (_noisesToUpdate.Count < NoiseServiceConstants.NoisesPerUpdate)
            {
                _noisesToUpdate.Clear();
            }
            else
            {
                _noisesToUpdate.RemoveRange(0, NoiseServiceConstants.NoisesPerUpdate - 1);
            }
        }
        public NavNode GetBestNode(NavNode currentNode, NavNode startNode, NavNode destinationNode)
        {
            if (currentNode != null && destinationNode != null && currentNode.NeighbourRefs != null)
            {
                var foundNewNode    = false;
                var closestToTarget = currentNode;
                var closestDistance = VectorFunctions.DistanceSquared(currentNode.Position, destinationNode.Position);

                foreach (var neighbour in currentNode.NeighbourRefs)
                {
                    var neighbourDistance =
                        VectorFunctions.DistanceSquared(neighbour.Position, destinationNode.Position);
                    if (neighbourDistance < closestDistance)
                    {
                        closestDistance = neighbourDistance;
                        closestToTarget = neighbour;
                        foundNewNode    = true;
                    }
                }

                if (foundNewNode)
                {
                    return(closestToTarget);
                }
            }

            return(null);
        }
Exemple #4
0
        public void DistSquared2D_ReturnsDistanceBetween2Vectors()
        {
            var firstVector  = new Vector2(-2.0f, 101.1f);
            var secondVector = new Vector2(12.0f, -30.0f);

            Assert.AreEqual(Mathf.Pow((firstVector.x - secondVector.x), 2) + Mathf.Pow((firstVector.y - secondVector.y), 2),
                            VectorFunctions.DistanceSquared(firstVector, secondVector));
        }
 private void UpdatePointTarget()
 {
     if (VectorFunctions.DistanceSquared(_navMeshAgent.destination, gameObject.transform.position) < TargetCompleteRadiusSquared)
     {
         _delegate();
         PlotCourse(gameObject.transform.position);
         _delegate = null;
     }
 }
Exemple #6
0
        private void UpdateFollowTarget()
        {
            Vector2 followPosition = _followTarget.transform.position;

            if (VectorFunctions.DistanceSquared(followPosition, _currentTargetLocation) >
                DistanceSquaredThreshold)
            {
                SetTargetLocation(_followTarget.transform.position, () => {});
            }
        }
        protected void Update()
        {
            var currentLocation = gameObject.transform.position;

            if (VectorFunctions.DistanceSquared(currentLocation, _previousLocation) > NoiseListenerConstants.UpdateDistanceSquared)
            {
                UpdateListenerLocation(currentLocation);
            }

            _previousLocation = currentLocation;
        }
Exemple #8
0
        private void UpdateNodeStatus()
        {
            if (_pathNodes.Count == 0)
            {
                UpdateRegionPathStatus();

                if (_pathNodes.Count == 0)
                {
                    return;
                }
            }

            var targetNode = _pathNodes[0];

            var currentPosition = new Vector2(gameObject.transform.position.x, gameObject.transform.position.y);

            if (VectorFunctions.DistanceSquared(currentPosition, targetNode.Position) <
                DistanceSquaredThreshold)
            {
                _pathNodes.RemoveAt(0);

                if (_pathNodes.Count == 0)
                {
                    UpdateRegionPathStatus();
                }
            }
            else
            {
                var deltaX = targetNode.Position.x - gameObject.transform.position.x;
                var deltaY = targetNode.Position.y - gameObject.transform.position.y;

                if (deltaX > 0.2f)
                {
                    _movement.ApplySidewaysMotion(1.0f);
                }
                else if (deltaX < -0.2f)
                {
                    _movement.ApplySidewaysMotion(-1.0f);
                }


                if (deltaY > 0.2f)
                {
                    _movement.ApplyForwardMotion(1.0f);
                }
                else if (deltaY < 0.2f)
                {
                    _movement.ApplyForwardMotion(-1.0f);
                }
            }
        }
Exemple #9
0
        public override EGoalStatus Update(float inDeltaTime)
        {
            if (_currentStatus == EGoalStatus.InProgress)
            {
                if (_currentTarget == null ||
                    VectorFunctions.DistanceSquared(Owner.transform.position, _currentTarget.transform.position) > _params.LoseFollowRadiusSquared ||
                    _currentTargetSpeciesInterface.IsSpeciesCryInProgress(ECryType.Negative))
                {
                    _currentTarget = null;
                    _currentTargetSpeciesInterface = null;

                    _currentStatus = EGoalStatus.Failed;
                }
            }

            return(_currentStatus);
        }
Exemple #10
0
        public override float CalculateDesirability()
        {
            var desirability = 0.0f;

            if (_justDetectedObject || _inProgress)
            {
                if (VectorFunctions.DistanceSquared(Owner.transform.position, _detectedObject.transform.position) <
                    _params.AbandonPursuitRadiusSquared)
                {
                    desirability = _params.TargetDetectedDesirability;
                }
            }

            _justDetectedObject = false;

            return(desirability);
        }
Exemple #11
0
        public NavNode GetNearestNavNode(NavRegion region, Vector2 position)
        {
            NavNode nearestNode     = null;
            var     nearestDistance = 100000.0f;

            foreach (var node in region.Nodes)
            {
                var distance = VectorFunctions.DistanceSquared(position, node.Position);
                if (distance < nearestDistance)
                {
                    nearestNode     = node;
                    nearestDistance = distance;
                }
            }

            return(nearestNode);
        }
        public void GetWildlifeInRadius_ReturnsCorrectDistanceSquared()
        {
            var checkLocation = new Vector3(2.0f, 20.0f, -10.0f);

            _wildlife.RegisterWildlife(_species.gameObject);

            var retrievedWildlife = _wildlife.GetWildlifeInRadius(checkLocation, 1000f);

            Assert.AreEqual
            (
                VectorFunctions.DistanceSquared
                (
                    checkLocation, _species.gameObject.transform.position
                ),
                retrievedWildlife[0].DistanceSquared
            );
        }
        private void UpdateFollowTarget()
        {
            var deltaTime = GetDeltaTime();

            _currentFollowDelay += deltaTime;

            if (_currentFollowDelay > FollowReplotDelay)
            {
                _currentFollowDelay = 0.0f;

                var newLocation = GetSurroundingFollowPoint(_followTarget);
                if (VectorFunctions.DistanceSquared(_navMeshAgent.destination, newLocation) > FollowReplotRangeSquared)
                {
                    PlotCourse(newLocation);
                }
            }
        }
Exemple #14
0
        public List <LocalWildlifeResult> GetWildlifeInRadius(Vector3 inLocation, float inRadius)
        {
            var thresholdSquared = Mathf.Pow(inRadius, 2);

            _currentQueryResult = new List <LocalWildlifeResult>(_registeredWildlife.Count);

            foreach (var registeredAnimal in _registeredWildlife)
            {
                var distanceSquared = VectorFunctions.DistanceSquared(inLocation, registeredAnimal.WildlifeGameObject.transform.position);
                if (distanceSquared < thresholdSquared)
                {
                    _currentQueryResult.Add(new LocalWildlifeResult(registeredAnimal, distanceSquared));
                }
            }

            return(_currentQueryResult);
        }
Exemple #15
0
        // ~IPatrolInterface

        public int GetNearestStartingPatrolPoint()
        {
            var bestPatrolPointIndex = PatrolConstants.InvalidPatrolPoint;
            var bestDistanceSquared  = float.MaxValue;

            Vector2 patrollerLocation = gameObject.transform.position;

            for (var currentIndex = 0; currentIndex < PatrolPoints.Count; currentIndex++)
            {
                var distanceSquared = VectorFunctions.DistanceSquared(PatrolPoints[currentIndex], patrollerLocation);
                if (distanceSquared < bestDistanceSquared || bestPatrolPointIndex == PatrolConstants.InvalidPatrolPoint)
                {
                    bestPatrolPointIndex = currentIndex;
                    bestDistanceSquared  = distanceSquared;
                }
            }

            return(bestPatrolPointIndex);
        }
Exemple #16
0
 private void SmoothPath()
 {
     for (var i = 0; i < _pathNodes.Count - 2; i++)
     {
         foreach (var neighbour in _pathNodes[i].NeighbourRefs)
         {
             if (neighbour != _pathNodes[i + 1] &&
                 Math.Abs
                 (
                     VectorFunctions.DistanceSquared(neighbour.Position, _pathNodes[i + 2].Position) -
                     VectorFunctions.DistanceSquared(_pathNodes[i + 1].Position, _pathNodes[i + 2].Position)
                 ) < 0.2f
                 )
             {
                 _pathNodes.RemoveAt(i + 1);
                 break;
             }
         }
     }
 }
 private bool IsInAttackRadius(GameObject target)
 {
     return(VectorFunctions.DistanceSquared(gameObject.transform.position, target.transform.position) <
            AttackRadiusSquared);
 }
 private bool WithinRadius()
 {
     return(VectorFunctions.DistanceSquared(_returnPoint, Owner.transform.position) < _maxDistanceSquared);
 }