public void StopTracking(bool gameFinished = false) { TrackingResultProcessing.Reset(); Kinect.Dispose(); Kinect = null; if (!gameFinished) { ProgramState.StoppedTracking(); } }
public TrackingManager(UserInterfaceOutputFacade outputFacade, TrackingResultProcessing trackingResultProcessing, UserDefinedParametersPrototypeFactory userParameters, IProgramState programState) { OutputFacade = outputFacade; TrackingResultProcessing = trackingResultProcessing; ProgramState = programState; ProcessingCommandsQueue = new BlockingCollection <Message>(new ConcurrentQueue <Message>()); ProcessingOutputQueue = new BlockingCollection <Message>(new ConcurrentQueue <Message>()); InitPipelineThread(userParameters); }
/// <summary> /// Processing of messages arriving from tracking thread /// </summary> public void ProcessQueue() { bool messageProcessed = false; do { messageProcessed = ProcessingOutputQueue.TryTake(out var message); if (message is ResultMessage resultMessage) { TrackingResultProcessing.ProcessResult(resultMessage); } if (message is TrackingStartSuccessfulMessage) { ProgramState.TrackingStartSuccessful(); } if (message is TrackingError error) { ProgramState.ErrorInTracking(error.Message); StopTracking(); } if (message is SceneCalibrationSnapshotMessage snapshot) { OutputFacade.UpdateCalibrationSnapshot(snapshot.Snapshot); } if (messageProcessed && message == null) { throw new InvalidOperationException(string.Format(ProgramLocalization.UnexpectedIncomingMessage, nameof(TrackingManager))); } } while (messageProcessed); }
public void SendKinectUpdate() { ProcessingCommandsQueue.Add(new KinectUpdateMessage(TrackingResultProcessing.GetGameStateAlignedWithTrackingState())); }
public void Recalibrate() { TrackingResultProcessing.Reset(); ProgramState.Recalibrating(); ProcessingCommandsQueue.Add(new RecalibrateMessage()); }