2012-08-15 02:41:21 +02:00
|
|
|
/*
|
2019-08-03 19:43:48 +02:00
|
|
|
* This software is licensed under the terms of the MIT License.
|
2017-02-11 04:52:08 +01:00
|
|
|
* See COPYING for further information.
|
2012-08-15 02:41:21 +02:00
|
|
|
* ---
|
2024-05-16 23:30:41 +02:00
|
|
|
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
|
|
|
|
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
|
2012-08-15 02:41:21 +02:00
|
|
|
*/
|
|
|
|
|
2021-08-12 23:09:01 +02:00
|
|
|
#pragma once
|
2017-11-25 20:45:11 +01:00
|
|
|
#include "taisei.h"
|
2012-08-15 02:41:21 +02:00
|
|
|
|
|
|
|
#include "events.h"
|
2017-02-17 17:03:49 +01:00
|
|
|
#include "config.h"
|
2012-08-15 02:41:21 +02:00
|
|
|
|
2024-05-17 04:41:28 +02:00
|
|
|
#include <SDL.h>
|
|
|
|
|
2018-01-18 10:13:25 +01:00
|
|
|
typedef enum GamepadAxisDigitalValue {
|
2018-01-12 19:26:07 +01:00
|
|
|
AXISVAL_LEFT = -1,
|
|
|
|
AXISVAL_RIGHT = 1,
|
2017-09-19 20:46:28 +02:00
|
|
|
|
2018-01-12 19:26:07 +01:00
|
|
|
AXISVAL_UP = -1,
|
|
|
|
AXISVAL_DOWN = 1,
|
2017-09-19 20:46:28 +02:00
|
|
|
|
2018-01-12 19:26:07 +01:00
|
|
|
AXISVAL_NULL = 0
|
2018-01-18 10:13:25 +01:00
|
|
|
} GamepadAxisDigitalValue;
|
2017-09-19 20:46:28 +02:00
|
|
|
|
2018-01-18 10:13:25 +01:00
|
|
|
typedef enum GamepadPlrAxis {
|
2018-01-12 19:26:07 +01:00
|
|
|
PLRAXIS_LR, // aka X
|
|
|
|
PLRAXIS_UD, // aka Y
|
2017-09-19 20:46:28 +02:00
|
|
|
} GamepadPlrAxis;
|
|
|
|
|
2017-12-30 16:38:35 +01:00
|
|
|
typedef enum GamepadEmulatedButton {
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_EMULATED_BUTTON_INVALID = -1,
|
|
|
|
GAMEPAD_EMULATED_BUTTON_TRIGGER_LEFT,
|
|
|
|
GAMEPAD_EMULATED_BUTTON_TRIGGER_RIGHT,
|
2018-01-18 10:13:25 +01:00
|
|
|
GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_UP,
|
|
|
|
GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_DOWN,
|
|
|
|
GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_LEFT,
|
|
|
|
GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_RIGHT,
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_EMULATED_BUTTON_MAX,
|
2017-12-30 16:38:35 +01:00
|
|
|
} GamepadEmulatedButton;
|
|
|
|
|
|
|
|
typedef enum GamepadButton {
|
2018-01-12 19:26:07 +01:00
|
|
|
// must match SDL_GameControllerButton
|
|
|
|
GAMEPAD_BUTTON_INVALID = -1,
|
2019-08-02 20:38:33 +02:00
|
|
|
#ifdef __SWITCH__
|
|
|
|
GAMEPAD_BUTTON_B,
|
|
|
|
GAMEPAD_BUTTON_A,
|
|
|
|
GAMEPAD_BUTTON_Y,
|
|
|
|
GAMEPAD_BUTTON_X,
|
|
|
|
#else
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_BUTTON_A,
|
|
|
|
GAMEPAD_BUTTON_B,
|
|
|
|
GAMEPAD_BUTTON_X,
|
|
|
|
GAMEPAD_BUTTON_Y,
|
2019-08-02 20:38:33 +02:00
|
|
|
#endif
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_BUTTON_BACK,
|
|
|
|
GAMEPAD_BUTTON_GUIDE,
|
|
|
|
GAMEPAD_BUTTON_START,
|
|
|
|
GAMEPAD_BUTTON_STICK_LEFT,
|
|
|
|
GAMEPAD_BUTTON_STICK_RIGHT,
|
|
|
|
GAMEPAD_BUTTON_SHOULDER_LEFT,
|
|
|
|
GAMEPAD_BUTTON_SHOULDER_RIGHT,
|
|
|
|
GAMEPAD_BUTTON_DPAD_UP,
|
|
|
|
GAMEPAD_BUTTON_DPAD_DOWN,
|
|
|
|
GAMEPAD_BUTTON_DPAD_LEFT,
|
|
|
|
GAMEPAD_BUTTON_DPAD_RIGHT,
|
2022-01-08 17:22:44 +01:00
|
|
|
GAMEPAD_BUTTON_MISC1,
|
|
|
|
GAMEPAD_BUTTON_P1,
|
|
|
|
GAMEPAD_BUTTON_P2,
|
|
|
|
GAMEPAD_BUTTON_P3,
|
|
|
|
GAMEPAD_BUTTON_P4,
|
|
|
|
GAMEPAD_BUTTON_TOUCHPAD,
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_BUTTON_MAX,
|
2017-12-30 16:38:35 +01:00
|
|
|
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_BUTTON_EMULATED = 0x8000,
|
2017-12-30 16:38:35 +01:00
|
|
|
|
2018-01-12 19:26:07 +01:00
|
|
|
GAMEPAD_BUTTON_TRIGGER_LEFT = GAMEPAD_EMULATED_BUTTON_TRIGGER_LEFT | GAMEPAD_BUTTON_EMULATED,
|
|
|
|
GAMEPAD_BUTTON_TRIGGER_RIGHT = GAMEPAD_EMULATED_BUTTON_TRIGGER_RIGHT | GAMEPAD_BUTTON_EMULATED,
|
2018-01-18 10:13:25 +01:00
|
|
|
|
|
|
|
GAMEPAD_BUTTON_ANALOG_STICK_UP = GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_UP | GAMEPAD_BUTTON_EMULATED,
|
|
|
|
GAMEPAD_BUTTON_ANALOG_STICK_DOWN = GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_DOWN | GAMEPAD_BUTTON_EMULATED,
|
|
|
|
GAMEPAD_BUTTON_ANALOG_STICK_LEFT = GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_LEFT | GAMEPAD_BUTTON_EMULATED,
|
|
|
|
GAMEPAD_BUTTON_ANALOG_STICK_RIGHT = GAMEPAD_EMULATED_BUTTON_ANALOG_STICK_RIGHT | GAMEPAD_BUTTON_EMULATED,
|
2017-12-30 16:38:35 +01:00
|
|
|
} GamepadButton;
|
|
|
|
|
|
|
|
typedef enum GamepadAxis {
|
2018-01-12 19:26:07 +01:00
|
|
|
// must match SDL_GameControllerAxis
|
|
|
|
GAMEPAD_AXIS_INVALID = -1,
|
|
|
|
GAMEPAD_AXIS_LEFT_X,
|
|
|
|
GAMEPAD_AXIS_LEFT_Y,
|
|
|
|
GAMEPAD_AXIS_RIGHT_X,
|
|
|
|
GAMEPAD_AXIS_RIGHT_Y,
|
|
|
|
GAMEPAD_AXIS_TRIGGER_LEFT,
|
|
|
|
GAMEPAD_AXIS_TRIGGER_RIGHT,
|
|
|
|
GAMEPAD_AXIS_MAX
|
2017-12-30 16:38:35 +01:00
|
|
|
} GamepadAxis;
|
|
|
|
|
2019-04-19 13:28:32 +02:00
|
|
|
enum {
|
|
|
|
GAMEPAD_DEVNUM_INVALID = -1,
|
|
|
|
GAMEPAD_DEVNUM_ANY = -2,
|
|
|
|
};
|
|
|
|
|
2012-08-15 02:41:21 +02:00
|
|
|
void gamepad_init(void);
|
|
|
|
void gamepad_shutdown(void);
|
2023-06-20 01:11:04 +02:00
|
|
|
bool gamepad_initialized(void);
|
2012-08-15 02:41:21 +02:00
|
|
|
void gamepad_event(SDL_Event*, EventHandler, EventFlags, void*);
|
|
|
|
|
2017-12-30 16:38:35 +01:00
|
|
|
int gamepad_device_count(void);
|
|
|
|
const char* gamepad_device_name(int);
|
|
|
|
void gamepad_device_guid(int num, char *guid_str, size_t guid_str_sz);
|
|
|
|
int gamepad_device_num_from_guid(const char *guid_str);
|
2019-04-19 13:28:32 +02:00
|
|
|
int gamepad_get_active_device(void);
|
|
|
|
bool gamepad_update_devices(void);
|
2017-12-30 16:38:35 +01:00
|
|
|
|
|
|
|
bool gamepad_button_pressed(GamepadButton btn);
|
|
|
|
bool gamepad_game_key_pressed(KeyIndex key);
|
|
|
|
|
|
|
|
const char* gamepad_button_name(GamepadButton btn);
|
|
|
|
const char* gamepad_axis_name(GamepadAxis btn);
|
|
|
|
|
|
|
|
GamepadButton gamepad_button_from_name(const char *name);
|
|
|
|
GamepadAxis gamepad_axis_from_name(const char *name);
|
2017-08-28 13:51:05 +02:00
|
|
|
|
2018-01-18 10:13:25 +01:00
|
|
|
GamepadButton gamepad_button_from_axis(GamepadAxis axis, GamepadAxisDigitalValue dval);
|
2017-12-30 16:38:35 +01:00
|
|
|
GamepadButton gamepad_button_from_sdl_button(SDL_GameControllerButton btn);
|
|
|
|
SDL_GameControllerButton gamepad_button_to_sdl_button(GamepadButton btn);
|
2012-08-17 20:58:23 +02:00
|
|
|
|
2017-12-30 16:38:35 +01:00
|
|
|
GamepadAxis gamepad_axis_from_sdl_axis(SDL_GameControllerAxis axis);
|
|
|
|
SDL_GameControllerAxis gamepad_axis_to_sdl_axis(GamepadAxis axis);
|
2017-07-15 05:22:56 +02:00
|
|
|
|
2017-12-30 16:38:35 +01:00
|
|
|
int gamepad_axis_value(GamepadAxis paxis);
|
|
|
|
int gamepad_player_axis_value(GamepadPlrAxis paxis);
|
2023-07-11 23:51:44 +02:00
|
|
|
void gamepad_get_player_analog_input(int *xaxis, int *yaxis);
|
2012-08-15 02:41:21 +02:00
|
|
|
|
2018-01-14 04:15:25 +01:00
|
|
|
double gamepad_normalize_axis_value(int val);
|
|
|
|
int gamepad_denormalize_axis_value(double val);
|
|
|
|
|
2024-05-27 19:12:28 +02:00
|
|
|
double gamepad_get_normalized_deadzone(void);
|
|
|
|
double gamepad_get_normalized_maxzone(void);
|
|
|
|
|
2017-12-30 16:50:09 +01:00
|
|
|
#define GAMEPAD_AXIS_MAX_VALUE 32767
|
|
|
|
#define GAMEPAD_AXIS_MIN_VALUE -32768
|