/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "dusk.h" typedef struct inputbutton_s inputbutton_t; #ifdef DUSK_INPUT_KEYBOARD typedef SDL_Scancode inputscancodesdl2_t; #endif #ifdef DUSK_INPUT_GAMEPAD typedef SDL_GameControllerButton inputgamepadbuttonsdl2_t; typedef SDL_GameControllerAxis inputgamepadaxissdl2_t; #endif #ifdef DUSK_INPUT_POINTER typedef enum { INPUT_POINTER_AXIS_X, INPUT_POINTER_AXIS_Y, INPUT_POINTER_AXIS_Z, INPUT_POINTER_AXIS_WHEEL_X, INPUT_POINTER_AXIS_WHEEL_Y, } inputpointeraxissdl2_t; #endif typedef struct { #ifdef DUSK_INPUT_GAMEPAD SDL_GameController *controller; #endif #ifdef DUSK_INPUT_KEYBOARD const uint8_t *keyboardState; #endif #ifdef DUSK_INPUT_POINTER int16_t mouseX, mouseY; int16_t scrollX, scrollY; #endif } inputsdl2_t; // Setup platform variables for input. #ifdef DUSK_INPUT_KEYBOARD typedef inputscancodesdl2_t inputscancodeplatform_t; #endif #ifdef DUSK_INPUT_GAMEPAD typedef inputgamepadbuttonsdl2_t inputgamepadbuttonplatform_t; typedef inputgamepadaxissdl2_t inputgamepadaxissplatform_t; #endif #ifdef DUSK_INPUT_POINTER typedef inputpointeraxissdl2_t inputpointeraxisplatform_t; #endif #define inputUpdatePlatform inputUpdateSDL2 #define inputButtonGetValuePlatform inputButtonGetValueSDL2 typedef inputsdl2_t inputplatform_t; /** * Updates the input state for SDL2. */ void inputUpdateSDL2(void); /** * Returns the deadzone for the given gamepad axis (0 to INT16_MAX). * * @param button The button to get the deadzone of. * @return The deadzone threshold (0 to INT16_MAX). */ int16_t inputGetDeadzoneSDL2(const inputbutton_t button); /** * Returns the input value of the given button (0 to INT16_MAX). * * @param button The button to get the value of. * @return The value of the button (0 to INT16_MAX). */ int16_t inputButtonGetValueSDL2(const inputbutton_t button);