implement circle pad modifier
This commit is contained in:
parent
a44ffd12b7
commit
7dfaad90b5
8 changed files with 42 additions and 8 deletions
|
@ -49,7 +49,8 @@ static const std::array<int, Settings::NativeInput::NUM_INPUTS> defaults = {
|
|||
SDL_SCANCODE_M, SDL_SCANCODE_N, SDL_SCANCODE_B,
|
||||
SDL_SCANCODE_T, SDL_SCANCODE_G, SDL_SCANCODE_F, SDL_SCANCODE_H,
|
||||
SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT,
|
||||
SDL_SCANCODE_I, SDL_SCANCODE_K, SDL_SCANCODE_J, SDL_SCANCODE_L
|
||||
SDL_SCANCODE_I, SDL_SCANCODE_K, SDL_SCANCODE_J, SDL_SCANCODE_L,
|
||||
SDL_SCANCODE_D
|
||||
};
|
||||
|
||||
void Config::ReadValues() {
|
||||
|
@ -58,6 +59,7 @@ void Config::ReadValues() {
|
|||
Settings::values.input_mappings[Settings::NativeInput::All[i]] =
|
||||
sdl2_config->GetInteger("Controls", Settings::NativeInput::Mapping[i], defaults[i]);
|
||||
}
|
||||
Settings::values.circle_pad_modifier_scale = (float)sdl2_config->GetReal("Controls", "circle_pad_modifier_scale", 0.5);
|
||||
|
||||
// Core
|
||||
Settings::values.frame_skip = sdl2_config->GetInteger("Core", "frame_skip", 0);
|
||||
|
|
|
@ -31,6 +31,11 @@ pad_cup =
|
|||
pad_cdown =
|
||||
pad_cleft =
|
||||
pad_cright =
|
||||
pad_cmodifier =
|
||||
|
||||
# The multiplier to the circle pad radius when modifier is pressed.
|
||||
# Must be in range of 0.0-1.0. Defaults to 0.5
|
||||
circle_pad_modifier_scale =
|
||||
|
||||
[Core]
|
||||
# The applied frameskip amount. Must be a power of two.
|
||||
|
|
|
@ -27,7 +27,8 @@ static const std::array<QVariant, Settings::NativeInput::NUM_INPUTS> defaults =
|
|||
Qt::Key_M, Qt::Key_N, Qt::Key_B,
|
||||
Qt::Key_T, Qt::Key_G, Qt::Key_F, Qt::Key_H,
|
||||
Qt::Key_Up, Qt::Key_Down, Qt::Key_Left, Qt::Key_Right,
|
||||
Qt::Key_I, Qt::Key_K, Qt::Key_J, Qt::Key_L
|
||||
Qt::Key_I, Qt::Key_K, Qt::Key_J, Qt::Key_L,
|
||||
Qt::Key_D
|
||||
};
|
||||
|
||||
void Config::ReadValues() {
|
||||
|
@ -36,6 +37,7 @@ void Config::ReadValues() {
|
|||
Settings::values.input_mappings[Settings::NativeInput::All[i]] =
|
||||
qt_config->value(QString::fromStdString(Settings::NativeInput::Mapping[i]), defaults[i]).toInt();
|
||||
}
|
||||
Settings::values.circle_pad_modifier_scale = qt_config->value("circle_pad_modifier_scale", 0.5).toFloat();
|
||||
qt_config->endGroup();
|
||||
|
||||
qt_config->beginGroup("Core");
|
||||
|
@ -125,6 +127,7 @@ void Config::SaveValues() {
|
|||
qt_config->setValue(QString::fromStdString(Settings::NativeInput::Mapping[i]),
|
||||
Settings::values.input_mappings[Settings::NativeInput::All[i]]);
|
||||
}
|
||||
qt_config->setValue("circle_pad_modifier_scale", (double)Settings::values.circle_pad_modifier_scale);
|
||||
qt_config->endGroup();
|
||||
|
||||
qt_config->beginGroup("Core");
|
||||
|
|
|
@ -12,12 +12,22 @@
|
|||
#include "video_core/video_core.h"
|
||||
|
||||
void EmuWindow::KeyPressed(KeyMap::HostDeviceKey key) {
|
||||
auto hex = KeyMap::GetPadKey(key).hex;
|
||||
if (hex == Service::HID::PAD_C_MODIFIER.hex) {
|
||||
circle_pad_modifier = true;
|
||||
} else {
|
||||
pad_state.hex |= KeyMap::GetPadKey(key).hex;
|
||||
}
|
||||
}
|
||||
|
||||
void EmuWindow::KeyReleased(KeyMap::HostDeviceKey key) {
|
||||
auto hex = KeyMap::GetPadKey(key).hex;
|
||||
if (hex == Service::HID::PAD_C_MODIFIER.hex) {
|
||||
circle_pad_modifier = false;
|
||||
} else {
|
||||
pad_state.hex &= ~KeyMap::GetPadKey(key).hex;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout
|
||||
|
|
|
@ -138,7 +138,11 @@ public:
|
|||
y *= SQRT_HALF;
|
||||
if (y != 0)
|
||||
x *= SQRT_HALF;
|
||||
return std::make_tuple<s16, s16>(x, y);
|
||||
if (circle_pad_modifier) {
|
||||
x *= Settings::values.circle_pad_modifier_scale;
|
||||
y *= Settings::values.circle_pad_modifier_scale;
|
||||
}
|
||||
return std::make_tuple(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -233,6 +237,7 @@ protected:
|
|||
touch_x = 0;
|
||||
touch_y = 0;
|
||||
touch_pressed = false;
|
||||
circle_pad_modifier = false;
|
||||
}
|
||||
virtual ~EmuWindow() {}
|
||||
|
||||
|
@ -298,4 +303,6 @@ private:
|
|||
std::tuple<unsigned,unsigned> ClipToTouchScreen(unsigned new_x, unsigned new_y);
|
||||
|
||||
Service::HID::PadState pad_state;
|
||||
|
||||
bool circle_pad_modifier; ///< True if circle pad modifier is currently pressed, otherwise false
|
||||
};
|
||||
|
|
|
@ -43,7 +43,8 @@ const std::array<Service::HID::PadState, Settings::NativeInput::NUM_INPUTS> pad_
|
|||
Service::HID::PAD_START, Service::HID::PAD_SELECT, Service::HID::PAD_NONE,
|
||||
Service::HID::PAD_UP, Service::HID::PAD_DOWN, Service::HID::PAD_LEFT, Service::HID::PAD_RIGHT,
|
||||
Service::HID::PAD_CIRCLE_UP, Service::HID::PAD_CIRCLE_DOWN, Service::HID::PAD_CIRCLE_LEFT, Service::HID::PAD_CIRCLE_RIGHT,
|
||||
Service::HID::PAD_C_UP, Service::HID::PAD_C_DOWN, Service::HID::PAD_C_LEFT, Service::HID::PAD_C_RIGHT
|
||||
Service::HID::PAD_C_UP, Service::HID::PAD_C_DOWN, Service::HID::PAD_C_LEFT, Service::HID::PAD_C_RIGHT,
|
||||
Service::HID::PAD_C_MODIFIER , // place holder for circle pad modifier
|
||||
}};
|
||||
|
||||
void Update() {
|
||||
|
|
|
@ -215,6 +215,8 @@ const PadState PAD_CIRCLE_LEFT = {{1u << 29}};
|
|||
const PadState PAD_CIRCLE_UP = {{1u << 30}};
|
||||
const PadState PAD_CIRCLE_DOWN = {{1u << 31}};
|
||||
|
||||
const PadState PAD_C_MODIFIER = {{1u << 23}}; // An intermediate value only used by citra
|
||||
|
||||
|
||||
extern const std::array<Service::HID::PadState, Settings::NativeInput::NUM_INPUTS> pad_mapping;
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ enum Values {
|
|||
DUP, DDOWN, DLEFT, DRIGHT,
|
||||
SUP, SDOWN, SLEFT, SRIGHT,
|
||||
CUP, CDOWN, CLEFT, CRIGHT,
|
||||
CMODIFIER,
|
||||
NUM_INPUTS
|
||||
};
|
||||
static const std::array<const char*, NUM_INPUTS> Mapping = {{
|
||||
|
@ -27,7 +28,8 @@ static const std::array<const char*, NUM_INPUTS> Mapping = {{
|
|||
"pad_start", "pad_select", "pad_home",
|
||||
"pad_dup", "pad_ddown", "pad_dleft", "pad_dright",
|
||||
"pad_sup", "pad_sdown", "pad_sleft", "pad_sright",
|
||||
"pad_cup", "pad_cdown", "pad_cleft", "pad_cright"
|
||||
"pad_cup", "pad_cdown", "pad_cleft", "pad_cright",
|
||||
"pad_cmodifier"
|
||||
}};
|
||||
static const std::array<Values, NUM_INPUTS> All = {{
|
||||
A, B, X, Y,
|
||||
|
@ -35,7 +37,8 @@ static const std::array<Values, NUM_INPUTS> All = {{
|
|||
START, SELECT, HOME,
|
||||
DUP, DDOWN, DLEFT, DRIGHT,
|
||||
SUP, SDOWN, SLEFT, SRIGHT,
|
||||
CUP, CDOWN, CLEFT, CRIGHT
|
||||
CUP, CDOWN, CLEFT, CRIGHT,
|
||||
CMODIFIER
|
||||
}};
|
||||
}
|
||||
|
||||
|
@ -43,6 +46,7 @@ static const std::array<Values, NUM_INPUTS> All = {{
|
|||
struct Values {
|
||||
// Controls
|
||||
std::array<int, NativeInput::NUM_INPUTS> input_mappings;
|
||||
float circle_pad_modifier_scale;
|
||||
|
||||
// Core
|
||||
int frame_skip;
|
||||
|
|
Loading…
Reference in a new issue