private void UpdateTrackableFoundQueue(TrackableBehaviour.Status status, VuforiaManager.TrackableIdPair trackableId) { if (VuforiaManagerImpl.IsDetectedOrTracked(status)) { if (!this.mTrackableFoundQueue.Contains(trackableId)) { this.mTrackableFoundQueue.AddLast(trackableId); return; } } else if (this.mTrackableFoundQueue.Contains(trackableId)) { this.mTrackableFoundQueue.Remove(trackableId); } }
internal void UpdateTrackablePoses(Transform arCameraTransform, VuforiaManagerImpl.TrackableResultData[] trackableResultDataArray, VuforiaManagerImpl.VuMarkTargetResultData[] vuMarkResultDataArray, VuforiaManager.TrackableIdPair originTrackableID, int frameIndex) { Dictionary <int, TrackableBehaviour.Status> dictionary = new Dictionary <int, TrackableBehaviour.Status>(); for (int i = 0; i < trackableResultDataArray.Length; i++) { VuforiaManagerImpl.TrackableResultData trackableResultData = trackableResultDataArray[i]; dictionary.Add(trackableResultData.id, trackableResultData.status); TrackableBehaviour trackableBehaviour; if (this.mTrackableBehaviours.TryGetValue(trackableResultData.id, out trackableBehaviour) && trackableResultData.id != originTrackableID.TrackableId && VuforiaManagerImpl.IsDetectedOrTracked(trackableResultData.status) && trackableBehaviour.enabled) { StateManagerImpl.PositionTrackable(trackableBehaviour, arCameraTransform, trackableResultData.pose, trackableResultData.timeStamp); } } Dictionary <int, TrackableBehaviour.Status> dictionary2 = new Dictionary <int, TrackableBehaviour.Status>(); for (int i = 0; i < vuMarkResultDataArray.Length; i++) { VuforiaManagerImpl.VuMarkTargetResultData vuMarkTargetResultData = vuMarkResultDataArray[i]; dictionary2.Add(vuMarkTargetResultData.resultID, vuMarkTargetResultData.status); } this.mVuMarkManager.UpdateVuMarkPoses(arCameraTransform, vuMarkResultDataArray, originTrackableID.ResultId); this.mActiveTrackableBehaviours.Clear(); TrackableBehaviour[] array = this.GetTrackableBehaviours().ToArray <TrackableBehaviour>(); for (int i = 0; i < array.Length; i++) { TrackableBehaviour trackableBehaviour2 = array[i]; if (trackableBehaviour2.enabled) { TrackableBehaviour.Status vuforiaStatus; if (dictionary.TryGetValue(trackableBehaviour2.Trackable.ID, out vuforiaStatus) || (trackableBehaviour2 is VuMarkAbstractBehaviour && dictionary2.TryGetValue(((VuMarkAbstractBehaviour)trackableBehaviour2).VuMarkResultId, out vuforiaStatus))) { this.mExtendedTrackingManager.ApplyTrackingState(trackableBehaviour2, vuforiaStatus, arCameraTransform); trackableBehaviour2.OnFrameIndexUpdate(frameIndex); } else { this.mExtendedTrackingManager.ApplyTrackingState(trackableBehaviour2, TrackableBehaviour.Status.NOT_FOUND, arCameraTransform); } if (VuforiaManagerImpl.IsDetectedOrTracked(trackableBehaviour2.CurrentStatus)) { this.mActiveTrackableBehaviours.Add(trackableBehaviour2); } } } }
private void UpdateTrackers(VuforiaManagerImpl.FrameState frameState) { this.UnmarshalTrackables(frameState); this.UnmarshalWordTrackables(frameState); this.UnmarshalVuMarkTrackables(frameState); this.UpdateTrackableFoundQueue(); StateManagerImpl stateManagerImpl = (StateManagerImpl)TrackerManager.Instance.GetStateManager(); this.UpdateSmartTerrain(frameState, stateManagerImpl); this.UpdateExtendedTrackedVuMarks(); stateManagerImpl.UpdateVuMarks(this.mVuMarkDataArray, this.mVuMarkResultDataArray); VuforiaManager.TrackableIdPair trackableIdPair = new VuforiaManager.TrackableIdPair { ResultId = -1, TrackableId = -1 }; int num = -1; if (this.mWorldCenterMode == VuforiaARController.WorldCenterMode.SPECIFIC_TARGET) { if (this.mVuMarkWorldCenter != null && this.mVuMarkWorldCenter.VuMarkTemplate != null) { this.mWorldCenter = this.GetVuMarkWorldCenter(this.mVuMarkWorldCenter.VuMarkTemplate.ID); } if (this.mWorldCenter != null && this.mWorldCenter.Trackable != null) { if (this.mWorldCenter is VuMarkAbstractBehaviour) { trackableIdPair.ResultId = ((VuMarkAbstractBehaviour)this.mWorldCenter).VuMarkResultId; } else { trackableIdPair.TrackableId = this.mWorldCenter.Trackable.ID; } } } else if (this.mWorldCenterMode == VuforiaARController.WorldCenterMode.FIRST_TARGET) { stateManagerImpl.RemoveDisabledTrackablesFromQueue(ref this.mTrackableFoundQueue); if (this.mTrackableFoundQueue.Count > 0) { trackableIdPair = this.mTrackableFoundQueue.First.Value; } } else if (this.mWorldCenterMode == VuforiaARController.WorldCenterMode.DEVICE_TRACKING) { num = frameState.deviceTrackableId; } DeviceTrackingManager deviceTrackingManager = stateManagerImpl.GetDeviceTrackingManager(); if (num != -1) { deviceTrackingManager.UpdateCamera(this.mCentralAnchorPoint, this.mTrackableResultDataArray, num); } else { RotationalPlayModeDeviceTrackerImpl rotationalPlayModeDeviceTrackerImpl = TrackerManager.Instance.GetTracker <DeviceTracker>() as RotationalPlayModeDeviceTrackerImpl; if (rotationalPlayModeDeviceTrackerImpl != null && rotationalPlayModeDeviceTrackerImpl.IsActive) { VuforiaManagerImpl.TrackableResultData trackable = rotationalPlayModeDeviceTrackerImpl.GetTrackable(); deviceTrackingManager.UpdateCamera(this.mCentralAnchorPoint, new VuforiaManagerImpl.TrackableResultData[] { trackable }, trackable.id); } else if (trackableIdPair.TrackableId >= 0 || trackableIdPair.ResultId >= 0) { VuforiaManagerImpl.TrackableResultData trackableResultData = this.GetTrackableResultData(trackableIdPair, true); if (VuforiaManagerImpl.IsDetectedOrTracked(trackableResultData.status)) { stateManagerImpl.UpdateCameraPoseWRTTrackable(this.mCentralAnchorPoint, this.mParentAnchorPoint, trackableIdPair, trackableResultData.pose); } } } if (this.mARCameraTransform != this.mCentralAnchorPoint) { this.mARCameraTransform.position = this.mCentralAnchorPoint.position; this.mARCameraTransform.rotation = this.mCentralAnchorPoint.rotation; } stateManagerImpl.UpdateTrackablePoses(this.mARCameraTransform, this.mTrackableResultDataArray, this.mVuMarkResultDataArray, trackableIdPair, frameState.frameIndex); stateManagerImpl.UpdateWords(this.mARCameraTransform, this.mWordDataArray, this.mWordResultDataArray); stateManagerImpl.UpdateVirtualButtons(frameState.numVirtualButtonResults, frameState.vbDataArray); }