bool GetGamepadFromControllersArray(int controllerIndex, ref WebXRControllerData newControllerData) { int arrayPosition = controllerIndex * 20; int frameNumber = (int)controllersArray[arrayPosition++]; if (newControllerData.frame == frameNumber) { return(false); } newControllerData.frame = frameNumber; newControllerData.enabled = controllersArray[arrayPosition++] != 0; newControllerData.hand = (int)controllersArray[arrayPosition++]; if (!newControllerData.enabled) { return(true); } newControllerData.position = new Vector3(controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++]); newControllerData.rotation = new Quaternion(controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++]); newControllerData.trigger = controllersArray[arrayPosition++]; newControllerData.squeeze = controllersArray[arrayPosition++]; newControllerData.thumbstick = controllersArray[arrayPosition++]; newControllerData.thumbstickX = controllersArray[arrayPosition++]; newControllerData.thumbstickY = controllersArray[arrayPosition++]; newControllerData.touchpad = controllersArray[arrayPosition++]; newControllerData.touchpadX = controllersArray[arrayPosition++]; newControllerData.touchpadY = controllersArray[arrayPosition++]; newControllerData.buttonA = controllersArray[arrayPosition++]; newControllerData.buttonB = controllersArray[arrayPosition]; return(true); }
private void OnControllerUpdate(WebXRControllerData controllerData) { if (controllerData.hand == (int)hand) { if (!controllerData.enabled) { SetVisible(false); return; } SetVisible(true); transform.localRotation = controllerData.rotation; transform.localPosition = controllerData.position; trigger = controllerData.trigger; squeeze = controllerData.squeeze; thumbstick = controllerData.thumbstick; thumbstickX = controllerData.thumbstickX; thumbstickY = controllerData.thumbstickY; touchpad = controllerData.touchpad; touchpadX = controllerData.touchpadX; touchpadY = controllerData.touchpadY; buttonA = controllerData.buttonA; buttonB = controllerData.buttonB; WebXRControllerButton[] buttons = new WebXRControllerButton[6]; buttons[0] = new WebXRControllerButton(trigger == 1, trigger); buttons[1] = new WebXRControllerButton(squeeze == 1, squeeze); buttons[2] = new WebXRControllerButton(thumbstick == 1, thumbstick); buttons[3] = new WebXRControllerButton(touchpad == 1, touchpad); buttons[4] = new WebXRControllerButton(buttonA == 1, buttonA); buttons[5] = new WebXRControllerButton(buttonB == 1, buttonB); UpdateButtons(buttons); } }
bool GetGamepadFromControllersArray(int controllerIndex, ref WebXRControllerData newControllerData) { int arrayPosition = controllerIndex * 34; int frameNumber = (int)controllersArray[arrayPosition++]; if (newControllerData.frame == frameNumber) { return(false); } newControllerData.frame = frameNumber; newControllerData.enabled = controllersArray[arrayPosition++] != 0; newControllerData.hand = (int)controllersArray[arrayPosition++]; if (!newControllerData.enabled) { return(true); } newControllerData.position = new Vector3(controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++]); newControllerData.rotation = new Quaternion(controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++]); newControllerData.trigger = controllersArray[arrayPosition++]; newControllerData.triggerTouched = controllersArray[arrayPosition++] != 0; newControllerData.squeeze = controllersArray[arrayPosition++]; newControllerData.squeezeTouched = controllersArray[arrayPosition++] != 0; newControllerData.thumbstick = controllersArray[arrayPosition++]; newControllerData.thumbstickTouched = controllersArray[arrayPosition++] != 0; newControllerData.thumbstickX = controllersArray[arrayPosition++]; newControllerData.thumbstickY = controllersArray[arrayPosition++]; newControllerData.touchpad = controllersArray[arrayPosition++]; newControllerData.touchpadTouched = controllersArray[arrayPosition++] != 0; newControllerData.touchpadX = controllersArray[arrayPosition++]; newControllerData.touchpadY = controllersArray[arrayPosition++]; newControllerData.buttonA = controllersArray[arrayPosition++]; newControllerData.buttonATouched = controllersArray[arrayPosition++] != 0; newControllerData.buttonB = controllersArray[arrayPosition++]; newControllerData.buttonBTouched = controllersArray[arrayPosition++] != 0; if (controllersArray[arrayPosition] == 1) { controllersArray[arrayPosition++] = 2; newControllerData.gripPosition = new Vector3(controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++]); newControllerData.gripRotation = new Quaternion(controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++], controllersArray[arrayPosition++]); Quaternion rotationOffset = Quaternion.Inverse(newControllerData.rotation); newControllerData.gripPosition = rotationOffset * (newControllerData.gripPosition - newControllerData.position); newControllerData.gripRotation = rotationOffset * newControllerData.gripRotation; } return(true); }
// Oculus on desktop returns wrong rotation for targetRaySpace, this is an ugly hack to fix it private void HandleOculusLinkBug(WebXRControllerData controllerData) { gripRotation = controllerData.gripRotation * oculusOffsetGrip; gripPosition = controllerData.gripPosition; if (alwaysUseGrip) { transform.localRotation = controllerData.rotation * controllerData.gripRotation; transform.localPosition = controllerData.rotation * (controllerData.position + controllerData.gripPosition); } else { transform.localRotation = controllerData.rotation * oculusOffsetRay; transform.localPosition = controllerData.position; } }
private void OnControllerUpdate(WebXRControllerData controllerData) { if (controllerData.hand == (int)hand) { if (!controllerData.enabled) { SetControllerActive(false); return; } profiles = controllerData.profiles; transform.localRotation = controllerData.rotation; transform.localPosition = controllerData.position; trigger = controllerData.trigger; squeeze = controllerData.squeeze; thumbstick = controllerData.thumbstick; thumbstickX = controllerData.thumbstickX; thumbstickY = controllerData.thumbstickY; touchpad = controllerData.touchpad; touchpadX = controllerData.touchpadX; touchpadY = controllerData.touchpadY; buttonA = controllerData.buttonA; buttonB = controllerData.buttonB; WebXRControllerButton[] buttons = new WebXRControllerButton[6]; buttons[(int)ButtonTypes.Trigger] = new WebXRControllerButton(trigger == 1, trigger); buttons[(int)ButtonTypes.Grip] = new WebXRControllerButton(squeeze == 1, squeeze); buttons[(int)ButtonTypes.Thumbstick] = new WebXRControllerButton(thumbstick == 1, thumbstick); buttons[(int)ButtonTypes.Touchpad] = new WebXRControllerButton(touchpad == 1, touchpad); buttons[(int)ButtonTypes.ButtonA] = new WebXRControllerButton(buttonA == 1, buttonA); buttons[(int)ButtonTypes.ButtonB] = new WebXRControllerButton(buttonB == 1, buttonB); UpdateButtons(buttons); SetControllerActive(true); } }
private void OnControllerUpdate(WebXRControllerData controllerData) { if (controllerData.hand == (int)hand) { if (!controllerData.enabled) { SetControllerActive(false); return; } profiles = controllerData.profiles; if (oculusLinkBugTest != 1) { gripRotation = controllerData.gripRotation; gripPosition = controllerData.gripPosition; if (alwaysUseGrip) { transform.localRotation = controllerData.rotation * controllerData.gripRotation; transform.localPosition = controllerData.rotation * (controllerData.position + controllerData.gripPosition); } else { transform.localRotation = controllerData.rotation; transform.localPosition = controllerData.position; } // Oculus on desktop returns wrong rotation for targetRaySpace, this is an ugly hack to fix it if (CheckOculusLinkBug()) { HandleOculusLinkBug(controllerData); } } else { // Oculus on desktop returns wrong rotation for targetRaySpace, this is an ugly hack to fix it HandleOculusLinkBug(controllerData); } trigger = controllerData.trigger; squeeze = controllerData.squeeze; thumbstick = controllerData.thumbstick; thumbstickX = controllerData.thumbstickX; thumbstickY = controllerData.thumbstickY; touchpad = controllerData.touchpad; touchpadX = controllerData.touchpadX; touchpadY = controllerData.touchpadY; buttonA = controllerData.buttonA; buttonB = controllerData.buttonB; WebXRControllerButton[] buttons = new WebXRControllerButton[6]; buttons[(int)ButtonTypes.Trigger] = new WebXRControllerButton(trigger == 1, trigger); buttons[(int)ButtonTypes.Grip] = new WebXRControllerButton(squeeze == 1, squeeze); buttons[(int)ButtonTypes.Thumbstick] = new WebXRControllerButton(thumbstick == 1, thumbstick); buttons[(int)ButtonTypes.Touchpad] = new WebXRControllerButton(touchpad == 1, touchpad); buttons[(int)ButtonTypes.ButtonA] = new WebXRControllerButton(buttonA == 1, buttonA); buttons[(int)ButtonTypes.ButtonB] = new WebXRControllerButton(buttonB == 1, buttonB); UpdateButtons(buttons); SetControllerActive(true); } }
private void OnControllerUpdate(WebXRControllerData controllerData) { if (controllerData.hand == (int)hand) { if (!controllerData.enabled) { SetControllerActive(false); return; } profiles = controllerData.profiles; if (oculusLinkBugTest != 1) { gripRotation = controllerData.gripRotation; gripPosition = controllerData.gripPosition; if (alwaysUseGrip) { transform.localRotation = controllerData.rotation * controllerData.gripRotation; transform.localPosition = controllerData.rotation * (controllerData.position + controllerData.gripPosition); } else { transform.localRotation = controllerData.rotation; transform.localPosition = controllerData.position; } // Oculus on desktop returns wrong rotation for targetRaySpace, this is an ugly hack to fix it if (CheckOculusLinkBug()) { HandleOculusLinkBug(controllerData); } } else { // Oculus on desktop returns wrong rotation for targetRaySpace, this is an ugly hack to fix it HandleOculusLinkBug(controllerData); } trigger = controllerData.trigger; triggerTouched = controllerData.triggerTouched; squeeze = controllerData.squeeze; squeezeTouched = controllerData.squeezeTouched; thumbstick = controllerData.thumbstick; thumbstickTouched = controllerData.thumbstickTouched; thumbstickX = controllerData.thumbstickX; thumbstickY = controllerData.thumbstickY; touchpad = controllerData.touchpad; touchpadTouched = controllerData.touchpadTouched; touchpadX = controllerData.touchpadX; touchpadY = controllerData.touchpadY; buttonA = controllerData.buttonA; buttonATouched = controllerData.buttonATouched; buttonB = controllerData.buttonB; buttonBTouched = controllerData.buttonBTouched; if (buttons?.Length != 6) { InitButtons(); } else { UpdateAllButtons(); } SetControllerActive(true); } }