private void UpdateDevicePose() { IVRModuleDeviceState prevState; IVRModuleDeviceStateRW currState; EnsureValidDeviceState(HEAD_INDEX, out prevState, out currState); if (currState.isConnected) { currState.position = InputTracking.GetLocalPosition(XRNode.Head); currState.rotation = InputTracking.GetLocalRotation(XRNode.Head); currState.isPoseValid = currState.pose != RigidPose.identity; } EnsureValidDeviceState(RIGHT_HAND_INDEX, out prevState, out currState); if (currState.isConnected) { currState.position = m_rightArm.ControllerPositionFromHead; currState.rotation = m_rightArm.ControllerRotationFromHead; currState.isPoseValid = m_rightDevice.Orientation != Quaternion.identity; } EnsureValidDeviceState(LEFT_HAND_INDEX, out prevState, out currState); if (currState.isConnected) { currState.position = m_leftArm.ControllerPositionFromHead; currState.rotation = m_leftArm.ControllerRotationFromHead; currState.isPoseValid = m_leftDevice.Orientation != Quaternion.identity; } }
private void UpdateDevicePose() { IVRModuleDeviceState prevState; IVRModuleDeviceStateRW currState; EnsureValidDeviceState(HEAD_INDEX, out prevState, out currState); if (currState.isConnected) { currState.position = InputTracking.GetLocalPosition(XRNode.Head); currState.rotation = InputTracking.GetLocalRotation(XRNode.Head); currState.isPoseValid = currState.pose != RigidPose.identity; } EnsureValidDeviceState(CONTROLLER_INDEX, out prevState, out currState); if (currState.isConnected) { currState.position = m_gvrArmModel.ControllerPositionFromHead; currState.rotation = m_gvrArmModel.ControllerRotationFromHead; currState.isPoseValid = GvrControllerInput.Orientation != Quaternion.identity; } }
public override void UpdateDeviceState(IVRModuleDeviceState[] prevState, IVRModuleDeviceStateRW[] currState) { if (m_gvrCtrlInputInstance == null) { m_gvrCtrlInputInstance = Object.FindObjectOfType <GvrControllerInput>(); if (m_gvrCtrlInputInstance == null) { m_gvrCtrlInputInstance = VRModule.Instance.gameObject.AddComponent <GvrControllerInput>(); } } if (GvrControllerInput.State == GvrConnectionState.Error) { Debug.LogError(GvrControllerInput.ErrorDetails); return; } if (m_gvrArmModelInstance == null) { m_gvrArmModelInstance = VRModule.Instance.GetComponent <GvrArmModel>(); if (m_gvrArmModelInstance == null) { m_gvrArmModelInstance = VRModule.Instance.gameObject.AddComponent <GvrArmModel>(); } } if (m_gvrHeadSetInstance == null) { m_gvrHeadSetInstance = Object.FindObjectOfType <GvrHeadset>(); if (m_gvrHeadSetInstance == null) { m_gvrHeadSetInstance = VRModule.Instance.gameObject.AddComponent <GvrHeadset>(); } } var headPrevState = prevState[VRModule.HMD_DEVICE_INDEX]; var headCurrState = currState[VRModule.HMD_DEVICE_INDEX]; headCurrState.isConnected = XRDevice.isPresent; if (headCurrState.isConnected) { if (!headPrevState.isConnected) { headCurrState.deviceClass = VRModuleDeviceClass.HMD; headCurrState.serialNumber = XRDevice.model + " HMD"; headCurrState.modelNumber = XRDevice.model + " HMD"; headCurrState.deviceModel = VRModuleDeviceModel.DaydreamHMD; headCurrState.renderModelName = string.Empty; } headCurrState.position = InputTracking.GetLocalPosition(XRNode.Head); headCurrState.rotation = InputTracking.GetLocalRotation(XRNode.Head); headCurrState.isPoseValid = headCurrState.pose != RigidPose.identity; headCurrState.pose = headCurrState.pose; } else { if (headPrevState.isConnected) { headCurrState.Reset(); } } var ctrlPrevState = prevState[CONTROLLER_DEVICE_INDEX]; var ctrlCurrState = currState[CONTROLLER_DEVICE_INDEX]; ctrlCurrState.isConnected = GvrControllerInput.State == GvrConnectionState.Connected; if (ctrlCurrState.isConnected) { if (!ctrlPrevState.isConnected) { ctrlCurrState.deviceClass = VRModuleDeviceClass.Controller; ctrlCurrState.serialNumber = XRDevice.model + " Controller"; ctrlCurrState.modelNumber = XRDevice.model + " Controller"; ctrlCurrState.deviceModel = VRModuleDeviceModel.DaydreamController; ctrlCurrState.renderModelName = string.Empty; } ctrlCurrState.pose = new RigidPose(m_gvrArmModelInstance.ControllerPositionFromHead, m_gvrArmModelInstance.ControllerRotationFromHead); ctrlCurrState.isPoseValid = GvrControllerInput.Orientation != Quaternion.identity; ctrlCurrState.velocity = GvrControllerInput.Accel; ctrlCurrState.angularVelocity = GvrControllerInput.Gyro; ctrlCurrState.SetButtonPress(VRModuleRawButton.Touchpad, GvrControllerInput.ClickButton); ctrlCurrState.SetButtonPress(VRModuleRawButton.ApplicationMenu, GvrControllerInput.AppButton); ctrlCurrState.SetButtonPress(VRModuleRawButton.System, GvrControllerInput.HomeButtonState); ctrlCurrState.SetButtonTouch(VRModuleRawButton.Touchpad, GvrControllerInput.IsTouching); if (GvrControllerInput.IsTouching) { var touchPadPosCentered = GvrControllerInput.TouchPosCentered; ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadX, touchPadPosCentered.x); ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadY, touchPadPosCentered.y); } else { ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadX, 0f); ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadY, 0f); } if (VIUSettings.daydreamSyncPadPressToTrigger) { ctrlCurrState.SetButtonPress(VRModuleRawButton.Trigger, GvrControllerInput.ClickButton); ctrlCurrState.SetButtonTouch(VRModuleRawButton.Trigger, GvrControllerInput.IsTouching); ctrlCurrState.SetAxisValue(VRModuleRawAxis.Trigger, GvrControllerInput.ClickButton ? 1f : 0f); } } else { if (ctrlPrevState.isConnected) { ctrlCurrState.Reset(); } } }