JosJuice db75509ec5 Android: Enfore correct stick gate in overlay
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.
2020-06-29 01:20:02 +02:00

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