private void _HandleTrackingStateChange(AnchorManagerTrackingState oldState, AnchorManagerTrackingState newState) { if (oldState == newState) { // There is no state change to process. return; } else if (newState == AnchorManagerTrackingState.Tracking) { // Tracking has been (re-)established, any non-localized anchors that were not lost become localized and // all localized anchors become tracked. m_anchors.AddRange(m_nonLocalizedAnchors); m_nonLocalizedAnchors.Clear(); _UpdateAnchorTrackingState(AnchorTrackingState.Tracking, m_anchors); } else if (newState == AnchorManagerTrackingState.TrackingNotLocalized) { // The device is tracking but not localized; meaning the device is on a separate map from localized // anchors. Thus, localized anchors are lost. _UpdateAnchorTrackingState(AnchorTrackingState.LostTracking, m_anchors); } else if (newState == AnchorManagerTrackingState.TrackingLost) { // Tracking is now lost and localized anchors should move to not tracking. Any non-localized anchors // are now lost forever (stopped). _UpdateAnchorTrackingState(AnchorTrackingState.LostTracking, m_anchors); _UpdateAnchorTrackingState(AnchorTrackingState.StoppedTracking, m_nonLocalizedAnchors); m_nonLocalizedAnchors.Clear(); } }
private void _SetNewTrackingState(FrameTrackingState frameTrackingState, bool localized) { AnchorManagerTrackingState oldTrackingState = m_trackingState; if (frameTrackingState == FrameTrackingState.LostTracking) { m_trackingState = AnchorManagerTrackingState.TrackingLost; } else if (frameTrackingState == FrameTrackingState.TrackingNotInitialized) { m_trackingState = AnchorManagerTrackingState.TrackingStopped; } else if (!localized) { m_trackingState = AnchorManagerTrackingState.TrackingNotLocalized; } else { m_trackingState = AnchorManagerTrackingState.Tracking; } _HandleTrackingStateChange(oldTrackingState, m_trackingState); }