protected bool ShouldUpdateHeading(HeadingReading newHeading) { if (newHeading.timestamp == CurrentHeading.timestamp) { return(false); } return(true); }
private void Provider_CompassUpdated(HeadingReading heading, HeadingReading lastReading) { if (mute) { return; } OnCompassUpdateDelegate?.Invoke(heading, lastReading); OnCompassUpdated?.Invoke(heading); }
protected void UpdateHeading(HeadingReading newHeading) { if (!ShouldUpdateHeading(newHeading)) { return; } LastHeading = CurrentHeading; CurrentHeading = newHeading; EmitCompassUpdated(); }
protected void UpdateHeading(HeadingReading newHeading) { if (!ShouldUpdateHeading(newHeading)) { return; } LastHeading = CurrentHeading; CurrentHeading = useCompassLpFilter ? ApplyCompassLpFilters(newHeading) : newHeading; EmitCompassUpdated(); }
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); } }