Example #1
0
 public static void Postfix(ref GameInput.InputState __result, GameInput.Button button)
 {
     if (!InputPatch.controlsEnabled)
     {
         __result = new GameInput.InputState
         {
             flags    = GameInput.InputStateFlags.Up,
             timeDown = 0f
         };
     }
 }
Example #2
0
            public static bool Prefix(bool useKeyboard, bool useController)
            {
                XRInputManager xrInput = GetXRInputManager();

                if (!xrInput.hasControllers())
                {
                    return(true);
                }

                float unscaledTime = Time.unscaledTime;

                for (int i = 0; i < GameInput.inputs.Count; i++)
                {
                    GameInput.InputState inputState     = default;
                    GameInput.InputState prevInputState = GameInput.inputStates[i];
                    inputState.timeDown = prevInputState.timeDown;
                    bool wasHeld = (prevInputState.flags & GameInput.InputStateFlags.Held) > 0U;

                    GameInput.Input  currentInput = GameInput.inputs[i];
                    GameInput.Device device       = currentInput.device;
                    KeyCode          key          = currentInput.keyCode;

                    if (key != KeyCode.None)
                    {
                        bool pressed = xrInput.GetXRInput(key);
                        GameInput.InputStateFlags prevState = GameInput.inputStates[i].flags;
                        if (pressed && (prevState == GameInput.InputStateFlags.Held && prevState == GameInput.InputStateFlags.Down))
                        {
                            inputState.flags |= GameInput.InputStateFlags.Held;
                        }
                        if (pressed && prevState == GameInput.InputStateFlags.Up)
                        {
                            inputState.flags |= GameInput.InputStateFlags.Down;
                        }
                        if (!pressed)
                        {
                            inputState.flags |= GameInput.InputStateFlags.Up;
                        }
                        if (inputState.flags != 0U && !PlatformUtils.isConsolePlatform && (GameInput.controllerEnabled || device != GameInput.Device.Controller))
                        {
                            GameInput.lastDevice = device;
                        }
                    }
                    else
                    {
                        float axisValue = GameInput.axisValues[(int)currentInput.axis];
                        bool  isPressed;
                        if (GameInput.inputs[i].axisPositive)
                        {
                            isPressed = (axisValue > currentInput.axisDeadZone);
                        }
                        else
                        {
                            isPressed = (axisValue < -currentInput.axisDeadZone);
                        }
                        if (isPressed)
                        {
                            inputState.flags |= GameInput.InputStateFlags.Held;
                        }
                        if (isPressed && !wasHeld)
                        {
                            inputState.flags |= GameInput.InputStateFlags.Down;
                        }
                        if (!isPressed && wasHeld)
                        {
                            inputState.flags |= GameInput.InputStateFlags.Up;
                        }
                    }

                    if ((inputState.flags & GameInput.InputStateFlags.Down) != 0U)
                    {
                        int lastIndex = GameInput.lastInputPressed[(int)device];
                        int newIndex  = i;
                        inputState.timeDown = unscaledTime;
                        if (lastIndex > -1)
                        {
                            GameInput.Input lastInput         = GameInput.inputs[lastIndex];
                            bool            isSameTime        = inputState.timeDown == GameInput.inputStates[lastIndex].timeDown;
                            bool            lastAxisIsGreater = Mathf.Abs(GameInput.axisValues[(int)lastInput.axis]) > Mathf.Abs(GameInput.axisValues[(int)currentInput.axis]);
                            if (isSameTime && lastAxisIsGreater)
                            {
                                newIndex = lastIndex;
                            }
                        }
                        GameInput.lastInputPressed[(int)device] = newIndex;
                    }

                    if ((device == GameInput.Device.Controller && !useController) || (device == GameInput.Device.Keyboard && !useKeyboard))
                    {
                        inputState.flags = 0U;
                        if (wasHeld)
                        {
                            inputState.flags |= GameInput.InputStateFlags.Up;
                        }
                    }
                    GameInput.inputStates[i] = inputState;
                }

                return(false);
            }