Exemple #1
0
        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);
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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;
     }
 }
Exemple #5
0
        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);
            }
        }