Example #1
0
        private void ConnectOrReconnect()
        {
            try
            {
                // Close active connections (if restarting)
                apiClient.DisconnectHeadTrackingProxy();
                apiClient.DisconnectControllerProxy();
                apiClient.DisconnectBroadcastProxy();
                controllerService?.Dispose();

                // Give it some time to clean up
                Thread.Sleep(10);

                // Connect to the services
                headTrackingService = new TrackingService(apiClient.ConnectHeadTrackingProxy());
                controllerService   = new ControllerService(apiClient.ConnectToControllerProxy());

                broadcastProxy = apiClient.ConnectToBroadcaster();
                broadcastProxy.HapticPulseReceived += OnHapticFeedbackReceived;

                headTrackingService.ChangeStatus(IsControllingHeadTracking);
            }
            catch (Exception x)
            {
                MessageBox.Show(x.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Example #2
0
        private void SendHeadTrackingDataToVridge()
        {
            switch (SelectedHeadTrackingMode)
            {
            case TrackingType.Position:
                headTrackingService?.SendPositionOnly(PositionX, PositionY, PositionZ);
                break;

            case TrackingType.PositionAndRotation:
                headTrackingService?.SendRotationAndPosition(Yaw, Pitch, Roll, PositionX, PositionY, PositionZ);
                break;

            case TrackingType.SyncOffset:
                headTrackingService?.UpdateOffsetMatrix(Yaw, Pitch, Roll, PositionX, PositionY, PositionZ);
                break;

            case TrackingType.AsyncOffset:
                headTrackingService?.SendAsyncOffset(Yaw, Pitch, Roll);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            // Mark HMD as in/out of tracking range when it crosses tracking bounds
            var isHmdTracked = Math.Abs(PositionX) <= 3 && Math.Abs(PositionZ) <= 3;

            if (wasHMDTracked && !isHmdTracked)
            {
                headTrackingService?.ChangeStatus(false);
                wasHMDTracked = false;
            }

            if (!wasHMDTracked && isHmdTracked)
            {
                headTrackingService?.ChangeStatus(true);
                wasHMDTracked = true;
            }
        }