mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 16:19:28 +01:00
db75509ec5
Currently, the touch controller overlay uses a square gate for sticks. This commit changes that so that it instead uses the stick gate configured in the INI, which ensures that the values sent to the core are appropriately scaled regardless of what is configured in the INI and makes the overlay look nicer if the INI is set to a stick gate that matches the graphics.
284 lines
7.3 KiB
C++
284 lines
7.3 KiB
C++
// Copyright 2013 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
namespace ButtonManager
|
|
{
|
|
enum ButtonType
|
|
{
|
|
// GC
|
|
BUTTON_A = 0,
|
|
BUTTON_B = 1,
|
|
BUTTON_START = 2,
|
|
BUTTON_X = 3,
|
|
BUTTON_Y = 4,
|
|
BUTTON_Z = 5,
|
|
BUTTON_UP = 6,
|
|
BUTTON_DOWN = 7,
|
|
BUTTON_LEFT = 8,
|
|
BUTTON_RIGHT = 9,
|
|
STICK_MAIN = 10, // Used on Java Side
|
|
STICK_MAIN_UP = 11,
|
|
STICK_MAIN_DOWN = 12,
|
|
STICK_MAIN_LEFT = 13,
|
|
STICK_MAIN_RIGHT = 14,
|
|
STICK_C = 15, // Used on Java Side
|
|
STICK_C_UP = 16,
|
|
STICK_C_DOWN = 17,
|
|
STICK_C_LEFT = 18,
|
|
STICK_C_RIGHT = 19,
|
|
TRIGGER_L = 20,
|
|
TRIGGER_R = 21,
|
|
// Wiimote
|
|
WIIMOTE_BUTTON_A = 100,
|
|
WIIMOTE_BUTTON_B = 101,
|
|
WIIMOTE_BUTTON_MINUS = 102,
|
|
WIIMOTE_BUTTON_PLUS = 103,
|
|
WIIMOTE_BUTTON_HOME = 104,
|
|
WIIMOTE_BUTTON_1 = 105,
|
|
WIIMOTE_BUTTON_2 = 106,
|
|
WIIMOTE_UP = 107,
|
|
WIIMOTE_DOWN = 108,
|
|
WIIMOTE_LEFT = 109,
|
|
WIIMOTE_RIGHT = 110,
|
|
WIIMOTE_IR = 111, // To Be Used on Java Side
|
|
WIIMOTE_IR_UP = 112,
|
|
WIIMOTE_IR_DOWN = 113,
|
|
WIIMOTE_IR_LEFT = 114,
|
|
WIIMOTE_IR_RIGHT = 115,
|
|
WIIMOTE_IR_FORWARD = 116,
|
|
WIIMOTE_IR_BACKWARD = 117,
|
|
WIIMOTE_IR_HIDE = 118,
|
|
WIIMOTE_SWING = 119, // To Be Used on Java Side
|
|
WIIMOTE_SWING_UP = 120,
|
|
WIIMOTE_SWING_DOWN = 121,
|
|
WIIMOTE_SWING_LEFT = 122,
|
|
WIIMOTE_SWING_RIGHT = 123,
|
|
WIIMOTE_SWING_FORWARD = 124,
|
|
WIIMOTE_SWING_BACKWARD = 125,
|
|
WIIMOTE_TILT = 126, // To Be Used on Java Side
|
|
WIIMOTE_TILT_FORWARD = 127,
|
|
WIIMOTE_TILT_BACKWARD = 128,
|
|
WIIMOTE_TILT_LEFT = 129,
|
|
WIIMOTE_TILT_RIGHT = 130,
|
|
WIIMOTE_TILT_MODIFIER = 131,
|
|
WIIMOTE_SHAKE_X = 132,
|
|
WIIMOTE_SHAKE_Y = 133,
|
|
WIIMOTE_SHAKE_Z = 134,
|
|
// Nunchuk
|
|
NUNCHUK_BUTTON_C = 200,
|
|
NUNCHUK_BUTTON_Z = 201,
|
|
NUNCHUK_STICK = 202, // To Be Used on Java Side
|
|
NUNCHUK_STICK_UP = 203,
|
|
NUNCHUK_STICK_DOWN = 204,
|
|
NUNCHUK_STICK_LEFT = 205,
|
|
NUNCHUK_STICK_RIGHT = 206,
|
|
NUNCHUK_SWING = 207, // To Be Used on Java Side
|
|
NUNCHUK_SWING_UP = 208,
|
|
NUNCHUK_SWING_DOWN = 209,
|
|
NUNCHUK_SWING_LEFT = 210,
|
|
NUNCHUK_SWING_RIGHT = 211,
|
|
NUNCHUK_SWING_FORWARD = 212,
|
|
NUNCHUK_SWING_BACKWARD = 213,
|
|
NUNCHUK_TILT = 214, // To Be Used on Java Side
|
|
NUNCHUK_TILT_FORWARD = 215,
|
|
NUNCHUK_TILT_BACKWARD = 216,
|
|
NUNCHUK_TILT_LEFT = 217,
|
|
NUNCHUK_TILT_RIGHT = 218,
|
|
NUNCHUK_TILT_MODIFIER = 219,
|
|
NUNCHUK_SHAKE_X = 220,
|
|
NUNCHUK_SHAKE_Y = 221,
|
|
NUNCHUK_SHAKE_Z = 222,
|
|
// Classic
|
|
CLASSIC_BUTTON_A = 300,
|
|
CLASSIC_BUTTON_B = 301,
|
|
CLASSIC_BUTTON_X = 302,
|
|
CLASSIC_BUTTON_Y = 303,
|
|
CLASSIC_BUTTON_MINUS = 304,
|
|
CLASSIC_BUTTON_PLUS = 305,
|
|
CLASSIC_BUTTON_HOME = 306,
|
|
CLASSIC_BUTTON_ZL = 307,
|
|
CLASSIC_BUTTON_ZR = 308,
|
|
CLASSIC_DPAD_UP = 309,
|
|
CLASSIC_DPAD_DOWN = 310,
|
|
CLASSIC_DPAD_LEFT = 311,
|
|
CLASSIC_DPAD_RIGHT = 312,
|
|
CLASSIC_STICK_LEFT = 313, // To Be Used on Java Side
|
|
CLASSIC_STICK_LEFT_UP = 314,
|
|
CLASSIC_STICK_LEFT_DOWN = 315,
|
|
CLASSIC_STICK_LEFT_LEFT = 316,
|
|
CLASSIC_STICK_LEFT_RIGHT = 317,
|
|
CLASSIC_STICK_RIGHT = 318, // To Be Used on Java Side
|
|
CLASSIC_STICK_RIGHT_UP = 319,
|
|
CLASSIC_STICK_RIGHT_DOWN = 320,
|
|
CLASSIC_STICK_RIGHT_LEFT = 321,
|
|
CLASSIC_STICK_RIGHT_RIGHT = 322,
|
|
CLASSIC_TRIGGER_L = 323,
|
|
CLASSIC_TRIGGER_R = 324,
|
|
// Guitar
|
|
GUITAR_BUTTON_MINUS = 400,
|
|
GUITAR_BUTTON_PLUS = 401,
|
|
GUITAR_FRET_GREEN = 402,
|
|
GUITAR_FRET_RED = 403,
|
|
GUITAR_FRET_YELLOW = 404,
|
|
GUITAR_FRET_BLUE = 405,
|
|
GUITAR_FRET_ORANGE = 406,
|
|
GUITAR_STRUM_UP = 407,
|
|
GUITAR_STRUM_DOWN = 408,
|
|
GUITAR_STICK = 409, // To Be Used on Java Side
|
|
GUITAR_STICK_UP = 410,
|
|
GUITAR_STICK_DOWN = 411,
|
|
GUITAR_STICK_LEFT = 412,
|
|
GUITAR_STICK_RIGHT = 413,
|
|
GUITAR_WHAMMY_BAR = 414,
|
|
// Drums
|
|
DRUMS_BUTTON_MINUS = 500,
|
|
DRUMS_BUTTON_PLUS = 501,
|
|
DRUMS_PAD_RED = 502,
|
|
DRUMS_PAD_YELLOW = 503,
|
|
DRUMS_PAD_BLUE = 504,
|
|
DRUMS_PAD_GREEN = 505,
|
|
DRUMS_PAD_ORANGE = 506,
|
|
DRUMS_PAD_BASS = 507,
|
|
DRUMS_STICK = 508, // To Be Used on Java Side
|
|
DRUMS_STICK_UP = 509,
|
|
DRUMS_STICK_DOWN = 510,
|
|
DRUMS_STICK_LEFT = 511,
|
|
DRUMS_STICK_RIGHT = 512,
|
|
// Turntable
|
|
TURNTABLE_BUTTON_GREEN_LEFT = 600,
|
|
TURNTABLE_BUTTON_RED_LEFT = 601,
|
|
TURNTABLE_BUTTON_BLUE_LEFT = 602,
|
|
TURNTABLE_BUTTON_GREEN_RIGHT = 603,
|
|
TURNTABLE_BUTTON_RED_RIGHT = 604,
|
|
TURNTABLE_BUTTON_BLUE_RIGHT = 605,
|
|
TURNTABLE_BUTTON_MINUS = 606,
|
|
TURNTABLE_BUTTON_PLUS = 607,
|
|
TURNTABLE_BUTTON_HOME = 608,
|
|
TURNTABLE_BUTTON_EUPHORIA = 609,
|
|
TURNTABLE_TABLE_LEFT = 610, // To Be Used on Java Side
|
|
TURNTABLE_TABLE_LEFT_LEFT = 611,
|
|
TURNTABLE_TABLE_LEFT_RIGHT = 612,
|
|
TURNTABLE_TABLE_RIGHT = 613, // To Be Used on Java Side
|
|
TURNTABLE_TABLE_RIGHT_LEFT = 614,
|
|
TURNTABLE_TABLE_RIGHT_RIGHT = 615,
|
|
TURNTABLE_STICK = 616, // To Be Used on Java Side
|
|
TURNTABLE_STICK_UP = 617,
|
|
TURNTABLE_STICK_DOWN = 618,
|
|
TURNTABLE_STICK_LEFT = 619,
|
|
TURNTABLE_STICK_RIGHT = 620,
|
|
TURNTABLE_EFFECT_DIAL = 621,
|
|
TURNTABLE_CROSSFADE = 622, // To Be Used on Java Side
|
|
TURNTABLE_CROSSFADE_LEFT = 623,
|
|
TURNTABLE_CROSSFADE_RIGHT = 624,
|
|
// Wiimote IMU
|
|
WIIMOTE_ACCEL_LEFT = 625,
|
|
WIIMOTE_ACCEL_RIGHT = 626,
|
|
WIIMOTE_ACCEL_FORWARD = 627,
|
|
WIIMOTE_ACCEL_BACKWARD = 628,
|
|
WIIMOTE_ACCEL_UP = 629,
|
|
WIIMOTE_ACCEL_DOWN = 630,
|
|
WIIMOTE_GYRO_PITCH_UP = 631,
|
|
WIIMOTE_GYRO_PITCH_DOWN = 632,
|
|
WIIMOTE_GYRO_ROLL_LEFT = 633,
|
|
WIIMOTE_GYRO_ROLL_RIGHT = 634,
|
|
WIIMOTE_GYRO_YAW_LEFT = 635,
|
|
WIIMOTE_GYRO_YAW_RIGHT = 636,
|
|
// Rumble
|
|
RUMBLE = 700,
|
|
};
|
|
enum ButtonState
|
|
{
|
|
BUTTON_RELEASED = 0,
|
|
BUTTON_PRESSED = 1
|
|
};
|
|
enum BindType
|
|
{
|
|
BIND_BUTTON = 0,
|
|
BIND_AXIS
|
|
};
|
|
class Button
|
|
{
|
|
private:
|
|
ButtonState m_state;
|
|
|
|
public:
|
|
Button() : m_state(BUTTON_RELEASED) {}
|
|
void SetState(ButtonState state) { m_state = state; }
|
|
bool Pressed() { return m_state == BUTTON_PRESSED; }
|
|
~Button() {}
|
|
};
|
|
class Axis
|
|
{
|
|
private:
|
|
float m_value;
|
|
|
|
public:
|
|
Axis() : m_value(0.0f) {}
|
|
void SetValue(float value) { m_value = value; }
|
|
float AxisValue() { return m_value; }
|
|
~Axis() {}
|
|
};
|
|
|
|
struct sBind
|
|
{
|
|
const int m_pad_id;
|
|
const ButtonType m_button_type;
|
|
const BindType m_bind_type;
|
|
const int m_bind;
|
|
const float m_neg;
|
|
sBind(int pad_id, ButtonType button_type, BindType bind_type, int bind, float neg)
|
|
: m_pad_id(pad_id), m_button_type(button_type), m_bind_type(bind_type), m_bind(bind),
|
|
m_neg(neg)
|
|
{
|
|
}
|
|
};
|
|
|
|
class InputDevice
|
|
{
|
|
private:
|
|
const std::string m_dev;
|
|
std::map<ButtonType, bool> m_buttons;
|
|
std::map<ButtonType, float> m_axises;
|
|
|
|
// Key is pad_id and ButtonType
|
|
std::map<std::pair<int, ButtonType>, sBind*> m_input_binds;
|
|
|
|
public:
|
|
InputDevice(std::string dev) : m_dev(dev) {}
|
|
~InputDevice()
|
|
{
|
|
for (const auto& bind : m_input_binds)
|
|
delete bind.second;
|
|
m_input_binds.clear();
|
|
}
|
|
void AddBind(sBind* bind)
|
|
{
|
|
m_input_binds[std::make_pair(bind->m_pad_id, bind->m_button_type)] = bind;
|
|
}
|
|
bool PressEvent(int button, int action);
|
|
void AxisEvent(int axis, float value);
|
|
bool ButtonValue(int pad_id, ButtonType button);
|
|
float AxisValue(int pad_id, ButtonType axis);
|
|
};
|
|
|
|
void Init(const std::string&);
|
|
|
|
// pad_id is numbered 0 to 3 for GC pads and 4 to 7 for Wiimotes
|
|
bool GetButtonPressed(int pad_id, ButtonType button);
|
|
float GetAxisValue(int pad_id, ButtonType axis);
|
|
|
|
// emu_pad_id is numbered 0 to 3 for both GC pads and Wiimotes
|
|
double GetInputRadiusAtAngle(int emu_pad_id, ButtonType stick, double angle);
|
|
|
|
bool GamepadEvent(const std::string& dev, int button, int action);
|
|
void GamepadAxisEvent(const std::string& dev, int axis, float value);
|
|
|
|
void Shutdown();
|
|
} // namespace ButtonManager
|