Exemple #1
0
    public void GeneralScan(DetectableTags detectableTags = 0)
    {
        // get all colliders within the vision radius
        int foundCollidersCount = Physics2D.OverlapCircleNonAlloc(_unit.MoveController.Body.position, _visionRange, _foundColliders, _targetLayers);

        for (int i = 0; i < foundCollidersCount; i++)
        {
            Collider2D  collider   = _foundColliders[i];
            IDetectable detectable = collider.GetComponent <IDetectable>();
            // ensure that this collider is a detectable
            if (detectable == null)
            {
                continue;
            }
            // ensure that this detectable matches at least one of the tags and can be seen
            bool containsDetectableTag = (detectable.DetectableTags & detectableTags) != 0;
            if (containsDetectableTag && Scan(detectable, _unit.MoveController.Body.transform, _visionRange, _visionLayers, _visionAngle))
            {
                // add/update the detected target entry
                if (!_detectedTargets.TryGetValue(detectable, out DetectedTarget entry))
                {
                    _detectedTargets.Add(detectable, new DetectedTarget()
                    {
                        Target         = detectable,
                        DetectionValue = 0f,
                    });
                }
                _detectedTargets[detectable].DetectedThisFrame = true;
            }
        }
        ProcessDetectedTargets();
    }
    protected override void OnEnter()
    {
        base.OnEnter();
        if (_unit.TargetManager.CurrentTarget == null)
        {
            SetReadyToTransition(_onTargetLost);
            return;
        }
        _expectedDetectableTags = _unit.TargetManager.CurrentTarget.DetectableTags;
        bool foundTarget = ScanForTarget();

        if (foundTarget)
        {
            SetReadyToTransition(_onTargetFound);
        }
        else
        {
            SetReadyToTransition(_onTargetLost);
        }
    }
Exemple #3
0
        public bool TryAddGameObject(GameObject obj)
        {
            var comp = obj.GetComponentInChildren <DetectableGameObject>();

            if (comp != null)
            {
                if (!DetectableTags.Contains(comp.Tag))
                {
                    m_SettingsByTag.Add(new GameObjectSettings(comp));
                    return(true);
                }
                else
                {
                    Debug.LogWarning($"Tag '{comp.Tag}' already added, tags must be distinct.");
                }
            }
            else
            {
                Debug.LogError($"{obj} is not a detectable gameobject. Add a DetectableGameObject component.");
            }

            return(false);
        }
 protected override void OnEnter()
 {
     base.OnEnter();
     _expectedDetectableTags = _unit.TargetManager.CurrentTarget.DetectableTags;
     _visualizedFieldOfView.SetActive(true);
 }