diff options
Diffstat (limited to 'src/Ryujinx.Input/GamepadStateSnapshot.cs')
| -rw-r--r-- | src/Ryujinx.Input/GamepadStateSnapshot.cs | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/Ryujinx.Input/GamepadStateSnapshot.cs b/src/Ryujinx.Input/GamepadStateSnapshot.cs new file mode 100644 index 00000000..cf3e3e28 --- /dev/null +++ b/src/Ryujinx.Input/GamepadStateSnapshot.cs @@ -0,0 +1,70 @@ +using Ryujinx.Common.Memory; +using System.Runtime.CompilerServices; + +namespace Ryujinx.Input +{ + /// <summary> + /// A snapshot of a <see cref="IGamepad"/>. + /// </summary> + public struct GamepadStateSnapshot + { + // NOTE: Update Array size if JoystickInputId is changed. + private Array3<Array2<float>> _joysticksState; + // NOTE: Update Array size if GamepadInputId is changed. + private Array28<bool> _buttonsState; + + /// <summary> + /// Create a new instance of <see cref="GamepadStateSnapshot"/>. + /// </summary> + /// <param name="joysticksState">The joysticks state</param> + /// <param name="buttonsState">The buttons state</param> + public GamepadStateSnapshot(Array3<Array2<float>> joysticksState, Array28<bool> buttonsState) + { + _joysticksState = joysticksState; + _buttonsState = buttonsState; + } + + /// <summary> + /// Check if a given input button is pressed. + /// </summary> + /// <param name="inputId">The button id</param> + /// <returns>True if the given button is pressed</returns> + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsPressed(GamepadButtonInputId inputId) => _buttonsState[(int)inputId]; + + + /// <summary> + /// Set the state of a given button. + /// </summary> + /// <param name="inputId">The button id</param> + /// <param name="value">The state to assign for the given button.</param> + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetPressed(GamepadButtonInputId inputId, bool value) => _buttonsState[(int)inputId] = value; + + /// <summary> + /// Get the values of a given input joystick. + /// </summary> + /// <param name="inputId">The stick id</param> + /// <returns>The values of the given input joystick</returns> + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public (float, float) GetStick(StickInputId inputId) + { + var result = _joysticksState[(int)inputId]; + + return (result[0], result[1]); + } + + /// <summary> + /// Set the values of a given input joystick. + /// </summary> + /// <param name="inputId">The stick id</param> + /// <param name="x">The x axis value</param> + /// <param name="y">The y axis value</param> + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetStick(StickInputId inputId, float x, float y) + { + _joysticksState[(int)inputId][0] = x; + _joysticksState[(int)inputId][1] = y; + } + } +} |
