Merge pull request #11385 from JosJuice/android-input-overhaul

Android input overhaul
This commit is contained in:
JosJuice
2023-03-11 12:37:44 +01:00
committed by GitHub
121 changed files with 5881 additions and 4990 deletions

View File

@ -18,126 +18,13 @@ bool IsSettingSaveable(const Config::Location& config_location)
{
for (Config::System system :
{Config::System::SYSCONF, Config::System::GFX, Config::System::DualShockUDPClient,
Config::System::Logger, Config::System::FreeLook})
Config::System::Logger, Config::System::FreeLook, Config::System::Main})
{
if (config_location.system == system)
return true;
}
if (config_location.system == Config::System::Main)
{
for (const std::string_view section :
{"NetPlay", "General", "GBA", "Display", "Network", "Analytics", "AndroidOverlayButtons",
"DSP", "GameList", "FifoPlayer", "AutoUpdate", "Movie", "Input", "Debug",
"BluetoothPassthrough", "USBPassthrough", "Interface", "EmulatedUSBDevices"})
{
if (config_location.section == section)
return true;
}
// Android controller mappings are not saveable, other Android settings are.
// TODO: Kill the current Android controller mappings system
if (config_location.section == "Android")
{
static constexpr std::array<const char*, 14> android_setting_saveable = {
"ControlScale", "ControlOpacity", "EmulationOrientation",
"JoystickRelCenter", "LastPlatformTab", "MotionControls",
"PhoneRumble", "ShowInputOverlay", "IRMode",
"IRAlwaysRecenter", "ShowGameTitles", "InterfaceTheme",
"InterfaceThemeMode", "UseBlackBackgrounds"};
return std::any_of(
android_setting_saveable.cbegin(), android_setting_saveable.cend(),
[&config_location](const char* key) { return key == config_location.key; });
}
}
static const auto s_setting_saveable = {
// Main.Core
&Config::MAIN_DEFAULT_ISO.GetLocation(),
&Config::MAIN_ENABLE_CHEATS.GetLocation(),
&Config::MAIN_MEMCARD_A_PATH.GetLocation(),
&Config::MAIN_MEMCARD_B_PATH.GetLocation(),
&Config::MAIN_AUTO_DISC_CHANGE.GetLocation(),
&Config::MAIN_ALLOW_SD_WRITES.GetLocation(),
&Config::MAIN_DPL2_DECODER.GetLocation(),
&Config::MAIN_DPL2_QUALITY.GetLocation(),
&Config::MAIN_AUDIO_LATENCY.GetLocation(),
&Config::MAIN_AUDIO_STRETCH.GetLocation(),
&Config::MAIN_AUDIO_STRETCH_LATENCY.GetLocation(),
&Config::MAIN_OVERCLOCK.GetLocation(),
&Config::MAIN_OVERCLOCK_ENABLE.GetLocation(),
&Config::MAIN_RAM_OVERRIDE_ENABLE.GetLocation(),
&Config::MAIN_MEM1_SIZE.GetLocation(),
&Config::MAIN_MEM2_SIZE.GetLocation(),
&Config::MAIN_GFX_BACKEND.GetLocation(),
&Config::MAIN_ENABLE_SAVESTATES.GetLocation(),
&Config::MAIN_FALLBACK_REGION.GetLocation(),
&Config::MAIN_REAL_WII_REMOTE_REPEAT_REPORTS.GetLocation(),
&Config::MAIN_DSP_HLE.GetLocation(),
&Config::MAIN_CPU_CORE.GetLocation(),
&Config::MAIN_SKIP_IPL.GetLocation(),
&Config::MAIN_GC_LANGUAGE.GetLocation(),
&Config::MAIN_AGP_CART_A_PATH.GetLocation(),
&Config::MAIN_AGP_CART_B_PATH.GetLocation(),
&Config::MAIN_BBA_MAC.GetLocation(),
&Config::MAIN_BBA_XLINK_IP.GetLocation(),
&Config::MAIN_BBA_BUILTIN_DNS.GetLocation(),
&Config::MAIN_BBA_BUILTIN_IP.GetLocation(),
&Config::MAIN_BBA_XLINK_CHAT_OSD.GetLocation(),
&Config::MAIN_OVERRIDE_REGION_SETTINGS.GetLocation(),
&Config::MAIN_CUSTOM_RTC_ENABLE.GetLocation(),
&Config::MAIN_CUSTOM_RTC_VALUE.GetLocation(),
&Config::MAIN_JIT_FOLLOW_BRANCH.GetLocation(),
&Config::MAIN_FLOAT_EXCEPTIONS.GetLocation(),
&Config::MAIN_DIVIDE_BY_ZERO_EXCEPTIONS.GetLocation(),
&Config::MAIN_LOW_DCBZ_HACK.GetLocation(),
&Config::MAIN_FPRF.GetLocation(),
&Config::MAIN_ACCURATE_NANS.GetLocation(),
&Config::GetInfoForAdapterRumble(0).GetLocation(),
&Config::GetInfoForAdapterRumble(1).GetLocation(),
&Config::GetInfoForAdapterRumble(2).GetLocation(),
&Config::GetInfoForAdapterRumble(3).GetLocation(),
&Config::GetInfoForSimulateKonga(0).GetLocation(),
&Config::GetInfoForSimulateKonga(1).GetLocation(),
&Config::GetInfoForSimulateKonga(2).GetLocation(),
&Config::GetInfoForSimulateKonga(3).GetLocation(),
&Config::MAIN_EMULATION_SPEED.GetLocation(),
&Config::MAIN_PERF_MAP_DIR.GetLocation(),
&Config::MAIN_GPU_DETERMINISM_MODE.GetLocation(),
&Config::MAIN_DISABLE_ICACHE.GetLocation(),
&Config::MAIN_FAST_DISC_SPEED.GetLocation(),
&Config::MAIN_SYNC_ON_SKIP_IDLE.GetLocation(),
&Config::MAIN_FASTMEM.GetLocation(),
&Config::MAIN_TIMING_VARIANCE.GetLocation(),
&Config::MAIN_MAX_FALLBACK.GetLocation(),
&Config::MAIN_WII_SD_CARD.GetLocation(),
&Config::MAIN_WII_SD_CARD_ENABLE_FOLDER_SYNC.GetLocation(),
&Config::MAIN_WII_KEYBOARD.GetLocation(),
&Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING.GetLocation(),
&Config::MAIN_WIIMOTE_ENABLE_SPEAKER.GetLocation(),
&Config::MAIN_CONNECT_WIIMOTES_FOR_CONTROLLER_INTERFACE.GetLocation(),
&Config::MAIN_SLOT_A.GetLocation(),
&Config::MAIN_SLOT_B.GetLocation(),
&Config::MAIN_SERIAL_PORT_1.GetLocation(),
&Config::GetInfoForSIDevice(0).GetLocation(),
&Config::GetInfoForSIDevice(1).GetLocation(),
&Config::GetInfoForSIDevice(2).GetLocation(),
&Config::GetInfoForSIDevice(3).GetLocation(),
&Config::MAIN_CPU_THREAD.GetLocation(),
&Config::MAIN_MMU.GetLocation(),
&Config::MAIN_PAUSE_ON_PANIC.GetLocation(),
&Config::MAIN_ACCURATE_CPU_CACHE.GetLocation(),
&Config::MAIN_BB_DUMP_PORT.GetLocation(),
&Config::MAIN_SYNC_GPU.GetLocation(),
&Config::MAIN_SYNC_GPU_MAX_DISTANCE.GetLocation(),
&Config::MAIN_SYNC_GPU_MIN_DISTANCE.GetLocation(),
&Config::MAIN_SYNC_GPU_OVERCLOCK.GetLocation(),
&Config::MAIN_OVERRIDE_BOOT_IOS.GetLocation(),
&Config::MAIN_GCI_FOLDER_A_PATH.GetLocation(),
&Config::MAIN_GCI_FOLDER_B_PATH.GetLocation(),
// UI.General
&Config::MAIN_USE_DISCORD_PRESENCE.GetLocation(),

View File

@ -120,6 +120,7 @@ void FreeLookController::LoadDefaults(const ControllerInterface& ciface)
{
EmulatedController::LoadDefaults(ciface);
#ifndef ANDROID
auto hotkey_string = [](std::vector<std::string> inputs) {
return "@(" + JoinStrings(inputs, "+") + ')';
};
@ -194,6 +195,7 @@ void FreeLookController::LoadDefaults(const ControllerInterface& ciface)
m_rotation_gyro->SetControlExpression(GyroButtons::YawRight,
"if(`Click 1`,`RelativeMouse X+` * 0.10, 0)");
#endif
#endif
}
ControllerEmu::ControlGroup* FreeLookController::GetGroup(FreeLookGroup group) const

View File

@ -83,6 +83,7 @@ void GBAPad::LoadDefaults(const ControllerInterface& ciface)
{
EmulatedController::LoadDefaults(ciface);
#ifndef ANDROID
// Buttons
m_buttons->SetControlExpression(0, "`Z`"); // B
m_buttons->SetControlExpression(1, "`X`"); // A
@ -101,4 +102,5 @@ void GBAPad::LoadDefaults(const ControllerInterface& ciface)
m_dpad->SetControlExpression(1, "`G`"); // Down
m_dpad->SetControlExpression(2, "`F`"); // Left
m_dpad->SetControlExpression(3, "`H`"); // Right
#endif
}

View File

@ -257,6 +257,47 @@ void GCKeyboard::LoadDefaults(const ControllerInterface& ciface)
m_keys5x->SetControlExpression(2, "`Up Arrow`");
m_keys5x->SetControlExpression(3, "`Right Arrow`");
m_keys5x->SetControlExpression(4, "Return");
#elif ANDROID
m_keys0x->SetControlExpression(0, "`Move Home`");
m_keys0x->SetControlExpression(1, "`Move End`");
m_keys0x->SetControlExpression(2, "`Page Up`");
m_keys0x->SetControlExpression(3, "`Page Down`");
m_keys0x->SetControlExpression(4, "`Scroll Lock`");
m_keys2x->SetControlExpression(9, "`Minus`");
m_keys2x->SetControlExpression(10, "`Grave`");
m_keys2x->SetControlExpression(11, "`PrtSc SysRq`");
m_keys2x->SetControlExpression(12, "`Apostrophe`");
m_keys2x->SetControlExpression(13, "`Left Bracket`");
m_keys2x->SetControlExpression(14, "``Equals``");
m_keys2x->SetControlExpression(15, "`Numpad Multiply`");
m_keys3x->SetControlExpression(0, "`Right Bracket`");
m_keys3x->SetControlExpression(1, "`Comma`");
m_keys3x->SetControlExpression(2, "`Period`");
m_keys3x->SetControlExpression(3, "`Slash`");
m_keys3x->SetControlExpression(4, "`Backslash`");
m_keys4x->SetControlExpression(1, "`Escape`");
m_keys4x->SetControlExpression(2, "`Insert`");
m_keys4x->SetControlExpression(3, "`Delete`");
m_keys4x->SetControlExpression(4, "`Semicolon`");
m_keys4x->SetControlExpression(5, "`Backspace`");
m_keys4x->SetControlExpression(6, "`Tab`");
m_keys4x->SetControlExpression(7, "`Caps Lock`");
m_keys4x->SetControlExpression(8, "`Left Shift`");
m_keys4x->SetControlExpression(9, "`Right Shift`");
m_keys4x->SetControlExpression(10, "`Left Ctrl`");
m_keys4x->SetControlExpression(11, "`Right Alt`");
m_keys4x->SetControlExpression(12, "`Left Meta`");
m_keys4x->SetControlExpression(13, "`Space`");
m_keys4x->SetControlExpression(14, "`Right Meta`");
m_keys4x->SetControlExpression(15, "`Menu`");
m_keys5x->SetControlExpression(0, "`Left`");
m_keys5x->SetControlExpression(1, "`Down`");
m_keys5x->SetControlExpression(2, "`Up`");
m_keys5x->SetControlExpression(3, "`Right`");
m_keys5x->SetControlExpression(4, "`Enter`");
#else // linux
m_keys0x->SetControlExpression(0, "Home");
m_keys0x->SetControlExpression(1, "End");

View File

@ -60,14 +60,6 @@ GCPad::GCPad(const unsigned int index) : m_index(index)
m_triggers->AddInput(ControllerEmu::Translate, named_trigger);
}
// rumble
groups.emplace_back(m_rumble = new ControllerEmu::ControlGroup(RUMBLE_GROUP));
m_rumble->AddOutput(ControllerEmu::Translate, _trans("Motor"));
// Microphone
groups.emplace_back(m_mic = new ControllerEmu::Buttons(MIC_GROUP));
m_mic->AddInput(ControllerEmu::Translate, _trans("Button"));
// dpad
groups.emplace_back(m_dpad = new ControllerEmu::Buttons(DPAD_GROUP));
for (const char* named_direction : named_directions)
@ -75,6 +67,14 @@ GCPad::GCPad(const unsigned int index) : m_index(index)
m_dpad->AddInput(ControllerEmu::Translate, named_direction);
}
// Microphone
groups.emplace_back(m_mic = new ControllerEmu::Buttons(MIC_GROUP));
m_mic->AddInput(ControllerEmu::Translate, _trans("Button"));
// rumble
groups.emplace_back(m_rumble = new ControllerEmu::ControlGroup(RUMBLE_GROUP));
m_rumble->AddOutput(ControllerEmu::Translate, _trans("Motor"));
// options
groups.emplace_back(m_options = new ControllerEmu::ControlGroup(OPTIONS_GROUP));
m_options->AddSetting(
@ -170,12 +170,16 @@ void GCPad::LoadDefaults(const ControllerInterface& ciface)
{
EmulatedController::LoadDefaults(ciface);
#ifdef ANDROID
// Rumble
m_rumble->SetControlExpression(0, "`Android/0/Device Sensors:Motor 0`");
#else
// Buttons
m_buttons->SetControlExpression(0, "`X`"); // A
m_buttons->SetControlExpression(1, "`Z`"); // B
m_buttons->SetControlExpression(2, "`C`"); // X
m_buttons->SetControlExpression(3, "`S`"); // Y
m_buttons->SetControlExpression(4, "`D`"); // Z
m_buttons->SetControlExpression(0, "`X`"); // A
m_buttons->SetControlExpression(1, "`Z`"); // B
m_buttons->SetControlExpression(2, "`C`"); // X
m_buttons->SetControlExpression(3, "`S`"); // Y
m_buttons->SetControlExpression(4, "`D`"); // Z
#ifdef _WIN32
m_buttons->SetControlExpression(5, "`RETURN`"); // Start
#else
@ -225,6 +229,7 @@ void GCPad::LoadDefaults(const ControllerInterface& ciface)
// Triggers
m_triggers->SetControlExpression(0, "`Q`"); // L
m_triggers->SetControlExpression(1, "`W`"); // R
#endif
}
bool GCPad::GetMicButton() const

View File

@ -69,14 +69,14 @@ Drums::Drums() : Extension1stParty("Drums", _trans("Drum Kit"))
_trans("%")},
50);
// Stick.
groups.emplace_back(m_stick =
new ControllerEmu::OctagonAnalogStick(_trans("Stick"), GATE_RADIUS));
// Buttons.
groups.emplace_back(m_buttons = new ControllerEmu::Buttons(_trans("Buttons")));
m_buttons->AddInput(ControllerEmu::DoNotTranslate, "-");
m_buttons->AddInput(ControllerEmu::DoNotTranslate, "+");
// Stick.
groups.emplace_back(m_stick =
new ControllerEmu::OctagonAnalogStick(_trans("Stick"), GATE_RADIUS));
}
void Drums::BuildDesiredExtensionState(DesiredExtensionState* target_state)

View File

@ -45,16 +45,16 @@ Nunchuk::Nunchuk() : Extension1stParty(_trans("Nunchuk"))
constexpr auto gate_radius = ControlState(STICK_GATE_RADIUS) / STICK_RADIUS;
groups.emplace_back(m_stick = new ControllerEmu::OctagonAnalogStick(STICK_GROUP, gate_radius));
// swing
groups.emplace_back(m_swing = new ControllerEmu::Force(_trans("Swing")));
// Shake
// Inverse the default intensity so shake is opposite that of wiimote.
// This is needed by Donkey Kong Country Returns for proper shake action detection.
groups.emplace_back(m_shake = new ControllerEmu::Shake(_trans("Shake"), -1));
// tilt
groups.emplace_back(m_tilt = new ControllerEmu::Tilt(_trans("Tilt")));
// Shake
// Inverse the default intensity so shake is opposite that of wiimote.
// This is needed by DKCR for proper shake action detection.
groups.emplace_back(m_shake = new ControllerEmu::Shake(_trans("Shake"), -1));
// swing
groups.emplace_back(m_swing = new ControllerEmu::Force(_trans("Swing")));
// accelerometer
groups.emplace_back(m_imu_accelerometer = new ControllerEmu::IMUAccelerometer(
@ -198,6 +198,7 @@ void Nunchuk::DoState(PointerWrap& p)
void Nunchuk::LoadDefaults(const ControllerInterface& ciface)
{
#ifndef ANDROID
// Stick
m_stick->SetControlExpression(0, "W"); // up
m_stick->SetControlExpression(1, "S"); // down
@ -228,5 +229,6 @@ void Nunchuk::LoadDefaults(const ControllerInterface& ciface)
m_shake->SetControlExpression(i, "`Click 2`");
#endif
}
#endif
}
} // namespace WiimoteEmu

View File

@ -214,21 +214,22 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index), m_bt_device_index(i
}
m_buttons->AddInput(ControllerEmu::DoNotTranslate, HOME_BUTTON, "HOME");
// Pointing (IR)
// D-Pad
groups.emplace_back(m_dpad = new ControllerEmu::Buttons(DPAD_GROUP));
for (const char* named_direction : named_directions)
{
m_dpad->AddInput(ControllerEmu::Translate, named_direction);
}
// i18n: "Point" refers to the action of pointing a Wii Remote.
groups.emplace_back(m_ir = new ControllerEmu::Cursor(IR_GROUP, _trans("Point")));
groups.emplace_back(m_swing = new ControllerEmu::Force(_trans("Swing")));
groups.emplace_back(m_tilt = new ControllerEmu::Tilt(_trans("Tilt")));
groups.emplace_back(m_shake = new ControllerEmu::Shake(_trans("Shake")));
groups.emplace_back(m_imu_accelerometer = new ControllerEmu::IMUAccelerometer(
ACCELEROMETER_GROUP, _trans("Accelerometer")));
groups.emplace_back(m_imu_gyroscope =
new ControllerEmu::IMUGyroscope(GYROSCOPE_GROUP, _trans("Gyroscope")));
groups.emplace_back(m_imu_ir = new ControllerEmu::IMUCursor("IMUIR", _trans("Point")));
groups.emplace_back(m_tilt = new ControllerEmu::Tilt(_trans("Tilt")));
groups.emplace_back(m_swing = new ControllerEmu::Force(_trans("Swing")));
groups.emplace_back(m_imu_ir = new ControllerEmu::IMUCursor("IMUIR", _trans("Point")));
const auto fov_default =
Common::DVec2(CameraLogic::CAMERA_FOV_X, CameraLogic::CAMERA_FOV_Y) / MathUtil::TAU * 360;
m_imu_ir->AddSetting(&m_fov_x_setting,
// i18n: FOV stands for "Field of view".
{_trans("Horizontal FOV"),
@ -237,7 +238,6 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index), m_bt_device_index(i
// i18n: Refers to emulated wii remote camera properties.
_trans("Camera field of view (affects sensitivity of pointing).")},
fov_default.x, 0.01, 180);
m_imu_ir->AddSetting(&m_fov_y_setting,
// i18n: FOV stands for "Field of view".
{_trans("Vertical FOV"),
@ -247,6 +247,21 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index), m_bt_device_index(i
_trans("Camera field of view (affects sensitivity of pointing).")},
fov_default.y, 0.01, 180);
groups.emplace_back(m_imu_accelerometer = new ControllerEmu::IMUAccelerometer(
ACCELEROMETER_GROUP, _trans("Accelerometer")));
groups.emplace_back(m_imu_gyroscope =
new ControllerEmu::IMUGyroscope(GYROSCOPE_GROUP, _trans("Gyroscope")));
// Hotkeys
groups.emplace_back(m_hotkeys = new ControllerEmu::ModifySettingsButton(_trans("Hotkeys")));
// hotkeys to temporarily modify the Wii Remote orientation (sideways, upright)
// this setting modifier is toggled
m_hotkeys->AddInput(_trans("Sideways Toggle"), true);
m_hotkeys->AddInput(_trans("Upright Toggle"), true);
// this setting modifier is not toggled
m_hotkeys->AddInput(_trans("Sideways Hold"), false);
m_hotkeys->AddInput(_trans("Upright Hold"), false);
// Extension
groups.emplace_back(m_attachments = new ControllerEmu::Attachments(_trans("Extension")));
m_attachments->AddAttachment(std::make_unique<WiimoteEmu::None>());
@ -266,13 +281,6 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index), m_bt_device_index(i
groups.emplace_back(m_rumble = new ControllerEmu::ControlGroup(_trans("Rumble")));
m_rumble->AddOutput(ControllerEmu::Translate, _trans("Motor"));
// D-Pad
groups.emplace_back(m_dpad = new ControllerEmu::Buttons(DPAD_GROUP));
for (const char* named_direction : named_directions)
{
m_dpad->AddInput(ControllerEmu::Translate, named_direction);
}
// Options
groups.emplace_back(m_options = new ControllerEmu::ControlGroup(_trans("Options")));
@ -291,21 +299,10 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index), m_bt_device_index(i
// Note: "Upright" and "Sideways" options can be enabled at the same time which produces an
// orientation where the wiimote points towards the left with the buttons towards you.
m_options->AddSetting(&m_upright_setting,
{"Upright Wiimote", nullptr, nullptr, _trans("Upright Wii Remote")}, false);
{UPRIGHT_OPTION, nullptr, nullptr, _trans("Upright Wii Remote")}, false);
m_options->AddSetting(&m_sideways_setting,
{"Sideways Wiimote", nullptr, nullptr, _trans("Sideways Wii Remote")},
false);
// Hotkeys
groups.emplace_back(m_hotkeys = new ControllerEmu::ModifySettingsButton(_trans("Hotkeys")));
// hotkeys to temporarily modify the Wii Remote orientation (sideways, upright)
// this setting modifier is toggled
m_hotkeys->AddInput(_trans("Sideways Toggle"), true);
m_hotkeys->AddInput(_trans("Upright Toggle"), true);
// this setting modifier is not toggled
m_hotkeys->AddInput(_trans("Sideways Hold"), false);
m_hotkeys->AddInput(_trans("Upright Hold"), false);
{SIDEWAYS_OPTION, nullptr, nullptr, _trans("Sideways Wii Remote")}, false);
Reset();
@ -655,6 +652,24 @@ void Wiimote::LoadDefaults(const ControllerInterface& ciface)
{
EmulatedController::LoadDefaults(ciface);
#ifdef ANDROID
// Rumble
m_rumble->SetControlExpression(0, "`Android/0/Device Sensors:Motor 0`");
// Motion Source
m_imu_accelerometer->SetControlExpression(0, "`Android/0/Device Sensors:Accel Up`");
m_imu_accelerometer->SetControlExpression(1, "`Android/0/Device Sensors:Accel Down`");
m_imu_accelerometer->SetControlExpression(2, "`Android/0/Device Sensors:Accel Left`");
m_imu_accelerometer->SetControlExpression(3, "`Android/0/Device Sensors:Accel Right`");
m_imu_accelerometer->SetControlExpression(4, "`Android/0/Device Sensors:Accel Forward`");
m_imu_accelerometer->SetControlExpression(5, "`Android/0/Device Sensors:Accel Backward`");
m_imu_gyroscope->SetControlExpression(0, "`Android/0/Device Sensors:Gyro Pitch Up`");
m_imu_gyroscope->SetControlExpression(1, "`Android/0/Device Sensors:Gyro Pitch Down`");
m_imu_gyroscope->SetControlExpression(2, "`Android/0/Device Sensors:Gyro Roll Left`");
m_imu_gyroscope->SetControlExpression(3, "`Android/0/Device Sensors:Gyro Roll Right`");
m_imu_gyroscope->SetControlExpression(4, "`Android/0/Device Sensors:Gyro Yaw Left`");
m_imu_gyroscope->SetControlExpression(5, "`Android/0/Device Sensors:Gyro Yaw Right`");
#else
// Buttons
#if defined HAVE_X11 && HAVE_X11
// A
@ -672,10 +687,10 @@ void Wiimote::LoadDefaults(const ControllerInterface& ciface)
// B
m_buttons->SetControlExpression(1, "`Click 1`");
#endif
m_buttons->SetControlExpression(2, "`1`"); // 1
m_buttons->SetControlExpression(3, "`2`"); // 2
m_buttons->SetControlExpression(4, "Q"); // -
m_buttons->SetControlExpression(5, "E"); // +
m_buttons->SetControlExpression(2, "`1`"); // 1
m_buttons->SetControlExpression(3, "`2`"); // 2
m_buttons->SetControlExpression(4, "Q"); // -
m_buttons->SetControlExpression(5, "E"); // +
#ifdef _WIN32
m_buttons->SetControlExpression(6, "RETURN"); // Home
@ -729,6 +744,7 @@ void Wiimote::LoadDefaults(const ControllerInterface& ciface)
m_imu_gyroscope->SetControlExpression(3, "`Gyro Roll Right`");
m_imu_gyroscope->SetControlExpression(4, "`Gyro Yaw Left`");
m_imu_gyroscope->SetControlExpression(5, "`Gyro Yaw Right`");
#endif
// Enable Nunchuk:
constexpr ExtensionNumber DEFAULT_EXT = ExtensionNumber::NUNCHUK;

View File

@ -129,6 +129,9 @@ public:
static constexpr const char* PLUS_BUTTON = "+";
static constexpr const char* HOME_BUTTON = "Home";
static constexpr const char* UPRIGHT_OPTION = "Upright Wiimote";
static constexpr const char* SIDEWAYS_OPTION = "Sideways Wiimote";
explicit Wiimote(unsigned int index);
~Wiimote();

View File

@ -143,12 +143,11 @@ elseif(ANDROID)
target_sources(inputcommon PRIVATE
ControllerInterface/Android/Android.cpp
ControllerInterface/Android/Android.h
ControllerInterface/Touch/ButtonManager.cpp
ControllerInterface/Touch/ButtonManager.h
ControllerInterface/Touch/InputOverrider.cpp
ControllerInterface/Touch/InputOverrider.h
ControllerInterface/Touch/Touchscreen.cpp
ControllerInterface/Touch/Touchscreen.h
)
target_link_libraries(inputcommon PRIVATE
androidcommon
)
endif()

View File

@ -11,6 +11,11 @@ NumericSettingBase::NumericSettingBase(const NumericSettingDetails& details) : m
{
}
const char* NumericSettingBase::GetININame() const
{
return m_details.ini_name;
}
const char* NumericSettingBase::GetUIName() const
{
return m_details.ui_name;

View File

@ -78,6 +78,7 @@ public:
virtual void SetToDefault() = 0;
const char* GetININame() const;
const char* GetUIName() const;
const char* GetUISuffix() const;
const char* GetUIDescription() const;

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,13 @@
// Copyright 2008 Dolphin Emulator Project
// Copyright 2021 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
namespace ciface::Android
{
void SetMotionSensorsEnabled(bool accelerometer_enabled, bool gyroscope_enabled);
void Init();
void Shutdown();
void PopulateDevices();
} // namespace ciface::Android

View File

@ -67,7 +67,7 @@ void ControllerInterface::Initialize(const WindowSystemInfo& wsi)
m_input_backends.emplace_back(ciface::SDL::CreateInputBackend(this));
#endif
#ifdef CIFACE_USE_ANDROID
// nothing needed
ciface::Android::Init();
#endif
#ifdef CIFACE_USE_EVDEV
m_input_backends.emplace_back(ciface::evdev::CreateInputBackend(this));
@ -237,7 +237,7 @@ void ControllerInterface::Shutdown()
ciface::Quartz::DeInit();
#endif
#ifdef CIFACE_USE_ANDROID
// nothing needed
ciface::Android::Shutdown();
#endif
// Empty the container of input backends to deconstruct and deinitialize them.

View File

@ -242,6 +242,18 @@ std::shared_ptr<Device> DeviceContainer::FindDevice(const DeviceQualifier& devq)
return nullptr;
}
std::vector<std::shared_ptr<Device>> DeviceContainer::GetAllDevices() const
{
std::lock_guard lk(m_devices_mutex);
std::vector<std::shared_ptr<Device>> devices;
for (const auto& d : m_devices)
devices.emplace_back(d);
return devices;
}
std::vector<std::string> DeviceContainer::GetAllDeviceStrings() const
{
std::lock_guard lk(m_devices_mutex);

View File

@ -226,6 +226,7 @@ public:
Device::Input* FindInput(std::string_view name, const Device* def_dev) const;
Device::Output* FindOutput(std::string_view name, const Device* def_dev) const;
std::vector<std::shared_ptr<Device>> GetAllDevices() const;
std::vector<std::string> GetAllDeviceStrings() const;
bool HasDefaultDevice() const;
std::string GetDefaultDeviceString() const;

View File

@ -1,788 +0,0 @@
// Copyright 2013 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "InputCommon/ControllerInterface/Touch/ButtonManager.h"
#include <array>
#include <sstream>
#include <string>
#include <unordered_map>
#include <vector>
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Common/StringUtil.h"
#include "Common/Thread.h"
namespace ButtonManager
{
namespace
{
constexpr char TOUCHSCREEN_KEY[] = "Touchscreen";
constexpr std::array<const char*, 155> CONFIG_STRINGS{{
// GC
"InputA",
"InputB",
"InputStart",
"InputX",
"InputY",
"InputZ",
"DPadUp",
"DPadDown",
"DPadLeft",
"DPadRight",
"MainUp",
"MainDown",
"MainLeft",
"MainRight",
"CStickUp",
"CStickDown",
"CStickLeft",
"CStickRight",
"InputL",
"InputR",
// Wiimote
"WiimoteA",
"WiimoteB",
"WiimoteMinus",
"WiimotePlus",
"WiimoteHome",
"Wiimote1",
"Wiimote2",
"WiimoteUp",
"WiimoteDown",
"WiimoteLeft",
"WiimoteRight",
"IRUp",
"IRDown",
"IRLeft",
"IRRight",
"IRForward",
"IRBackward",
"IRHide",
"SwingUp",
"SwingDown",
"SwingLeft",
"SwingRight",
"SwingForward",
"SwingBackward",
"TiltForward",
"TiltBackward",
"TiltLeft",
"TiltRight",
"TiltModifier",
"ShakeX",
"ShakeY",
"ShakeZ",
// Nunchuk
"NunchukC",
"NunchukZ",
"NunchukUp",
"NunchukDown",
"NunchukLeft",
"NunchukRight",
"NunchukSwingUp",
"NunchukSwingDown",
"NunchukSwingLeft",
"NunchukSwingRight",
"NunchukSwingForward",
"NunchukSwingBackward",
"NunchukTiltForward",
"NunchukTiltBackward",
"NunchukTiltLeft",
"NunchukTiltRight",
"NunchukTiltModifier",
"NunchukShakeX",
"NunchukShakeY",
"NunchukShakeZ",
// Classic
"ClassicA",
"ClassicB",
"ClassicX",
"ClassicY",
"ClassicMinus",
"ClassicPlus",
"ClassicHome",
"ClassicZL",
"ClassicZR",
"ClassicUp",
"ClassicDown",
"ClassicLeft",
"ClassicRight",
"ClassicLeftStickUp",
"ClassicLeftStickDown",
"ClassicLeftStickLeft",
"ClassicLeftStickRight",
"ClassicRightStickUp",
"ClassicRightStickDown",
"ClassicRightStickLeft",
"ClassicRightStickRight",
"ClassicTriggerL",
"ClassicTriggerR",
// Guitar
"GuitarMinus",
"GuitarPlus",
"GuitarGreen",
"GuitarRed",
"GuitarYellow",
"GuitarBlue",
"GuitarOrange",
"GuitarStrumUp",
"GuitarStrumDown",
"GuitarUp",
"GuitarDown",
"GuitarLeft",
"GuitarRight",
"GuitarWhammy",
// Drums
"DrumsMinus",
"DrumsPlus",
"DrumsRed",
"DrumsYellow",
"DrumsBlue",
"DrumsGreen",
"DrumsOrange",
"DrumsBass",
"DrumsUp",
"DrumsDown",
"DrumsLeft",
"DrumsRight",
// Turntable
"TurntableGreenLeft",
"TurntableRedLeft",
"TurntableBlueLeft",
"TurntableGreenRight",
"TurntableRedRight",
"TurntableBlueRight",
"TurntableMinus",
"TurntablePlus",
"TurntableHome",
"TurntableEuphoria",
"TurntableLeftTLeft",
"TurntableLeftTRight",
"TurntableRightTLeft",
"TurntableRightTRight",
"TurntableUp",
"TurntableDown",
"TurntableLeft",
"TurntableRight",
"TurntableEffDial",
"TurntableCrossLeft",
"TurntableCrossRight",
// Wiimote IMU
"WiimoteAccelLeft",
"WiimoteAccelRight",
"WiimoteAccelForward",
"WiimoteAccelBackward",
"WiimoteAccelUp",
"WiimoteAccelDown",
"WiimoteGyroPitchUp",
"WiimoteGyroPitchDown",
"WiimoteGyroRollLeft",
"WiimoteGyroRollRight",
"WiimoteGyroYawLeft",
"WiimoteGyroYawRight",
// Rumble
"Rumble",
}};
constexpr std::array<ButtonType, 155> CONFIG_TYPES{{
// GC
BUTTON_A,
BUTTON_B,
BUTTON_START,
BUTTON_X,
BUTTON_Y,
BUTTON_Z,
BUTTON_UP,
BUTTON_DOWN,
BUTTON_LEFT,
BUTTON_RIGHT,
STICK_MAIN_UP,
STICK_MAIN_DOWN,
STICK_MAIN_LEFT,
STICK_MAIN_RIGHT,
STICK_C_UP,
STICK_C_DOWN,
STICK_C_LEFT,
STICK_C_RIGHT,
TRIGGER_L,
TRIGGER_R,
// Wiimote
WIIMOTE_BUTTON_A,
WIIMOTE_BUTTON_B,
WIIMOTE_BUTTON_MINUS,
WIIMOTE_BUTTON_PLUS,
WIIMOTE_BUTTON_HOME,
WIIMOTE_BUTTON_1,
WIIMOTE_BUTTON_2,
WIIMOTE_UP,
WIIMOTE_DOWN,
WIIMOTE_LEFT,
WIIMOTE_RIGHT,
WIIMOTE_IR_UP,
WIIMOTE_IR_DOWN,
WIIMOTE_IR_LEFT,
WIIMOTE_IR_RIGHT,
WIIMOTE_IR_FORWARD,
WIIMOTE_IR_BACKWARD,
WIIMOTE_IR_HIDE,
WIIMOTE_SWING_UP,
WIIMOTE_SWING_DOWN,
WIIMOTE_SWING_LEFT,
WIIMOTE_SWING_RIGHT,
WIIMOTE_SWING_FORWARD,
WIIMOTE_SWING_BACKWARD,
WIIMOTE_TILT_FORWARD,
WIIMOTE_TILT_BACKWARD,
WIIMOTE_TILT_LEFT,
WIIMOTE_TILT_RIGHT,
WIIMOTE_TILT_MODIFIER,
WIIMOTE_SHAKE_X,
WIIMOTE_SHAKE_Y,
WIIMOTE_SHAKE_Z,
// Nunchuk
NUNCHUK_BUTTON_C,
NUNCHUK_BUTTON_Z,
NUNCHUK_STICK_UP,
NUNCHUK_STICK_DOWN,
NUNCHUK_STICK_LEFT,
NUNCHUK_STICK_RIGHT,
NUNCHUK_SWING_UP,
NUNCHUK_SWING_DOWN,
NUNCHUK_SWING_LEFT,
NUNCHUK_SWING_RIGHT,
NUNCHUK_SWING_FORWARD,
NUNCHUK_SWING_BACKWARD,
NUNCHUK_TILT_FORWARD,
NUNCHUK_TILT_BACKWARD,
NUNCHUK_TILT_LEFT,
NUNCHUK_TILT_RIGHT,
NUNCHUK_TILT_MODIFIER,
NUNCHUK_SHAKE_X,
NUNCHUK_SHAKE_Y,
NUNCHUK_SHAKE_Z,
// Classic
CLASSIC_BUTTON_A,
CLASSIC_BUTTON_B,
CLASSIC_BUTTON_X,
CLASSIC_BUTTON_Y,
CLASSIC_BUTTON_MINUS,
CLASSIC_BUTTON_PLUS,
CLASSIC_BUTTON_HOME,
CLASSIC_BUTTON_ZL,
CLASSIC_BUTTON_ZR,
CLASSIC_DPAD_UP,
CLASSIC_DPAD_DOWN,
CLASSIC_DPAD_LEFT,
CLASSIC_DPAD_RIGHT,
CLASSIC_STICK_LEFT_UP,
CLASSIC_STICK_LEFT_DOWN,
CLASSIC_STICK_LEFT_LEFT,
CLASSIC_STICK_LEFT_RIGHT,
CLASSIC_STICK_RIGHT_UP,
CLASSIC_STICK_RIGHT_DOWN,
CLASSIC_STICK_RIGHT_LEFT,
CLASSIC_STICK_RIGHT_RIGHT,
CLASSIC_TRIGGER_L,
CLASSIC_TRIGGER_R,
// Guitar
GUITAR_BUTTON_MINUS,
GUITAR_BUTTON_PLUS,
GUITAR_FRET_GREEN,
GUITAR_FRET_RED,
GUITAR_FRET_YELLOW,
GUITAR_FRET_BLUE,
GUITAR_FRET_ORANGE,
GUITAR_STRUM_UP,
GUITAR_STRUM_DOWN,
GUITAR_STICK_UP,
GUITAR_STICK_DOWN,
GUITAR_STICK_LEFT,
GUITAR_STICK_RIGHT,
GUITAR_WHAMMY_BAR,
// Drums
DRUMS_BUTTON_MINUS,
DRUMS_BUTTON_PLUS,
DRUMS_PAD_RED,
DRUMS_PAD_YELLOW,
DRUMS_PAD_BLUE,
DRUMS_PAD_GREEN,
DRUMS_PAD_ORANGE,
DRUMS_PAD_BASS,
DRUMS_STICK_UP,
DRUMS_STICK_DOWN,
DRUMS_STICK_LEFT,
DRUMS_STICK_RIGHT,
// Turntable
TURNTABLE_BUTTON_GREEN_LEFT,
TURNTABLE_BUTTON_RED_LEFT,
TURNTABLE_BUTTON_BLUE_LEFT,
TURNTABLE_BUTTON_GREEN_RIGHT,
TURNTABLE_BUTTON_RED_RIGHT,
TURNTABLE_BUTTON_BLUE_RIGHT,
TURNTABLE_BUTTON_MINUS,
TURNTABLE_BUTTON_PLUS,
TURNTABLE_BUTTON_HOME,
TURNTABLE_BUTTON_EUPHORIA,
TURNTABLE_TABLE_LEFT_LEFT,
TURNTABLE_TABLE_LEFT_RIGHT,
TURNTABLE_TABLE_RIGHT_LEFT,
TURNTABLE_TABLE_RIGHT_RIGHT,
TURNTABLE_STICK_UP,
TURNTABLE_STICK_DOWN,
TURNTABLE_STICK_LEFT,
TURNTABLE_STICK_RIGHT,
TURNTABLE_EFFECT_DIAL,
TURNTABLE_CROSSFADE_LEFT,
TURNTABLE_CROSSFADE_RIGHT,
// Wiimote IMU
WIIMOTE_ACCEL_LEFT,
WIIMOTE_ACCEL_RIGHT,
WIIMOTE_ACCEL_FORWARD,
WIIMOTE_ACCEL_BACKWARD,
WIIMOTE_ACCEL_UP,
WIIMOTE_ACCEL_DOWN,
WIIMOTE_GYRO_PITCH_UP,
WIIMOTE_GYRO_PITCH_DOWN,
WIIMOTE_GYRO_ROLL_LEFT,
WIIMOTE_GYRO_ROLL_RIGHT,
WIIMOTE_GYRO_YAW_LEFT,
WIIMOTE_GYRO_YAW_RIGHT,
// Rumble
RUMBLE,
}};
std::unordered_map<std::string, InputDevice*> m_controllers;
void AddBind(const std::string& dev, sBind* bind)
{
auto it = m_controllers.find(dev);
if (it != m_controllers.end())
{
it->second->AddBind(bind);
return;
}
m_controllers[dev] = new InputDevice(dev);
m_controllers[dev]->AddBind(bind);
}
} // Anonymous namespace
void Init(const std::string& game_id)
{
// Initialize pad 0(gc 1) and pad 4(wii 1) as touch overlay controller
for (int a = 0; a < 5; a += 4)
{
// GC
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_A, BIND_BUTTON, BUTTON_A, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_B, BIND_BUTTON, BUTTON_B, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_START, BIND_BUTTON, BUTTON_START, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_X, BIND_BUTTON, BUTTON_X, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_Y, BIND_BUTTON, BUTTON_Y, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_Z, BIND_BUTTON, BUTTON_Z, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_UP, BIND_BUTTON, BUTTON_UP, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_DOWN, BIND_BUTTON, BUTTON_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_LEFT, BIND_BUTTON, BUTTON_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, BUTTON_RIGHT, BIND_BUTTON, BUTTON_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_MAIN_UP, BIND_AXIS, STICK_MAIN_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_MAIN_DOWN, BIND_AXIS, STICK_MAIN_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_MAIN_LEFT, BIND_AXIS, STICK_MAIN_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_MAIN_RIGHT, BIND_AXIS, STICK_MAIN_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_C_UP, BIND_AXIS, STICK_C_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_C_DOWN, BIND_AXIS, STICK_C_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_C_LEFT, BIND_AXIS, STICK_C_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, STICK_C_RIGHT, BIND_AXIS, STICK_C_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TRIGGER_L, BIND_AXIS, TRIGGER_L, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TRIGGER_R, BIND_AXIS, TRIGGER_R, 1.0f));
// Wiimote
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_BUTTON_A, BIND_BUTTON, WIIMOTE_BUTTON_A, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_BUTTON_B, BIND_BUTTON, WIIMOTE_BUTTON_B, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_BUTTON_MINUS, BIND_BUTTON, WIIMOTE_BUTTON_MINUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_BUTTON_PLUS, BIND_BUTTON, WIIMOTE_BUTTON_PLUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_BUTTON_HOME, BIND_BUTTON, WIIMOTE_BUTTON_HOME, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_BUTTON_1, BIND_BUTTON, WIIMOTE_BUTTON_1, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_BUTTON_2, BIND_BUTTON, WIIMOTE_BUTTON_2, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_UP, BIND_BUTTON, WIIMOTE_UP, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_DOWN, BIND_BUTTON, WIIMOTE_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_LEFT, BIND_BUTTON, WIIMOTE_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_RIGHT, BIND_BUTTON, WIIMOTE_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_IR_HIDE, BIND_BUTTON, WIIMOTE_IR_HIDE, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_TILT_MODIFIER, BIND_BUTTON, WIIMOTE_TILT_MODIFIER, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_SHAKE_X, BIND_BUTTON, WIIMOTE_SHAKE_X, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_SHAKE_Y, BIND_BUTTON, WIIMOTE_SHAKE_Y, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_SHAKE_Z, BIND_BUTTON, WIIMOTE_SHAKE_Z, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_IR_UP, BIND_AXIS, WIIMOTE_IR_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_IR_DOWN, BIND_AXIS, WIIMOTE_IR_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_IR_LEFT, BIND_AXIS, WIIMOTE_IR_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_IR_RIGHT, BIND_AXIS, WIIMOTE_IR_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_IR_FORWARD, BIND_AXIS, WIIMOTE_IR_FORWARD, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_IR_BACKWARD, BIND_AXIS, WIIMOTE_IR_BACKWARD, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_SWING_UP, BIND_AXIS, WIIMOTE_SWING_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_SWING_DOWN, BIND_AXIS, WIIMOTE_SWING_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_SWING_LEFT, BIND_AXIS, WIIMOTE_SWING_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_SWING_RIGHT, BIND_AXIS, WIIMOTE_SWING_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_SWING_FORWARD, BIND_AXIS, WIIMOTE_SWING_FORWARD, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_SWING_BACKWARD, BIND_AXIS, WIIMOTE_SWING_BACKWARD, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_TILT_FORWARD, BIND_AXIS, WIIMOTE_TILT_FORWARD, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_TILT_BACKWARD, BIND_AXIS, WIIMOTE_TILT_BACKWARD, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_TILT_LEFT, BIND_AXIS, WIIMOTE_TILT_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_TILT_RIGHT, BIND_AXIS, WIIMOTE_TILT_RIGHT, 1.0f));
// Wii: Nunchuk
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_BUTTON_C, BIND_BUTTON, NUNCHUK_BUTTON_C, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_BUTTON_Z, BIND_BUTTON, NUNCHUK_BUTTON_Z, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_TILT_MODIFIER, BIND_BUTTON, NUNCHUK_TILT_MODIFIER, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_SHAKE_X, BIND_BUTTON, NUNCHUK_SHAKE_X, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_SHAKE_Y, BIND_BUTTON, NUNCHUK_SHAKE_Y, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_SHAKE_Z, BIND_BUTTON, NUNCHUK_SHAKE_Z, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_SWING_UP, BIND_AXIS, NUNCHUK_SWING_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_SWING_DOWN, BIND_AXIS, NUNCHUK_SWING_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_SWING_LEFT, BIND_AXIS, NUNCHUK_SWING_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_SWING_RIGHT, BIND_AXIS, NUNCHUK_SWING_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_SWING_FORWARD, BIND_AXIS, NUNCHUK_SWING_FORWARD, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_SWING_BACKWARD, BIND_BUTTON, NUNCHUK_SWING_BACKWARD, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_TILT_FORWARD, BIND_AXIS, NUNCHUK_TILT_FORWARD, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_TILT_BACKWARD, BIND_AXIS, NUNCHUK_TILT_BACKWARD, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_TILT_LEFT, BIND_AXIS, NUNCHUK_TILT_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_TILT_RIGHT, BIND_AXIS, NUNCHUK_TILT_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_STICK_UP, BIND_AXIS, NUNCHUK_STICK_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, NUNCHUK_STICK_DOWN, BIND_AXIS, NUNCHUK_STICK_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_STICK_LEFT, BIND_AXIS, NUNCHUK_STICK_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, NUNCHUK_STICK_RIGHT, BIND_AXIS, NUNCHUK_STICK_RIGHT, 1.0f));
// Wii: Classic
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_BUTTON_A, BIND_BUTTON, CLASSIC_BUTTON_A, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_BUTTON_B, BIND_BUTTON, CLASSIC_BUTTON_B, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_BUTTON_X, BIND_BUTTON, CLASSIC_BUTTON_X, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_BUTTON_Y, BIND_BUTTON, CLASSIC_BUTTON_Y, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_BUTTON_MINUS, BIND_BUTTON, CLASSIC_BUTTON_MINUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_BUTTON_PLUS, BIND_BUTTON, CLASSIC_BUTTON_PLUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_BUTTON_HOME, BIND_BUTTON, CLASSIC_BUTTON_HOME, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_BUTTON_ZL, BIND_BUTTON, CLASSIC_BUTTON_ZL, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_BUTTON_ZR, BIND_BUTTON, CLASSIC_BUTTON_ZR, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_DPAD_UP, BIND_BUTTON, CLASSIC_DPAD_UP, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_DPAD_DOWN, BIND_BUTTON, CLASSIC_DPAD_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_DPAD_LEFT, BIND_BUTTON, CLASSIC_DPAD_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_DPAD_RIGHT, BIND_BUTTON, CLASSIC_DPAD_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_LEFT_UP, BIND_AXIS, CLASSIC_STICK_LEFT_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_LEFT_DOWN, BIND_AXIS, CLASSIC_STICK_LEFT_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_LEFT_LEFT, BIND_AXIS, CLASSIC_STICK_LEFT_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_LEFT_RIGHT, BIND_AXIS, CLASSIC_STICK_LEFT_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_RIGHT_UP, BIND_AXIS, CLASSIC_STICK_RIGHT_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_RIGHT_DOWN, BIND_AXIS, CLASSIC_STICK_RIGHT_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_RIGHT_LEFT, BIND_AXIS, CLASSIC_STICK_RIGHT_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, CLASSIC_STICK_RIGHT_RIGHT, BIND_AXIS, CLASSIC_STICK_RIGHT_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_TRIGGER_L, BIND_AXIS, CLASSIC_TRIGGER_L, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, CLASSIC_TRIGGER_R, BIND_AXIS, CLASSIC_TRIGGER_R, 1.0f));
// Wii: Guitar
AddBind(TOUCHSCREEN_KEY,
new sBind(a, GUITAR_BUTTON_MINUS, BIND_BUTTON, GUITAR_BUTTON_MINUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, GUITAR_BUTTON_PLUS, BIND_BUTTON, GUITAR_BUTTON_PLUS, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_FRET_GREEN, BIND_BUTTON, GUITAR_FRET_GREEN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_FRET_RED, BIND_BUTTON, GUITAR_FRET_RED, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, GUITAR_FRET_YELLOW, BIND_BUTTON, GUITAR_FRET_YELLOW, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_FRET_BLUE, BIND_BUTTON, GUITAR_FRET_BLUE, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, GUITAR_FRET_ORANGE, BIND_BUTTON, GUITAR_FRET_ORANGE, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_STRUM_UP, BIND_BUTTON, GUITAR_STRUM_UP, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_STRUM_DOWN, BIND_BUTTON, GUITAR_STRUM_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_STICK_UP, BIND_AXIS, GUITAR_STICK_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_STICK_DOWN, BIND_AXIS, GUITAR_STICK_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_STICK_LEFT, BIND_AXIS, GUITAR_STICK_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_STICK_RIGHT, BIND_AXIS, GUITAR_STICK_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, GUITAR_WHAMMY_BAR, BIND_AXIS, GUITAR_WHAMMY_BAR, 1.0f));
// Wii: Drums
AddBind(TOUCHSCREEN_KEY,
new sBind(a, DRUMS_BUTTON_MINUS, BIND_BUTTON, DRUMS_BUTTON_MINUS, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_BUTTON_PLUS, BIND_BUTTON, DRUMS_BUTTON_PLUS, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_PAD_RED, BIND_BUTTON, DRUMS_PAD_RED, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_PAD_YELLOW, BIND_BUTTON, DRUMS_PAD_YELLOW, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_PAD_BLUE, BIND_BUTTON, DRUMS_PAD_BLUE, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_PAD_GREEN, BIND_BUTTON, DRUMS_PAD_GREEN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_PAD_ORANGE, BIND_BUTTON, DRUMS_PAD_ORANGE, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_PAD_BASS, BIND_BUTTON, DRUMS_PAD_BASS, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_STICK_UP, BIND_AXIS, DRUMS_STICK_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_STICK_DOWN, BIND_AXIS, DRUMS_STICK_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_STICK_LEFT, BIND_AXIS, DRUMS_STICK_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, DRUMS_STICK_RIGHT, BIND_AXIS, DRUMS_STICK_RIGHT, 1.0f));
// Wii: Turntable
AddBind(TOUCHSCREEN_KEY, new sBind(a, TURNTABLE_BUTTON_GREEN_LEFT, BIND_BUTTON,
TURNTABLE_BUTTON_GREEN_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_BUTTON_RED_LEFT, BIND_BUTTON, TURNTABLE_BUTTON_RED_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TURNTABLE_BUTTON_BLUE_LEFT, BIND_BUTTON,
TURNTABLE_BUTTON_BLUE_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TURNTABLE_BUTTON_GREEN_RIGHT, BIND_BUTTON,
TURNTABLE_BUTTON_GREEN_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TURNTABLE_BUTTON_RED_RIGHT, BIND_BUTTON,
TURNTABLE_BUTTON_RED_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TURNTABLE_BUTTON_BLUE_RIGHT, BIND_BUTTON,
TURNTABLE_BUTTON_BLUE_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_BUTTON_MINUS, BIND_BUTTON, TURNTABLE_BUTTON_MINUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_BUTTON_PLUS, BIND_BUTTON, TURNTABLE_BUTTON_PLUS, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_BUTTON_HOME, BIND_BUTTON, TURNTABLE_BUTTON_HOME, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_BUTTON_EUPHORIA, BIND_BUTTON, TURNTABLE_BUTTON_EUPHORIA, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_TABLE_LEFT_LEFT, BIND_AXIS, TURNTABLE_TABLE_LEFT_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_TABLE_LEFT_RIGHT, BIND_AXIS, TURNTABLE_TABLE_LEFT_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_TABLE_RIGHT_LEFT, BIND_AXIS, TURNTABLE_TABLE_RIGHT_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, TURNTABLE_TABLE_RIGHT_RIGHT, BIND_AXIS,
TURNTABLE_TABLE_RIGHT_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_STICK_UP, BIND_AXIS, TURNTABLE_STICK_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_STICK_DOWN, BIND_AXIS, TURNTABLE_STICK_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_STICK_LEFT, BIND_AXIS, TURNTABLE_STICK_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_STICK_RIGHT, BIND_AXIS, TURNTABLE_STICK_RIGHT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_EFFECT_DIAL, BIND_AXIS, TURNTABLE_EFFECT_DIAL, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_CROSSFADE_LEFT, BIND_AXIS, TURNTABLE_CROSSFADE_LEFT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, TURNTABLE_CROSSFADE_RIGHT, BIND_AXIS, TURNTABLE_CROSSFADE_RIGHT, 1.0f));
// Wiimote IMU
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_ACCEL_LEFT, BIND_AXIS, WIIMOTE_ACCEL_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_ACCEL_RIGHT, BIND_AXIS, WIIMOTE_ACCEL_RIGHT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_ACCEL_FORWARD, BIND_AXIS, WIIMOTE_ACCEL_FORWARD, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_ACCEL_BACKWARD, BIND_AXIS, WIIMOTE_ACCEL_BACKWARD, 1.0f));
AddBind(TOUCHSCREEN_KEY, new sBind(a, WIIMOTE_ACCEL_UP, BIND_AXIS, WIIMOTE_ACCEL_UP, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_ACCEL_DOWN, BIND_AXIS, WIIMOTE_ACCEL_DOWN, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_GYRO_PITCH_UP, BIND_AXIS, WIIMOTE_GYRO_PITCH_UP, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_GYRO_PITCH_DOWN, BIND_AXIS, WIIMOTE_GYRO_PITCH_DOWN, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_GYRO_ROLL_LEFT, BIND_AXIS, WIIMOTE_GYRO_ROLL_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_GYRO_ROLL_RIGHT, BIND_AXIS, WIIMOTE_GYRO_ROLL_RIGHT, -1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_GYRO_YAW_LEFT, BIND_AXIS, WIIMOTE_GYRO_YAW_LEFT, 1.0f));
AddBind(TOUCHSCREEN_KEY,
new sBind(a, WIIMOTE_GYRO_YAW_RIGHT, BIND_AXIS, WIIMOTE_GYRO_YAW_RIGHT, -1.0f));
}
// Init our controller bindings
IniFile ini;
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string("Dolphin.ini"), true);
ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + std::string(game_id + ".ini"), true);
for (u32 a = 0; a < CONFIG_STRINGS.size(); ++a)
{
for (int pad_id = 0; pad_id < 8; ++pad_id)
{
std::ostringstream config;
config << CONFIG_STRINGS[a] << "_" << pad_id;
BindType type;
int bindnum;
char dev[128]{};
bool hasbind = false;
char modifier = '+';
std::string value;
ini.GetOrCreateSection("Android")->Get(config.str(), &value, "None");
if (value == "None")
continue;
if (std::string::npos != value.find("Axis"))
{
hasbind = true;
type = BIND_AXIS;
if (value.starts_with("Device ''"))
sscanf(value.c_str(), "Device ''-Axis %d%c", &bindnum, &modifier);
else
sscanf(value.c_str(), "Device '%127[^\']'-Axis %d%c", dev, &bindnum, &modifier);
}
else if (std::string::npos != value.find("Button"))
{
hasbind = true;
type = BIND_BUTTON;
if (value.starts_with("Device ''"))
sscanf(value.c_str(), "Device ''-Button %d", &bindnum);
else
sscanf(value.c_str(), "Device '%127[^\']'-Button %d", dev, &bindnum);
}
if (hasbind)
AddBind(std::string(dev),
new sBind(pad_id, CONFIG_TYPES[a], type, bindnum, modifier == '-' ? -1.0f : 1.0f));
}
}
}
bool GetButtonPressed(int pad_id, ButtonType button)
{
bool pressed = m_controllers[TOUCHSCREEN_KEY]->ButtonValue(pad_id, button);
for (const auto& ctrl : m_controllers)
pressed |= ctrl.second->ButtonValue(pad_id, button);
return pressed;
}
float GetAxisValue(int pad_id, ButtonType axis)
{
float value = m_controllers[TOUCHSCREEN_KEY]->AxisValue(pad_id, axis);
if (value == 0.0f)
{
for (const auto& ctrl : m_controllers)
{
value = ctrl.second->AxisValue(pad_id, axis);
if (value != 0.0f)
return value;
}
}
return value;
}
bool GamepadEvent(const std::string& dev, int button, int action)
{
auto it = m_controllers.find(dev);
if (it != m_controllers.end())
return it->second->PressEvent(button, action);
return false;
}
void GamepadAxisEvent(const std::string& dev, int axis, float value)
{
auto it = m_controllers.find(dev);
if (it != m_controllers.end())
it->second->AxisEvent(axis, value);
}
void Shutdown()
{
for (const auto& controller : m_controllers)
delete controller.second;
m_controllers.clear();
}
// InputDevice
bool InputDevice::PressEvent(int button, int action)
{
bool handled = false;
for (const auto& binding : m_input_binds)
{
if (binding.second->m_bind == button)
{
if (binding.second->m_bind_type == BIND_BUTTON)
m_buttons[binding.second->m_button_type] = action == BUTTON_PRESSED ? true : false;
else
m_axes[binding.second->m_button_type] = action == BUTTON_PRESSED ? 1.0f : 0.0f;
handled = true;
}
}
return handled;
}
void InputDevice::AxisEvent(int axis, float value)
{
for (const auto& binding : m_input_binds)
{
if (binding.second->m_bind == axis)
{
if (binding.second->m_bind_type == BIND_AXIS)
m_axes[binding.second->m_button_type] = value;
else
m_buttons[binding.second->m_button_type] = value > 0.5f ? true : false;
}
}
}
bool InputDevice::ButtonValue(int pad_id, ButtonType button) const
{
const auto binding = m_input_binds.find(std::make_pair(pad_id, button));
if (binding == m_input_binds.end())
return false;
if (binding->second->m_bind_type == BIND_BUTTON)
{
const auto button = m_buttons.find(binding->second->m_button_type);
if (button == m_buttons.end())
return false;
return button->second;
}
else
{
const auto axis = m_axes.find(binding->second->m_button_type);
if (axis == m_axes.end())
return false;
return (axis->second * binding->second->m_neg) > 0.5f;
}
}
float InputDevice::AxisValue(int pad_id, ButtonType axis) const
{
const auto binding = m_input_binds.find(std::make_pair(pad_id, axis));
if (binding == m_input_binds.end())
return 0.0f;
if (binding->second->m_bind_type == BIND_AXIS)
{
const auto axis = m_axes.find(binding->second->m_button_type);
if (axis == m_axes.end())
return 0.0f;
return axis->second * binding->second->m_neg;
}
else
{
const auto button = m_buttons.find(binding->second->m_button_type);
if (button == m_buttons.end())
return 0.0f;
return button->second == BUTTON_PRESSED ? 1.0f : 0.0f;
}
}
} // namespace ButtonManager

View File

@ -1,279 +0,0 @@
// Copyright 2013 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#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() const { 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() const { 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_axes;
// 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) const;
float AxisValue(int pad_id, ButtonType axis) const;
};
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);
bool GamepadEvent(const std::string& dev, int button, int action);
void GamepadAxisEvent(const std::string& dev, int axis, float value);
void Shutdown();
} // namespace ButtonManager

View File

@ -1,264 +0,0 @@
// Copyright 2013 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "InputCommon/ControllerInterface/Touch/Touchscreen.h"
#include <sstream>
#include <thread>
#ifdef ANDROID
#include <jni/AndroidCommon/IDCache.h>
#endif
#include "InputCommon/ControllerInterface/ControllerInterface.h"
namespace ciface::Touch
{
// Touchscreens and stuff
std::string Touchscreen::GetName() const
{
return "Touchscreen";
}
std::string Touchscreen::GetSource() const
{
return "Android";
}
Touchscreen::Touchscreen(int pad_id, bool accelerometer_enabled, bool gyroscope_enabled)
: m_pad_id(pad_id)
{
// GC
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_A));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_B));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_START));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_X));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_Y));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_Z));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_UP));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_DOWN));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_LEFT));
AddInput(new Button(m_pad_id, ButtonManager::BUTTON_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_MAIN_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_MAIN_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_MAIN_UP));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_MAIN_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_C_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_C_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_C_UP));
AddInput(new Axis(m_pad_id, ButtonManager::STICK_C_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::TRIGGER_L));
AddInput(new Axis(m_pad_id, ButtonManager::TRIGGER_R));
// Wiimote
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_A));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_B));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_MINUS));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_PLUS));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_HOME));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_1));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_BUTTON_2));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_UP));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_DOWN));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_LEFT));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_RIGHT));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_IR_HIDE));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_TILT_MODIFIER));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_SHAKE_X));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_SHAKE_Y));
AddInput(new Button(m_pad_id, ButtonManager::WIIMOTE_SHAKE_Z));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_IR_UP));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_IR_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_IR_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_IR_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_IR_FORWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_IR_BACKWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_SWING_UP));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_SWING_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_SWING_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_SWING_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_SWING_FORWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_SWING_BACKWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_TILT_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_TILT_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_TILT_FORWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_TILT_BACKWARD));
// Wii ext: Nunchuk
AddInput(new Button(m_pad_id, ButtonManager::NUNCHUK_BUTTON_C));
AddInput(new Button(m_pad_id, ButtonManager::NUNCHUK_BUTTON_Z));
AddInput(new Button(m_pad_id, ButtonManager::NUNCHUK_TILT_MODIFIER));
AddInput(new Button(m_pad_id, ButtonManager::NUNCHUK_SHAKE_X));
AddInput(new Button(m_pad_id, ButtonManager::NUNCHUK_SHAKE_Y));
AddInput(new Button(m_pad_id, ButtonManager::NUNCHUK_SHAKE_Z));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_STICK_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_STICK_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_STICK_UP));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_STICK_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_SWING_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_SWING_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_SWING_UP));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_SWING_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_SWING_FORWARD));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_SWING_BACKWARD));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_TILT_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_TILT_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_TILT_FORWARD));
AddInput(new Axis(m_pad_id, ButtonManager::NUNCHUK_TILT_BACKWARD));
// Wii ext: Classic
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_A));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_B));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_X));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_Y));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_MINUS));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_PLUS));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_HOME));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_ZL));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_BUTTON_ZR));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_DPAD_UP));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_DPAD_DOWN));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_DPAD_LEFT));
AddInput(new Button(m_pad_id, ButtonManager::CLASSIC_DPAD_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_LEFT_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_LEFT_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_LEFT_UP));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_LEFT_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_RIGHT_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_RIGHT_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_RIGHT_UP));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_STICK_RIGHT_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_TRIGGER_L));
AddInput(new Axis(m_pad_id, ButtonManager::CLASSIC_TRIGGER_R));
// Wii-ext: Guitar
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_BUTTON_MINUS));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_BUTTON_PLUS));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_FRET_GREEN));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_FRET_RED));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_FRET_YELLOW));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_FRET_BLUE));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_FRET_ORANGE));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_STRUM_UP));
AddInput(new Button(m_pad_id, ButtonManager::GUITAR_STRUM_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::GUITAR_STICK_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::GUITAR_STICK_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::GUITAR_STICK_UP));
AddInput(new Axis(m_pad_id, ButtonManager::GUITAR_STICK_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::GUITAR_WHAMMY_BAR));
// Wii-ext: Drums
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_BUTTON_MINUS));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_BUTTON_PLUS));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_PAD_RED));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_PAD_YELLOW));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_PAD_BLUE));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_PAD_GREEN));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_PAD_ORANGE));
AddInput(new Button(m_pad_id, ButtonManager::DRUMS_PAD_BASS));
AddInput(new Axis(m_pad_id, ButtonManager::DRUMS_STICK_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::DRUMS_STICK_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::DRUMS_STICK_UP));
AddInput(new Axis(m_pad_id, ButtonManager::DRUMS_STICK_DOWN));
// Wii-ext: Turntable
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_GREEN_LEFT));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_RED_LEFT));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_BLUE_LEFT));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_GREEN_RIGHT));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_RED_RIGHT));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_BLUE_RIGHT));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_MINUS));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_PLUS));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_HOME));
AddInput(new Button(m_pad_id, ButtonManager::TURNTABLE_BUTTON_EUPHORIA));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_TABLE_LEFT_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_TABLE_LEFT_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_TABLE_RIGHT_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_TABLE_RIGHT_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_STICK_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_STICK_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_STICK_UP));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_STICK_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_CROSSFADE_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_CROSSFADE_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::TURNTABLE_EFFECT_DIAL));
// Wiimote IMU
// Only add inputs if we actually can receive data from the relevant sensor.
// Whether inputs exist affects what WiimoteEmu gets when calling ControlReference::BoundCount.
if (accelerometer_enabled)
{
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_ACCEL_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_ACCEL_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_ACCEL_FORWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_ACCEL_BACKWARD));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_ACCEL_UP));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_ACCEL_DOWN));
}
if (gyroscope_enabled)
{
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_GYRO_PITCH_UP));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_GYRO_PITCH_DOWN));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_GYRO_ROLL_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_GYRO_ROLL_RIGHT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_GYRO_YAW_LEFT));
AddInput(new Axis(m_pad_id, ButtonManager::WIIMOTE_GYRO_YAW_RIGHT));
}
// Rumble
AddOutput(new Motor(m_pad_id, ButtonManager::RUMBLE));
}
// Buttons and stuff
std::string Touchscreen::Button::GetName() const
{
std::ostringstream ss;
ss << "Button " << static_cast<int>(m_index);
return ss.str();
}
ControlState Touchscreen::Button::GetState() const
{
return ButtonManager::GetButtonPressed(m_pad_id, m_index);
}
std::string Touchscreen::Axis::GetName() const
{
std::ostringstream ss;
ss << "Axis " << static_cast<int>(m_index);
return ss.str();
}
ControlState Touchscreen::Axis::GetState() const
{
return ButtonManager::GetAxisValue(m_pad_id, m_index) * m_neg;
}
Touchscreen::Motor::~Motor()
{
}
std::string Touchscreen::Motor::GetName() const
{
std::ostringstream ss;
ss << "Rumble " << static_cast<int>(m_index);
return ss.str();
}
void Touchscreen::Motor::SetState(ControlState state)
{
if (state > 0)
{
std::thread(Rumble, m_pad_id, state).detach();
}
}
void Touchscreen::Motor::Rumble(int pad_id, double state)
{
#ifdef ANDROID
JNIEnv* env = IDCache::GetEnvForThread();
env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetDoRumble(), pad_id,
state);
#endif
}
} // namespace ciface::Touch

View File

@ -1,64 +0,0 @@
// Copyright 2008 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/ControllerInterface/Touch/ButtonManager.h"
namespace ciface::Touch
{
class Touchscreen : public Core::Device
{
private:
class Button : public Input
{
public:
std::string GetName() const override;
Button(int pad_id, ButtonManager::ButtonType index) : m_pad_id(pad_id), m_index(index) {}
ControlState GetState() const override;
private:
const int m_pad_id;
const ButtonManager::ButtonType m_index;
};
class Axis : public Input
{
public:
std::string GetName() const override;
bool IsDetectable() const override { return false; }
Axis(int pad_id, ButtonManager::ButtonType index, float neg = 1.0f)
: m_pad_id(pad_id), m_index(index), m_neg(neg)
{
}
ControlState GetState() const override;
private:
const int m_pad_id;
const ButtonManager::ButtonType m_index;
const float m_neg;
};
class Motor : public Core::Device::Output
{
public:
Motor(int pad_id, ButtonManager::ButtonType index) : m_pad_id(pad_id), m_index(index) {}
~Motor();
std::string GetName() const override;
void SetState(ControlState state) override;
private:
const int m_pad_id;
const ButtonManager::ButtonType m_index;
static void Rumble(int pad_id, double state);
};
public:
Touchscreen(int pad_id, bool accelerometer_enabled, bool gyroscope_enabled);
~Touchscreen() {}
std::string GetName() const override;
std::string GetSource() const override;
private:
const int m_pad_id;
};
} // namespace ciface::Touch

View File

@ -35,11 +35,6 @@ bool InputConfig::LoadConfig(InputClass type)
std::string profile[MAX_BBMOTES];
std::string path;
#if defined(ANDROID)
bool use_ir_config = false;
std::string ir_values[3];
#endif
m_dynamic_input_tex_config_manager.Load();
if (SConfig::GetInstance().GetGameID() != "00000000")
@ -90,18 +85,6 @@ bool InputConfig::LoadConfig(InputClass type)
}
}
}
#if defined(ANDROID)
// For use on android touchscreen IR pointer
// Check for IR values
if (control_section->Exists("IRTotalYaw") && control_section->Exists("IRTotalPitch") &&
control_section->Exists("IRVerticalOffset"))
{
use_ir_config = true;
control_section->Get("IRTotalYaw", &ir_values[0]);
control_section->Get("IRTotalPitch", &ir_values[1]);
control_section->Get("IRVerticalOffset", &ir_values[2]);
}
#endif
}
if (inifile.Load(File::GetUserPath(D_CONFIG_IDX) + m_ini_name + ".ini") &&
@ -129,15 +112,6 @@ bool InputConfig::LoadConfig(InputClass type)
{
config = *inifile.GetOrCreateSection(controller->GetName());
}
#if defined(ANDROID)
// Only set for wii pads
if (type == InputClass::Wii && use_ir_config)
{
config.Set("IR/Total Yaw", ir_values[0]);
config.Set("IR/Total Pitch", ir_values[1]);
config.Set("IR/Vertical Offset", ir_values[2]);
}
#endif
controller->LoadConfig(&config);
controller->UpdateReferences(g_controller_interface);
controller_names.push_back(controller->GetName());