Exemple #1
0
        public override void GetMaps(out DangerMap dangerMap, out InterestMap interestMap)
        {
            interestMap = new InterestMap(0f, _contextSteering.SteeringResolution);
            dangerMap   = new DangerMap(0f, _contextSteering.SteeringResolution);

            if (_contextSteering.TargetData == null)
            {
                return;
            }

            Vector3 toTarget = _contextSteering.TargetData.GetDirectionToTarget(_mTransform);
            float   distance = _contextSteering.TargetData.GetColliderDistanceFromTarget(transform);

            for (int i = 0; i < ContextMap.defaultDirections[_contextSteering.SteeringResolution].Length; i++)
            {
                float dot = Vector3.Dot(ContextMap.defaultDirections[_contextSteering.SteeringResolution][i], toTarget);

                if (dot >= 0)
                {
                    interestMap.InsertValue(i, dot * Mathf.Clamp(distance - stoppingDistance, 0f, 1f), (int)_contextSteering.SteeringResolution / 8);
                }
            }

            interestMap = (InterestMap)ContextMap.Combine(interestMap, _lastFrameInterest, interestLoseRateo);

            _lastFrameInterest = interestMap;

            if (!debug)
            {
                return;
            }

            interestMap.DebugMap(transform.position);
            dangerMap.DebugMap(transform.position);
        }
Exemple #2
0
        public void Blend(ContextMap b)
        {
            for (int i = 0; i < Map.Length; i++)
            {
                Vector3 mean = (Map[i] + b.Map[i]) / 2;

                Map[i] = mean;
            }
        }
        public override void GetMaps(out DangerMap dangerMap, out InterestMap interestMap)
        {
            interestMap = new InterestMap(0f, _contextSteering.SteeringResolution);
            dangerMap   = new DangerMap(0f, _contextSteering.SteeringResolution);

            if (_groupManager == null)
            {
                return;
            }

            if (_contextSteering.TargetData.Target == null)
            {
                return;
            }

            // Group Number (4) hardcoded.
            // Group enum has 6 values so we can't use it
            float step = 360f / 4;

            Vector3 targetPosition = _contextSteering.TargetData.Target.position + _contextSteering.TargetData.Target.forward * _currentDecenter +
                                     Quaternion.Euler(0f, step * (int)_groupManager.ThisGroupName, 0f) *
                                     (Vector3.forward * (_currentCloseness + _contextSteering.TargetData.Target.GetComponent <CapsuleCollider>().radius));

            Vector3 toDesiredPosition = (targetPosition - transform.position).normalized;

            _currentDistance = Vector3.Distance(transform.position, targetPosition);

            // TODO :- Find better solution
            _needsUpdate = false;

            for (int i = 0; i < ContextMap.defaultDirections[_contextSteering.SteeringResolution].Length; i++)
            {
                float dot = Vector3.Dot(ContextMap.defaultDirections[_contextSteering.SteeringResolution][i],
                                        toDesiredPosition);
                if (dot >= 0)
                {
                    interestMap.InsertValue(i, dot * Mathf.Clamp(_currentDistance - _currentStoppingDistance, 0f, 1f), (int)_contextSteering.SteeringResolution / 8);
                }
            }

            interestMap = (InterestMap)ContextMap.Combine(interestMap, _lastFrameInterest, interestLoseRateo);
            dangerMap   = (DangerMap)ContextMap.Combine(dangerMap, _lastFrameDanger, dangerLoseRateo);

            _lastFrameInterest = interestMap;
            _lastFrameDanger   = dangerMap;

            if (!debug)
            {
                return;
            }

            interestMap.DebugMap(transform.position);
            dangerMap.DebugMap(transform.position);
        }
Exemple #4
0
        public static ContextMap Combine(ContextMap currentMap, ContextMap lastMap, float loseRateo)
        {
            for (int i = 0; i < currentMap.Map.Length; i++)
            {
                currentMap.Map[i] = currentMap.Map[i].magnitude >= lastMap.Map[i].magnitude
                    ? currentMap.Map[i]
                    : (lastMap.Map[i] * loseRateo).magnitude > (currentMap.Map[i]).magnitude
                        ? lastMap.Map[i] * loseRateo
                        : currentMap.Map[i];
            }

            return(currentMap);
        }
Exemple #5
0
        public override void GetMaps(out DangerMap dangerMap, out InterestMap interestMap)
        {
            interestMap = new InterestMap(0f, _contextSteering.SteeringResolution);
            dangerMap   = new DangerMap(0f, _contextSteering.SteeringResolution);

            Vector3 forward = transform.forward;

            for (int i = 0; i < ContextMap.defaultDirections[_contextSteering.SteeringResolution].Length; i++)
            {
                if (!TestDirection(out RaycastHit hitInfo, i))
                {
                    continue;
                }

                if (hitInfo.transform.root == transform)
                {
                    continue;
                }

                float dot = Mathf.Abs(Vector3.Dot(ContextMap.defaultDirections[_contextSteering.SteeringResolution][i],
                                                  forward));
                float distance = Vector3.Distance(hitInfo.point, _collider.ClosestPoint(hitInfo.point));

                dangerMap.InsertValue(i, Mathf.Min(k / (distance * distance), dot), (int)_contextSteering.SteeringResolution / 8);
                interestMap.InsertValue(interestMap.GetOppositeDirection(i), Mathf.Min(k / (distance * distance), dot), (int)_contextSteering.SteeringResolution / 8);

                // dangerMap.InsertValue(i,Mathf.Max(dot/distance,1f),(int)_contextSteering.SteeringResolution/8);
                // interestMap.InsertValue(dangerMap.GetOppositeDirection(i),Mathf.Max(dot/distance,1f),(int)_contextSteering.SteeringResolution/8);
            }

            interestMap = (InterestMap)ContextMap.Combine(interestMap, _lastFrameInterest, interestLoseRateo);
            dangerMap   = (DangerMap)ContextMap.Combine(dangerMap, _lastFrameDanger, dangerLoseRateo);

            _lastFrameInterest = interestMap;
            _lastFrameDanger   = dangerMap;

            if (!debug)
            {
                return;
            }

            interestMap.DebugMap(transform.position);
            dangerMap.DebugMap(transform.position);
        }
        public override void GetMaps(out DangerMap dangerMap, out InterestMap interestMap)
        {
            interestMap = new InterestMap(0f, _contextSteering.SteeringResolution);
            dangerMap   = new DangerMap(0f, _contextSteering.SteeringResolution);

            if (_currentArena == null)
            {
                return;
            }

            Vector3 toDesiredPosition = (_currentArena.transform.position - transform.position).normalized;
            float   distance          = Vector3.Distance(transform.position, _currentArena.transform.position);

            for (int i = 0; i < ContextMap.defaultDirections[_contextSteering.SteeringResolution].Length; i++)
            {
                float dot = Vector3.Dot(ContextMap.defaultDirections[_contextSteering.SteeringResolution][i],
                                        toDesiredPosition);
                if (dot >= 0)
                {
                    //interestMap.InsertValue(i, Mathf.Min((distance * distance) / k,dot), (int)_contextSteering.SteeringResolution/8);
                    dangerMap.InsertValue(dangerMap.GetOppositeDirection(i), Mathf.Min((distance * distance) / k, dot), (int)_contextSteering.SteeringResolution / 8);
                }
            }

            //interestMap = (InterestMap) ContextMap.Combine(interestMap, _lastFrameInterest, interestLoseRateo);
            dangerMap = (DangerMap)ContextMap.Combine(dangerMap, _lastFrameDanger, dangerLoseRateo);

            _lastFrameInterest = interestMap;
            _lastFrameDanger   = dangerMap;

            if (!debug)
            {
                return;
            }

            interestMap.DebugMap(transform.position);
            dangerMap.DebugMap(transform.position);
        }