示例#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 addRayHit(RaycastHit hit)
        {
            GameObject go;

            if (DetectionMode == SensorMode.RigidBodies)
            {
                if (hit.rigidbody == null)
                {
                    return;
                }
                go = hit.rigidbody.gameObject;
            }
            else
            {
                go = hit.collider.gameObject;
            }
            if (!detectedObjectHits.ContainsKey(go) && !shouldIgnore(go))
            {
                detectedObjectHits.Add(go, hit);
                detectedObjectsInternal.Add(go);
                if (!previousDetectedObjects.Contains(go))
                {
                    OnDetected.Invoke(go, this);
                }
                else
                {
                    previousDetectedObjects.Remove(go);
                }
            }
        }
            public void ReceiveDetections(Detector.Detections detections)
            {
                var qrcodes = detections.DetectedItems;

                if (qrcodes.Size() != 0)
                {
                    if (Configuration.IsScanning)
                    {
                        Configuration.IsScanning = false;
                        if (_vibrationOnDetected)
                        {
                            Vibrator vib = (Vibrator)_context.GetSystemService(Context.VibratorService);
                            vib.Vibrate(200);
                        }
                        List <BarcodeResult> barcodeResults = new List <BarcodeResult>();
                        for (int i = 0; i < qrcodes.Size(); i++)
                        {
                            Barcode barcode = qrcodes.ValueAt(i) as Barcode;
                            if (barcode == null)
                            {
                                continue;
                            }
                            var type  = Methods.ConvertBarcodeResultTypes(barcode.ValueFormat);
                            var value = barcode.DisplayValue;
                            barcodeResults.Add(new BarcodeResult
                            {
                                BarcodeType  = type,
                                DisplayValue = value
                            });
                        }
                        OnDetected?.Invoke(barcodeResults);
                    }
                }
            }
            private async void DetectBarcodeActionAsync(VisionImage image)
            {
                if (Configuration.IsScanning)
                {
                    try
                    {
                        VisionBarcode[] barcodes = await barcodeDetector.DetectAsync(image);

                        if (barcodes == null || barcodes.Length == 0)
                        {
                            return;
                        }
                        Console.WriteLine($"Successfully read barcode");
                        Configuration.IsScanning = false;
                        if (_vibrationOnDetected)
                        {
                            SystemSound.Vibrate.PlayAlertSound();
                        }
                        List <BarcodeResult> resultList = new List <BarcodeResult>();

                        foreach (var barcode in barcodes)
                        {
                            var points = barcode.CornerPoints.ToList().ConvertAll(nsvalue => nsvalue.PointFValue);

                            resultList.Add(new BarcodeResult
                            {
                                BarcodeType  = Methods.ConvertBarcodeResultTypes(barcode.ValueType),
                                DisplayValue = barcode.DisplayValue,
                                Points       = points.Select(p => (p.X / (double)Width, p.Y / (double)Height)).ToList()
                            });
                        }
                        OnDetected?.Invoke(resultList);
                    }
示例#5
0
            private async void DetectBarcodeActionAsync(VisionImage image)
            {
                if (Configuration.IsScanning)
                {
                    try
                    {
                        VisionBarcode[] barcodes = await barcodeDetector.DetectAsync(image);

                        if (barcodes == null || barcodes.Length == 0)
                        {
                            return;
                        }
                        Configuration.IsScanning = false;
                        if (Configuration.IsVibrate)
                        {
                            SystemSound.Vibrate.PlayAlertSound();
                        }
                        List <BarcodeResult> resultList = new List <BarcodeResult>();
                        foreach (var barcode in barcodes)
                        {
                            resultList.Add(new BarcodeResult
                            {
                                BarcodeType  = Methods.ConvertBarcodeResultTypes(barcode.ValueType),
                                DisplayValue = barcode.DisplayValue
                            });
                        }
                        OnDetected?.Invoke(resultList);
                    }
                    catch (Exception ex)
                    {
                        return;
                    }
                }
            }
示例#6
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();
            }
        }
示例#7
0
 // On Trigger is called when detectable object
 // is in sight ( in front ).
 private void OnTriggerStay(Collider detected)
 {
     if (IsInFront(detected))
     {
         OnDetected.Invoke(detected.gameObject, (IsVisible(detected.gameObject)));
     }
 }
 public void TriggerOnDetected(List <BarcodeResult> barCodeResults)
 {
     Device.BeginInvokeOnMainThread(() =>
     {
         OnDetected?.Invoke(this, new OnDetectedEventArg {
             BarcodeResults = barCodeResults
         });
     });
 }
示例#9
0
    private bool killEnabled = true; //DEBUG ONLY

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            //Send detect player signal
            if (killEnabled)
            {
                OnDetected?.Invoke();
            }
        }
    }
示例#10
0
        new void addCollider(Collider other)
        {
            var newDetected = base.addCollider(other);

            isColliderStale[other] = 0;
            if (newDetected != null)
            {
                OnDetected.Invoke(newDetected, this);
                previousDetectedObjects.Add(newDetected);
            }
            if (OnSensorUpdate != null)
            {
                OnSensorUpdate();
            }
        }
示例#11
0
        new void addCollider(Collider2D other)
        {
            var newDetected = base.addCollider(other);

            triggerStayLag[other] = 0;
            if (newDetected != null)
            {
                OnDetected.Invoke(newDetected);
                previousDetectedObjects.Add(newDetected);
            }
            if (OnSensorUpdate != null)
            {
                OnSensorUpdate();
            }
        }
            private async void DetectBarcodeActionAsync(VisionImage image)
            {
                if (Configuration.IsScanning)
                {
                    try
                    {
                        VisionBarcode[] barcodes = await barcodeDetector.DetectAsync(image);

                        if (barcodes == null || barcodes.Length == 0)
                        {
                            return;
                        }
                        Console.WriteLine($"Successfully read barcode");
                        Configuration.IsScanning = false;
                        if (_vibrationOnDetected)
                        {
                            SystemSound.Vibrate.PlayAlertSound();
                        }
                        List <BarcodeResult> resultList = new List <BarcodeResult>();
                        foreach (var barcode in barcodes)
                        {
                            var barcodeArray = barcode.RawData.ToArray();
                            for (int i = 0; i < barcodeArray.Length; i++)
                            {
                                if (barcodeArray[i] == 0)
                                {
                                    barcodeArray[i] = 32;
                                }
                            }
                            resultList.Add(new BarcodeResult
                            {
                                BarcodeType  = Methods.ConvertBarcodeResultTypes(barcode.ValueType),
                                DisplayValue = System.Text.Encoding.Default.GetString(barcodeArray)
                            });
                        }
                        OnDetected?.Invoke(resultList);
                    }
                    catch (Exception exception)
                    {
                        System.Diagnostics.Debug.WriteLine(exception.Message);
                    }
                }
            }
示例#13
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();
            }
        }
示例#14
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);
            }
        }
 private void DetectProcessor_OnDetected(List <BarcodeResult> obj)
 {
     OnDetected?.Invoke(obj);
 }
示例#16
0
        // Detects beat basing on analysis result
        // Beat detection is marked on the first three bits of the returned value
        private byte DetectBeat(double[] bandEnergies, int peakLevel)
        {
            // Sound height ranges (0, 1 is bass, next 6 is mids)
            int Bass = 2;
            int Mids = 6;

            double[] averageEnergies  = CalculateAverages();
            byte     result           = 0;
            double   peakLevelPercent = (double)peakLevel / 32768 * 100; // Volume level in %

            if (peakLevelPercent > 1)                                    // Reduce false detection
            {
                for (int i = 0; i < BANDS; i++)
                {
                    // Set the C parameter
                    double C;

                    if (i < Bass)
                    {
                        C = 2.3 * ((double)_BASSSensivity / 100);
                    }
                    else if (i < Mids)
                    {
                        C = 2.89 * ((double)_MIDSSensivity / 100);
                    }
                    else
                    {
                        C = 3 * ((double)_MIDSSensivity / 100);
                    }

                    // Compare energies in all bands with C*average
                    if (bandEnergies[i] > (C * averageEnergies[i]))
                    {
                        byte partialResult = 0;
                        if (i < Bass)
                        {
                            partialResult = 1;
                        }
                        else if (i < Mids)
                        {
                            partialResult = 2;
                        }
                        else
                        {
                            partialResult = 4;
                        }
                        result = (byte)(result | partialResult);
                    }
                }
            }

            if (result > 0)
            {
                foreach (BeatDetectedHandler Subscriber in OnDetected.GetInvocationList())
                {
                    ThreadPool.QueueUserWorkItem(delegate { Subscriber(result); });
                }
            }

            return(result);
        }
示例#17
0
 public void TriggerOnDetected(List <BarcodeResult> barCodeResults)
 {
     OnDetected?.Invoke(this, new OnDetectedEventArg {
         BarcodeResults = barCodeResults
     });
 }
示例#18
0
 private void OnTriggerStay(Collider other)
 {
     OnDetected.Invoke(other.gameObject, true);
 }
        void Detector.IProcessor.ReceiveDetections(Detector.Detections detections)
        {
            Rectangle formsBounds;
            Rectangle scanRectangle;
            Rectangle barcodeRectangle;

            if (detections.DetectedItems.Size() < 1 || !this.isScanning)
            {
                return;
            }

            try
            {
                this.isScanning = false;
                List <BarcodeResult> barcodeResults = new List <BarcodeResult>();
                for (int i = 0; i < detections.DetectedItems.Size(); i++)
                {
                    Android.Gms.Vision.Barcodes.Barcode barcode = (detections.DetectedItems.ValueAt(i) as Android.Gms.Vision.Barcodes.Barcode);

                    formsBounds = Xamarin.Forms.Application.Current.MainPage.Bounds;

                    //10~90;
                    //30~60;
                    //barcode.BoundingBox.Width() * 0.1; X
                    //barcode.BoundingBox.Width() * 0.8; Width

                    //barcode.BoundingBox.Height() * 0.3; Y
                    //barcode.BoundingBox.Height() * 0.3; Height

                    //int a = this.cameraSource.PreviewSize.Width;
                    //int b = this.cameraSource.PreviewSize.Height;

                    if (formsBounds.Height > formsBounds.Width)
                    {
                        scanRectangle = new Rectangle(this.cameraSource.PreviewSize.Height * 0.1, this.cameraSource.PreviewSize.Width * 0.3
                                                      , this.cameraSource.PreviewSize.Height * 0.8, this.cameraSource.PreviewSize.Width * 0.3);
                    }
                    else
                    {
                        scanRectangle = new Rectangle(this.cameraSource.PreviewSize.Width * 0.1, this.cameraSource.PreviewSize.Height * 0.3
                                                      , this.cameraSource.PreviewSize.Width * 0.8, this.cameraSource.PreviewSize.Height * 0.3);
                    }

                    barcodeRectangle = new Rectangle(barcode.BoundingBox.Left, barcode.BoundingBox.Top, barcode.BoundingBox.Width(), barcode.BoundingBox.Height());

                    if (scanRectangle.Contains(barcodeRectangle))
                    {
                        barcodeResults.Add(this.BarcodeResultConvert(barcode));
                    }
                }

                if (barcodeResults.Count > 0)
                {
                    OnDetected?.Invoke(barcodeResults);

                    vibrator.Vibrate(1000);

                    Thread.Sleep(3000);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("BarCodeDetectorProcessor Exception : {0}", ex.ToString());
            }
            finally
            {
                this.isScanning = true;
            }
        }