2012-08-15 02:41:21 +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
|
|
|
* ---
|
2018-01-04 18:14:31 +01:00
|
|
|
* Copyright (c) 2011-2018, Lukas Weber <laochailan@web.de>.
|
|
|
|
* Copyright (c) 2012-2018, Andrei Alexeyev <akari@alienslab.net>.
|
2012-08-15 02:41:21 +02:00
|
|
|
*/
|
|
|
|
|
2017-09-27 14:14:53 +02:00
|
|
|
#pragma once
|
2017-11-25 20:45:11 +01:00
|
|
|
#include "taisei.h"
|
2012-08-15 02:41:21 +02:00
|
|
|
|
2017-02-04 03:56:40 +01:00
|
|
|
#include <SDL.h>
|
2017-02-17 17:03:49 +01:00
|
|
|
#include <stdbool.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
|
|
|
|
2017-09-19 20:46:28 +02:00
|
|
|
enum {
|
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
|
2017-09-19 20:46:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef enum {
|
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,
|
|
|
|
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,
|
|
|
|
GAMEPAD_BUTTON_A,
|
|
|
|
GAMEPAD_BUTTON_B,
|
|
|
|
GAMEPAD_BUTTON_X,
|
|
|
|
GAMEPAD_BUTTON_Y,
|
|
|
|
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,
|
|
|
|
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,
|
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;
|
|
|
|
|
2012-08-15 02:41:21 +02:00
|
|
|
void gamepad_init(void);
|
|
|
|
void gamepad_shutdown(void);
|
|
|
|
void gamepad_restart(void);
|
|
|
|
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);
|
|
|
|
int gamepad_current_device_num(void);
|
|
|
|
|
|
|
|
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
|
|
|
|
2017-12-30 16:38:35 +01:00
|
|
|
GamepadButton gamepad_button_from_axis(GamepadAxis axis);
|
|
|
|
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);
|
2012-08-15 02:41:21 +02:00
|
|
|
|
2017-12-30 16:50:09 +01:00
|
|
|
#define GAMEPAD_AXIS_MAX_VALUE 32767
|
|
|
|
#define GAMEPAD_AXIS_MIN_VALUE -32768
|
2017-03-06 16:32:51 +01:00
|
|
|
#define AXISVAL sign
|