Beispiel #1
0
        protected bool ShouldUpdateHeading(HeadingReading newHeading)
        {
            if (newHeading.timestamp == CurrentHeading.timestamp)
            {
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        private void Provider_CompassUpdated(HeadingReading heading, HeadingReading lastReading)
        {
            if (mute)
            {
                return;
            }

            OnCompassUpdateDelegate?.Invoke(heading, lastReading);
            OnCompassUpdated?.Invoke(heading);
        }
Beispiel #3
0
        protected void UpdateHeading(HeadingReading newHeading)
        {
            if (!ShouldUpdateHeading(newHeading))
            {
                return;
            }

            LastHeading = CurrentHeading;

            CurrentHeading = newHeading;

            EmitCompassUpdated();
        }
Beispiel #4
0
        protected void UpdateHeading(HeadingReading newHeading)
        {
            if (!ShouldUpdateHeading(newHeading))
            {
                return;
            }

            LastHeading = CurrentHeading;

            CurrentHeading = useCompassLpFilter ? ApplyCompassLpFilters(newHeading) : newHeading;

            EmitCompassUpdated();
        }
Beispiel #5
0
        protected HeadingReading ApplyCompassLpFilters(HeadingReading reading)
        {
            if (!useCompassLpFilter || headingLpFilter == null || magneticHeadingLpFilter == null)
            {
                return(reading);
            }

            var magneticHeading = magneticHeadingLpFilter.Apply(reading.magneticHeading);
            var heading         = headingLpFilter.Apply(reading.heading);

            var newReading = reading;

            newReading.magneticHeading = magneticHeading;
            newReading.heading         = heading;

            return(newReading);
        }
        private void OnCompassUpdatedHandler(HeadingReading newHeading, HeadingReading lastReading)
        {
            if (waitingForARTracking)
            {
                return;
            }

            if (!newHeading.isMagneticHeadingAvailable)
            {
                Debug.LogWarning("[AR+GPS][ARLocationOrientation]: Magnetic heading data not available.");
                return;
            }

            if (MaxNumberOfUpdates > 0 && updateCounter >= MaxNumberOfUpdates)
            {
                return;
            }

            var trueHeading = (Mathf.Abs(TrueNorthOffset) > 0.000001f) ? newHeading.magneticHeading + TrueNorthOffset : newHeading.heading;


            float currentCameraHeading = mainCameraTransform.rotation.eulerAngles.y;
            float value = Misc.GetNormalizedDegrees(currentCameraHeading - ((float)trueHeading));

            if (Mathf.Abs(value) < 0.0000001f)
            {
                return;
            }

            // If averaging is not enabled
            if (AverageCount <= 1)
            {
                if (updateCounter == 0)
                {
                    transform.localRotation = Quaternion.AngleAxis(value, Vector3.up);
                    TrySetOrientation(value, true);
                }
                else
                {
                    TrySetOrientation(value);
                }

                return;
            }

            values.Add(value);

            if (updateCounter == 0 && values.Count == 1)
            {
                TrySetOrientation(value, true);
                return;
            }


            if (isFirstAverage && UseRawUntilFirstAverage)
            {
                TrySetOrientation(value, true);
                return;
            }

            if (values.Count >= AverageCount)
            {
                if (isFirstAverage)
                {
                    isFirstAverage = false;
                }

                var average = Misc.FloatListAverage(values);
                values.Clear();

                TrySetOrientation(average);
            }
        }