Esempio n. 1
0
        private bool IsButtonPressed(uint index, ButtonPressTypes type, OVRInput.Touch button)
        {
            if (index >= uint.MaxValue)
            {
                return(false);
            }

            var device = GetTrackedObject(GetControllerByIndex(index));

            if (device)
            {
                var controller = touchControllers[index];
                switch (type)
                {
                case ButtonPressTypes.Touch:
                    return(OVRInput.Get(button, controller));

                case ButtonPressTypes.TouchDown:
                    return(OVRInput.GetDown(button, controller));

                case ButtonPressTypes.TouchUp:
                    return(OVRInput.GetUp(button, controller));
                }
            }

            return(false);
        }
Esempio n. 2
0
        /// <summary>
        /// checks if the given button (KeyCode) is currently in a specific pressed state (ButtonPressTypes) on the keyboard
        /// also asserts that button presses are only handled for the currently active controller by comparing the controller indices
        /// </summary>
        /// <param name="index">unique index of the controller for which the button press is to be checked</param>
        /// <param name="type">the type of press (up, down, hold)</param>
        /// <param name="button">the button on the keyboard</param>
        /// <returns>Returns true if the button is being pressed.</returns>
        protected virtual bool IsButtonPressed(uint index, ButtonPressTypes type, KeyCode button)
        {
            SetupPlayer();
            if (index >= uint.MaxValue)
            {
                return(false);
            }

            if (index == 1)
            {
                if (gazeController == null || !gazeController.selected)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }

            switch (type)
            {
            case ButtonPressTypes.Press:
                return(Input.GetKey(button));

            case ButtonPressTypes.PressDown:
                return(Input.GetKeyDown(button));

            case ButtonPressTypes.PressUp:
                return(Input.GetKeyUp(button));
            }
            return(false);
        }
        private bool IsButtonPressed(uint index, ButtonPressTypes type, ulong button)
        {
            if (index >= OpenVR.k_unTrackedDeviceIndexInvalid)
            {
                return(false);
            }
            var device = SteamVR_Controller.Input((int)index);

            switch (type)
            {
            case ButtonPressTypes.Press:
                return(device.GetPress(button));

            case ButtonPressTypes.PressDown:
                return(device.GetPressDown(button));

            case ButtonPressTypes.PressUp:
                return(device.GetPressUp(button));

            case ButtonPressTypes.Touch:
                return(device.GetTouch(button));

            case ButtonPressTypes.TouchDown:
                return(device.GetTouchDown(button));

            case ButtonPressTypes.TouchUp:
                return(device.GetTouchUp(button));
            }

            return(false);
        }
Esempio n. 4
0
        /// <summary>
        /// The GetControllerButtonState method is used to determine if the given controller button for the given press type on the given controller reference is currently taking place.
        /// </summary>
        /// <param name="buttonType">The type of button to check for the state of.</param>
        /// <param name="pressType">The button state to check for.</param>
        /// <param name="controllerReference">The reference to the controller to check the button state on.</param>
        /// <returns>Returns true if the given button is in the state of the given press type on the given controller reference.</returns>
        public override bool GetControllerButtonState(ButtonTypes buttonType, ButtonPressTypes pressType, VRTK_ControllerReference controllerReference)
        {
            uint index = VRTK_ControllerReference.GetRealIndex(controllerReference);

            switch (buttonType)
            {
            case ButtonTypes.Trigger:
            case ButtonTypes.TriggerHairline:
                return(GetControllerButtonState(index, "Trigger", pressType));

            case ButtonTypes.Grip:
            case ButtonTypes.GripHairline:
                return(GetControllerButtonState(index, "Grip", pressType));

            case ButtonTypes.Touchpad:
                return(GetControllerButtonState(index, "TouchpadPress", pressType));

            case ButtonTypes.ButtonOne:
                return(GetControllerButtonState(index, "ButtonOne", pressType));

            case ButtonTypes.ButtonTwo:
                return(GetControllerButtonState(index, "ButtonTwo", pressType));

            case ButtonTypes.StartMenu:
                return(GetControllerButtonState(index, "StartMenu", pressType));
            }
            return(false);
        }
Esempio n. 5
0
        private static bool IsButtonPressed(uint index, ButtonPressTypes type, ulong button)
        {
            if (index >= uint.MaxValue)
            {
                return(false);
            }
            var device = SteamVR_Controller.Input((int)index);

            switch (type)
            {
            case ButtonPressTypes.Press:
                return(device.GetPress(button));

            case ButtonPressTypes.PressDown:
                return(device.GetPressDown(button));

            case ButtonPressTypes.PressUp:
                return(device.GetPressUp(button));

            case ButtonPressTypes.Touch:
                return(device.GetTouch(button));

            case ButtonPressTypes.TouchDown:
                return(device.GetTouchDown(button));

            case ButtonPressTypes.TouchUp:
                return(device.GetTouchUp(button));
            }

            return(false);
        }
Esempio n. 6
0
        protected virtual bool MousePressType(ButtonPressTypes pressType, int buttonIndex)
        {
            switch (pressType)
            {
            case ButtonPressTypes.Press:
                return(Input.GetMouseButton(buttonIndex));

            case ButtonPressTypes.PressDown:
                return(Input.GetMouseButtonDown(buttonIndex));

            case ButtonPressTypes.PressUp:
                return(Input.GetMouseButtonUp(buttonIndex));
            }
            return(false);
        }
Esempio n. 7
0
        /// <summary>
        /// The GetControllerButtonState method is used to determine if the given controller button for the given press type on the given controller reference is currently taking place.
        /// </summary>
        /// <param name="buttonType">The type of button to check for the state of.</param>
        /// <param name="pressType">The button state to check for.</param>
        /// <param name="controllerReference">The reference to the controller to check the button state on.</param>
        /// <returns>Returns true if the given button is in the state of the given press type on the given controller reference.</returns>
        public override bool GetControllerButtonState(ButtonTypes buttonType, ButtonPressTypes pressType, VRTK_ControllerReference controllerReference)
        {
            if (!VRTK_ControllerReference.IsValid(controllerReference))
            {
                return(false);
            }

            bool isRightController = (controllerReference.hand == ControllerHand.Right);

            KeyCode?touchButton = VRTK_SharedMethods.GetDictionaryValue((isRightController ? rightControllerTouchKeyCodes : leftControllerTouchKeyCodes), buttonType);
            KeyCode?pressButton = VRTK_SharedMethods.GetDictionaryValue((isRightController ? rightControllerPressKeyCodes : leftControllerPressKeyCodes), buttonType);

            switch (buttonType)
            {
            case ButtonTypes.Trigger:
                switch (pressType)
                {
                case ButtonPressTypes.Touch:
                case ButtonPressTypes.TouchDown:
                case ButtonPressTypes.TouchUp:
                    return(IsButtonPressed(pressType, touchButton, pressButton));

                case ButtonPressTypes.Press:
                case ButtonPressTypes.PressDown:
                case ButtonPressTypes.PressUp:
                    return(IsMouseAliasPress(isRightController, buttonType, pressType) || IsAxisButtonPress(controllerReference, buttonType, pressType));
                }
                break;

            case ButtonTypes.Grip:
                return(IsMouseAliasPress(isRightController, buttonType, pressType) || IsAxisButtonPress(controllerReference, buttonType, pressType));

            case ButtonTypes.Touchpad:
                return(IsButtonPressed(pressType, touchButton, pressButton));

            case ButtonTypes.ButtonOne:
                return(IsButtonPressed(pressType, touchButton, pressButton));

            case ButtonTypes.ButtonTwo:
                return(IsButtonPressed(pressType, touchButton, pressButton));

            case ButtonTypes.StartMenu:
                return(IsButtonPressed(pressType, touchButton, pressButton));
            }
            return(false);
        }
Esempio n. 8
0
        /// <summary>
        /// checks if the given button (KeyCode) is currently in a specific pressed state (ButtonPressTypes) on the keyboard
        /// also asserts that button presses are only handled for the currently active controller by comparing the controller indices
        /// </summary>
        /// <param name="index">unique index of the controller for which the button press is to be checked</param>
        /// <param name="type">the type of press (up, down, hold)</param>
        /// <param name="button">the button on the keyboard</param>
        /// <returns></returns>
        private bool IsButtonPressed(uint index, ButtonPressTypes type, KeyCode button)
        {
            if (index >= uint.MaxValue)
            {
                return(false);
            }

            if (index == 1)
            {
                if (!controllers.rightController.Selected)
                {
                    return(false);
                }
            }
            else if (index == 2)
            {
                if (!controllers.leftController.Selected)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }


            switch (type)
            {
            case ButtonPressTypes.Press:
                return(Input.GetKey(button));

            case ButtonPressTypes.PressDown:
                return(Input.GetKeyDown(button));

            case ButtonPressTypes.PressUp:
                return(Input.GetKeyUp(button));
            }
            return(false);
        }
Esempio n. 9
0
        private bool IsButtonPressed(uint index, ButtonPressTypes type, ControllerRawButton button)
        {
            if (index < 0)
            {
                return(false);
            }
            var device = GetControllerInputByIndex(index);

            if (device == null)
            {
                return(false);
            }

            switch (type)
            {
            case ButtonPressTypes.Press:
                return(device.GetButton(button));

            case ButtonPressTypes.PressDown:
                return(device.GetButtonDown(button));

            case ButtonPressTypes.PressUp:
                return(device.GetButtonUp(button));

            case ButtonPressTypes.Touch:
                return(device.GetButton(button));

            case ButtonPressTypes.TouchDown:
                return(device.GetButtonDown(button));

            case ButtonPressTypes.TouchUp:
                return(device.GetButtonUp(button));
            }

            return(false);
        }
Esempio n. 10
0
        protected virtual bool IsButtonPressed(ButtonPressTypes pressType, KeyCode?touchKey, KeyCode?pressKey)
        {
            switch (pressType)
            {
            case ButtonPressTypes.Touch:
                return(touchKey != null && Input.GetKey((KeyCode)touchKey));

            case ButtonPressTypes.TouchDown:
                return(touchKey != null && Input.GetKeyDown((KeyCode)touchKey));

            case ButtonPressTypes.TouchUp:
                return(touchKey != null && Input.GetKeyUp((KeyCode)touchKey));

            case ButtonPressTypes.Press:
                return(pressKey != null && Input.GetKey((KeyCode)pressKey));

            case ButtonPressTypes.PressDown:
                return(pressKey != null && Input.GetKeyDown((KeyCode)pressKey));

            case ButtonPressTypes.PressUp:
                return(pressKey != null && Input.GetKeyUp((KeyCode)pressKey));
            }
            return(false);
        }
Esempio n. 11
0
 /// <summary>
 /// The GetControllerButtonState method is used to determine if the given controller button for the given press type on the given controller reference is currently taking place.
 /// </summary>
 /// <param name="buttonType">The type of button to check for the state of.</param>
 /// <param name="pressType">The button state to check for.</param>
 /// <param name="controllerReference">The reference to the controller to check the button state on.</param>
 /// <returns>Returns true if the given button is in the state of the given press type on the given controller reference.</returns>
 public override bool GetControllerButtonState(ButtonTypes buttonType, ButtonPressTypes pressType, VRTK_ControllerReference controllerReference)
 {
     return(false);
 }
Esempio n. 12
0
        /// <summary>
        /// Gets the state of the given button key mapping for the press type on the controller index.
        /// </summary>
        /// <param name="index">The index of the controller.</param>
        /// <param name="keyMapping">The key mapping key to check.</param>
        /// <param name="pressType">The type of button press to check.</param>
        /// <returns>Returns true if the button state matches the given data.</returns>
        protected virtual bool GetControllerButtonState(uint index, string keyMapping, ButtonPressTypes pressType)
        {
            KeyCode buttonCode = VRTK_SharedMethods.GetDictionaryValue(keyMappings, keyMapping, KeyCode.None);

            if (pressType == ButtonPressTypes.Touch)
            {
                return(IsButtonPressed(index, ButtonPressTypes.Press, buttonCode));
            }
            else if (pressType == ButtonPressTypes.TouchDown)
            {
                return(IsButtonPressed(index, ButtonPressTypes.PressDown, buttonCode));
            }
            else if (pressType == ButtonPressTypes.TouchUp)
            {
                return(IsButtonPressed(index, ButtonPressTypes.PressUp, buttonCode));
            }
            else if (pressType == ButtonPressTypes.Press)
            {
                return(!IsButtonPressIgnored() && IsButtonPressed(index, ButtonPressTypes.Press, buttonCode));
            }
            else if (pressType == ButtonPressTypes.PressDown)
            {
                return(!IsButtonPressIgnored() && IsButtonPressed(index, ButtonPressTypes.PressDown, buttonCode));
            }
            else if (pressType == ButtonPressTypes.PressUp)
            {
                return(!IsButtonPressIgnored() && IsButtonPressed(index, ButtonPressTypes.PressUp, buttonCode));
            }
            return(false);
        }
Esempio n. 13
0
 /// <summary>
 /// Gets the state of the given button key mapping for the press type on the controller index.
 /// </summary>
 /// <param name="index">The index of the controller.</param>
 /// <param name="keyMapping">The key mapping key to check.</param>
 /// <param name="pressType">The type of button press to check.</param>
 /// <returns>Returns true if the button state matches the given data.</returns>
 protected virtual bool GetControllerButtonState(uint index, string keyMapping, ButtonPressTypes pressType)
 {
     if (pressType == ButtonPressTypes.Touch)
     {
         return(IsButtonPressed(index, ButtonPressTypes.Press, keyMappings[keyMapping]));
     }
     else if (pressType == ButtonPressTypes.TouchDown)
     {
         return(IsButtonPressed(index, ButtonPressTypes.PressDown, keyMappings[keyMapping]));
     }
     else if (pressType == ButtonPressTypes.TouchUp)
     {
         return(IsButtonPressed(index, ButtonPressTypes.PressUp, keyMappings[keyMapping]));
     }
     else if (pressType == ButtonPressTypes.Press)
     {
         return(!IsButtonPressIgnored() && IsButtonPressed(index, ButtonPressTypes.Press, keyMappings[keyMapping]));
     }
     else if (pressType == ButtonPressTypes.PressDown)
     {
         return(!IsButtonPressIgnored() && IsButtonPressed(index, ButtonPressTypes.PressDown, keyMappings[keyMapping]));
     }
     else if (pressType == ButtonPressTypes.PressUp)
     {
         return(!IsButtonPressIgnored() && IsButtonPressed(index, ButtonPressTypes.PressUp, keyMappings[keyMapping]));
     }
     return(false);
 }
 /// <summary>
 /// The GetControllerButtonState method is used to determine if the given controller button for the given press type on the given controller reference is currently taking place.
 /// </summary>
 /// <param name="buttonType">The type of button to check for the state of.</param>
 /// <param name="pressType">The button state to check for.</param>
 /// <param name="controllerReference">The reference to the controller to check the button state on.</param>
 /// <returns>Returns true if the given button is in the state of the given press type on the given controller reference.</returns>
 public abstract bool GetControllerButtonState(ButtonTypes buttonType, ButtonPressTypes pressType, VRTK_ControllerReference controllerReference);
Esempio n. 15
0
        protected virtual bool IsAxisButtonPress(VRTK_ControllerReference controllerReference, ButtonTypes buttonType, ButtonPressTypes pressType)
        {
            bool    isRightController = (controllerReference.hand == ControllerHand.Right);
            Vector2 axisValue         = GetButtonAxis(buttonType, controllerReference);

            return(IsAxisOnHandButtonPress((isRightController ? rightAxisButtonPressState : leftAxisButtonPressState), buttonType, pressType, axisValue));
        }
Esempio n. 16
0
        protected virtual bool IsAxisOnHandButtonPress(Dictionary <ButtonTypes, bool> axisHandState, ButtonTypes buttonType, ButtonPressTypes pressType, Vector2 axisValue)
        {
            bool previousAxisState = VRTK_SharedMethods.GetDictionaryValue(axisHandState, buttonType);

            if (pressType == ButtonPressTypes.PressDown && !previousAxisState)
            {
                bool currentAxisState = GetAxisPressState(previousAxisState, axisValue.x);
                VRTK_SharedMethods.AddDictionaryValue(axisHandState, buttonType, currentAxisState, true);
                return(currentAxisState);
            }
            if (pressType == ButtonPressTypes.PressUp && previousAxisState)
            {
                bool currentAxisState = GetAxisPressState(previousAxisState, axisValue.x);
                VRTK_SharedMethods.AddDictionaryValue(axisHandState, buttonType, currentAxisState, true);
                return(!currentAxisState);
            }
            return(false);
        }
Esempio n. 17
0
        protected virtual bool IsMouseAliasPress(bool validController, ButtonTypes buttonType, ButtonPressTypes pressType)
        {
            if (validController)
            {
                switch (buttonType)
                {
                case ButtonTypes.Trigger:
                    return(MousePressType(pressType, 0));

                case ButtonTypes.Grip:
                    return(MousePressType(pressType, 1));
                }
            }
            return(false);
        }
Esempio n. 18
0
        private static bool IsButtonPressed(uint index, ButtonPressTypes type, ulong button)
        {
            if (index >= uint.MaxValue)
            {
                return false;
            }
            var device = SteamVR_Controller.Input((int)index);

            switch (type)
            {
                case ButtonPressTypes.Press:
                    return device.GetPress(button);
                case ButtonPressTypes.PressDown:
                    return device.GetPressDown(button);
                case ButtonPressTypes.PressUp:
                    return device.GetPressUp(button);
                case ButtonPressTypes.Touch:
                    return device.GetTouch(button);
                case ButtonPressTypes.TouchDown:
                    return device.GetTouchDown(button);
                case ButtonPressTypes.TouchUp:
                    return device.GetTouchUp(button);
            }

            return false;
        }