예제 #1
0
        void sensorDetectionEvents()
        {
            var detectedEnumerator = DetectedObjects.GetEnumerator();

            while (detectedEnumerator.MoveNext())
            {
                var go = detectedEnumerator.Current;
                if (previousDetectedObjects.Contains(go))
                {
                    previousDetectedObjects.Remove(go);
                }
                else
                {
                    // This is a newly detected object
                    OnDetected.Invoke(go);
                }
            }

            // Any object still in previousDetectedObjects is no longer detected
            var previousDetectedEnumerator = previousDetectedObjects.GetEnumerator();

            while (previousDetectedEnumerator.MoveNext())
            {
                var go = previousDetectedEnumerator.Current;
                OnLostDetection.Invoke(go);
            }

            previousDetectedObjects.Clear();
            detectedEnumerator = DetectedObjects.GetEnumerator();
            while (detectedEnumerator.MoveNext())
            {
                previousDetectedObjects.Add(detectedEnumerator.Current);
            }
        }
예제 #2
0
        void testSensor()
        {
            prepareCollidersBuffer();

            var numberDetected = Physics.OverlapSphereNonAlloc(transform.position, SensorRange, collidersBuffer, DetectsOnLayers);

            if (numberDetected == CurrentBufferSize)
            {
                if (DynamicallyIncreaseBufferSize)
                {
                    CurrentBufferSize *= 2;
                    testSensor();
                    return;
                }
                else
                {
                    logInsufficientBufferSize();
                }
            }

            clearColliders();

            for (int i = 0; i < numberDetected; i++)
            {
                var newDetection = addCollider(collidersBuffer[i]);
                if (newDetection != null)
                {
                    if (previousDetectedObjects.Contains(newDetection))
                    {
                        previousDetectedObjects.Remove(newDetection);
                    }
                    else
                    {
                        OnDetected.Invoke(newDetection, this);
                    }
                }
            }

            // Any entries still in previousDetectedObjects are no longer detected
            var previousDetectedEnumerator = previousDetectedObjects.GetEnumerator();

            while (previousDetectedEnumerator.MoveNext())
            {
                var lostDetection = previousDetectedEnumerator.Current;
                OnLostDetection.Invoke(lostDetection, this);
            }

            previousDetectedObjects.Clear();
            var detectedEnumerator = DetectedObjects.GetEnumerator();

            while (detectedEnumerator.MoveNext())
            {
                previousDetectedObjects.Add(detectedEnumerator.Current);
            }

            if (OnSensorUpdate != null)
            {
                OnSensorUpdate();
            }
        }
    private void ObjectDetected(string objectJson)
    {
        DetectedObjects detectedObjects = JsonUtility.FromJson <DetectedObjects>(objectJson);

        foreach (DetectedObject obj in detectedObjects.Objects)
        {
            ObjectDetectedEvent(obj);
        }
    }
예제 #4
0
        // Returns true when the passed GameObject is currently detected by the sensor, false otherwise.
        public virtual bool IsDetected(GameObject go)
        {
            var detectedEnumerator = DetectedObjects.GetEnumerator();

            while (detectedEnumerator.MoveNext())
            {
                if (detectedEnumerator.Current == go)
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #5
0
 public void AddDetectedObject(ImageObjectKinds kind, Rectangle r)
 {
     if (!DetectedObjects.ContainsKey(kind))
     {
         DetectedObjects.Add(ImageObjectKinds.FaceCandidate, new List <Rectangle>()
         {
             r
         });
     }
     else
     {
         DetectedObjects[kind].Add(r);
     }
 }
예제 #6
0
        void testSensor()
        {
            clearColliders();
            var sensedColliders = Physics2D.OverlapCircleAll(transform.position, SensorRange, DetectsOnLayers);

            for (int i = 0; i < sensedColliders.Length; i++)
            {
                var newDetection = addCollider(sensedColliders[i]);
                if (newDetection != null)
                {
                    if (previousDetectedObjects.Contains(newDetection))
                    {
                        previousDetectedObjects.Remove(newDetection);
                    }
                    else
                    {
                        OnDetected.Invoke(newDetection);
                    }
                }
            }

            // Any entries still in previousDetectedObjects are no longer detected
            var previousDetectedEnumerator = previousDetectedObjects.GetEnumerator();

            while (previousDetectedEnumerator.MoveNext())
            {
                var lostDetection = previousDetectedEnumerator.Current;
                OnLostDetection.Invoke(lostDetection);
            }

            previousDetectedObjects.Clear();
            var detectedEnumerator = DetectedObjects.GetEnumerator();

            while (detectedEnumerator.MoveNext())
            {
                previousDetectedObjects.Add(detectedEnumerator.Current);
            }

            if (OnSensorUpdate != null)
            {
                OnSensorUpdate();
            }
        }
예제 #7
0
        private void SensorDetectionEvents()
        {
            var detectedEnumerator = DetectedObjects.GetEnumerator();

            try {
                while (detectedEnumerator.MoveNext())
                {
                    var go = detectedEnumerator.Current;
                    if (_previousDetectedObjects.Contains(go))
                    {
                        _previousDetectedObjects.Remove(go);
                    }
                    //else {
                    //    // This is a newly detected object
                    //    //OnDetected.Invoke(go);
                    //}
                }
            }
            finally {
                detectedEnumerator.Dispose();
            }
            // Any object still in previousDetectedObjects is no longer detected
            //var previousDetectedEnumerator = _previousDetectedObjects.GetEnumerator();
            //while (previousDetectedEnumerator.MoveNext()) {
            //    //var go = previousDetectedEnumerator.Current;
            //    //OnLostDetection.Invoke(go);
            //}
            _previousDetectedObjects.Clear();
            detectedEnumerator = DetectedObjects.GetEnumerator();
            try {
                while (detectedEnumerator.MoveNext())
                {
                    _previousDetectedObjects.Add(detectedEnumerator.Current);
                }
            }
            finally {
                detectedEnumerator.Dispose();
            }
        }
예제 #8
0
        void sensorDetectionEvents()
        {
            // User may call 'DetectedObjects' while enumerating, so we want to copy list of detected objects
            // out first. or we'll get an exception that enumeration is modified.
            tempGOList.Clear();
            tempGOList.AddRange(DetectedObjects);
            var detectedEnumerator = tempGOList.GetEnumerator();

            while (detectedEnumerator.MoveNext())
            {
                var go = detectedEnumerator.Current;
                if (previousDetectedObjects.Contains(go))
                {
                    previousDetectedObjects.Remove(go);
                }
                else
                {
                    // This is a newly detected object
                    OnDetected.Invoke(go, this);
                }
            }

            // Any object still in previousDetectedObjects is no longer detected
            var previousDetectedEnumerator = previousDetectedObjects.GetEnumerator();

            while (previousDetectedEnumerator.MoveNext())
            {
                var go = previousDetectedEnumerator.Current;
                OnLostDetection.Invoke(go, this);
            }

            previousDetectedObjects.Clear();
            detectedEnumerator = DetectedObjects.GetEnumerator();
            while (detectedEnumerator.MoveNext())
            {
                previousDetectedObjects.Add(detectedEnumerator.Current);
            }
        }