yuzu/config: Add (de-)serialization for multiplayer
Defaults to full keyboard for keyboard -- It did not seem to be necessary to make the keyboard configurable (besides enabled/disabled).
This commit is contained in:
parent
b8f7f9651e
commit
d1b7c65b9e
|
@ -47,39 +47,283 @@ const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> Config:
|
|||
},
|
||||
}};
|
||||
|
||||
const std::array<int, Settings::NativeMouseButton::NumMouseButtons> Config::default_mouse_buttons =
|
||||
{
|
||||
Qt::Key_BracketLeft, Qt::Key_BracketRight, Qt::Key_Apostrophe, Qt::Key_Minus, Qt::Key_Equal,
|
||||
};
|
||||
|
||||
const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> Config::default_keyboard_keys = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
Qt::Key_A,
|
||||
Qt::Key_B,
|
||||
Qt::Key_C,
|
||||
Qt::Key_D,
|
||||
Qt::Key_E,
|
||||
Qt::Key_F,
|
||||
Qt::Key_G,
|
||||
Qt::Key_H,
|
||||
Qt::Key_I,
|
||||
Qt::Key_J,
|
||||
Qt::Key_K,
|
||||
Qt::Key_L,
|
||||
Qt::Key_M,
|
||||
Qt::Key_N,
|
||||
Qt::Key_O,
|
||||
Qt::Key_P,
|
||||
Qt::Key_Q,
|
||||
Qt::Key_R,
|
||||
Qt::Key_S,
|
||||
Qt::Key_T,
|
||||
Qt::Key_U,
|
||||
Qt::Key_V,
|
||||
Qt::Key_W,
|
||||
Qt::Key_X,
|
||||
Qt::Key_Y,
|
||||
Qt::Key_Z,
|
||||
Qt::Key_1,
|
||||
Qt::Key_2,
|
||||
Qt::Key_3,
|
||||
Qt::Key_4,
|
||||
Qt::Key_5,
|
||||
Qt::Key_6,
|
||||
Qt::Key_7,
|
||||
Qt::Key_8,
|
||||
Qt::Key_9,
|
||||
Qt::Key_0,
|
||||
Qt::Key_Enter,
|
||||
Qt::Key_Escape,
|
||||
Qt::Key_Backspace,
|
||||
Qt::Key_Tab,
|
||||
Qt::Key_Space,
|
||||
Qt::Key_Minus,
|
||||
Qt::Key_Equal,
|
||||
Qt::Key_BracketLeft,
|
||||
Qt::Key_BracketRight,
|
||||
Qt::Key_Backslash,
|
||||
Qt::Key_Dead_Tilde,
|
||||
Qt::Key_Semicolon,
|
||||
Qt::Key_Apostrophe,
|
||||
Qt::Key_Dead_Grave,
|
||||
Qt::Key_Comma,
|
||||
Qt::Key_Period,
|
||||
Qt::Key_Slash,
|
||||
Qt::Key_CapsLock,
|
||||
|
||||
Qt::Key_F1,
|
||||
Qt::Key_F2,
|
||||
Qt::Key_F3,
|
||||
Qt::Key_F4,
|
||||
Qt::Key_F5,
|
||||
Qt::Key_F6,
|
||||
Qt::Key_F7,
|
||||
Qt::Key_F8,
|
||||
Qt::Key_F9,
|
||||
Qt::Key_F10,
|
||||
Qt::Key_F11,
|
||||
Qt::Key_F12,
|
||||
|
||||
Qt::Key_SysReq,
|
||||
Qt::Key_ScrollLock,
|
||||
Qt::Key_Pause,
|
||||
Qt::Key_Insert,
|
||||
Qt::Key_Home,
|
||||
Qt::Key_PageUp,
|
||||
Qt::Key_Delete,
|
||||
Qt::Key_End,
|
||||
Qt::Key_PageDown,
|
||||
Qt::Key_Right,
|
||||
Qt::Key_Left,
|
||||
Qt::Key_Down,
|
||||
Qt::Key_Up,
|
||||
|
||||
Qt::Key_NumLock,
|
||||
Qt::Key_Slash,
|
||||
Qt::Key_Asterisk,
|
||||
Qt::Key_Minus,
|
||||
Qt::Key_Plus,
|
||||
Qt::Key_Enter,
|
||||
Qt::Key_1,
|
||||
Qt::Key_2,
|
||||
Qt::Key_3,
|
||||
Qt::Key_4,
|
||||
Qt::Key_5,
|
||||
Qt::Key_6,
|
||||
Qt::Key_7,
|
||||
Qt::Key_8,
|
||||
Qt::Key_9,
|
||||
Qt::Key_0,
|
||||
Qt::Key_Period,
|
||||
|
||||
0,
|
||||
0,
|
||||
Qt::Key_PowerOff,
|
||||
Qt::Key_Equal,
|
||||
|
||||
Qt::Key_F13,
|
||||
Qt::Key_F14,
|
||||
Qt::Key_F15,
|
||||
Qt::Key_F16,
|
||||
Qt::Key_F17,
|
||||
Qt::Key_F18,
|
||||
Qt::Key_F19,
|
||||
Qt::Key_F20,
|
||||
Qt::Key_F21,
|
||||
Qt::Key_F22,
|
||||
Qt::Key_F23,
|
||||
Qt::Key_F24,
|
||||
|
||||
Qt::Key_Open,
|
||||
Qt::Key_Help,
|
||||
Qt::Key_Menu,
|
||||
0,
|
||||
Qt::Key_Stop,
|
||||
Qt::Key_AudioRepeat,
|
||||
Qt::Key_Undo,
|
||||
Qt::Key_Cut,
|
||||
Qt::Key_Copy,
|
||||
Qt::Key_Paste,
|
||||
Qt::Key_Find,
|
||||
Qt::Key_VolumeMute,
|
||||
Qt::Key_VolumeUp,
|
||||
Qt::Key_VolumeDown,
|
||||
Qt::Key_CapsLock,
|
||||
Qt::Key_NumLock,
|
||||
Qt::Key_ScrollLock,
|
||||
Qt::Key_Comma,
|
||||
|
||||
Qt::Key_ParenLeft,
|
||||
Qt::Key_ParenRight,
|
||||
};
|
||||
|
||||
const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> Config::default_keyboard_mods = {
|
||||
Qt::Key_Control, Qt::Key_Shift, Qt::Key_Alt, Qt::Key_ApplicationLeft,
|
||||
Qt::Key_Control, Qt::Key_Shift, Qt::Key_AltGr, Qt::Key_ApplicationRight,
|
||||
};
|
||||
|
||||
void Config::ReadValues() {
|
||||
qt_config->beginGroup("Controls");
|
||||
for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) {
|
||||
std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]);
|
||||
Settings::values.buttons[i] =
|
||||
for (std::size_t p = 0; p < 10; ++p) {
|
||||
Settings::values.players[p].connected =
|
||||
qt_config->value(QString("player_%1_connected").arg(p), false).toBool();
|
||||
|
||||
Settings::values.players[p].type = static_cast<Settings::ControllerType>(
|
||||
qt_config
|
||||
->value(Settings::NativeButton::mapping[i], QString::fromStdString(default_param))
|
||||
->value(QString("player_%1_type").arg(p),
|
||||
static_cast<u8>(Settings::ControllerType::DualJoycon))
|
||||
.toUInt());
|
||||
|
||||
Settings::values.players[p].body_color_left =
|
||||
qt_config
|
||||
->value(QString("player_%1_body_color_left").arg(p),
|
||||
Settings::JOYCON_BODY_NEON_BLUE)
|
||||
.toUInt();
|
||||
Settings::values.players[p].body_color_right =
|
||||
qt_config
|
||||
->value(QString("player_%1_body_color_right").arg(p),
|
||||
Settings::JOYCON_BODY_NEON_RED)
|
||||
.toUInt();
|
||||
Settings::values.players[p].button_color_left =
|
||||
qt_config
|
||||
->value(QString("player_%1_button_color_left").arg(p),
|
||||
Settings::JOYCON_BUTTONS_NEON_BLUE)
|
||||
.toUInt();
|
||||
Settings::values.players[p].button_color_right =
|
||||
qt_config
|
||||
->value(QString("player_%1_button_color_right").arg(p),
|
||||
Settings::JOYCON_BUTTONS_NEON_RED)
|
||||
.toUInt();
|
||||
|
||||
for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) {
|
||||
std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]);
|
||||
Settings::values.players[p].buttons[i] =
|
||||
qt_config
|
||||
->value(QString("player_%1_").arg(p) + Settings::NativeButton::mapping[i],
|
||||
QString::fromStdString(default_param))
|
||||
.toString()
|
||||
.toStdString();
|
||||
if (Settings::values.players[p].buttons[i].empty())
|
||||
Settings::values.players[p].buttons[i] = default_param;
|
||||
}
|
||||
|
||||
for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) {
|
||||
std::string default_param = InputCommon::GenerateAnalogParamFromKeys(
|
||||
default_analogs[i][0], default_analogs[i][1], default_analogs[i][2],
|
||||
default_analogs[i][3], default_analogs[i][4], 0.5f);
|
||||
Settings::values.players[p].analogs[i] =
|
||||
qt_config
|
||||
->value(QString("player_%1_").arg(p) + Settings::NativeAnalog::mapping[i],
|
||||
QString::fromStdString(default_param))
|
||||
.toString()
|
||||
.toStdString();
|
||||
if (Settings::values.players[p].analogs[i].empty())
|
||||
Settings::values.players[p].analogs[i] = default_param;
|
||||
}
|
||||
}
|
||||
|
||||
std::stable_partition(Settings::values.players.begin(), Settings::values.players.end(),
|
||||
[](const auto& player) { return player.connected; });
|
||||
|
||||
Settings::values.motion_device =
|
||||
qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01")
|
||||
.toString()
|
||||
.toStdString();
|
||||
|
||||
Settings::values.mouse_enabled = qt_config->value("mouse_enabled", false).toBool();
|
||||
|
||||
for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) {
|
||||
std::string default_param = InputCommon::GenerateKeyboardParam(default_mouse_buttons[i]);
|
||||
Settings::values.mouse_buttons[i] =
|
||||
qt_config
|
||||
->value(QString("mouse_") + Settings::NativeMouseButton::mapping[i],
|
||||
QString::fromStdString(default_param))
|
||||
.toString()
|
||||
.toStdString();
|
||||
if (Settings::values.buttons[i].empty())
|
||||
Settings::values.buttons[i] = default_param;
|
||||
if (Settings::values.mouse_buttons[i].empty())
|
||||
Settings::values.mouse_buttons[i] = default_param;
|
||||
}
|
||||
|
||||
Settings::values.keyboard_enabled = qt_config->value("keyboard_enabled", false).toBool();
|
||||
|
||||
Settings::values.debug_pad_enabled = qt_config->value("debug_pad_enabled", false).toBool();
|
||||
for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) {
|
||||
std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]);
|
||||
Settings::values.debug_pad_buttons[i] =
|
||||
qt_config
|
||||
->value(QString("debug_pad_") + Settings::NativeButton::mapping[i],
|
||||
QString::fromStdString(default_param))
|
||||
.toString()
|
||||
.toStdString();
|
||||
if (Settings::values.debug_pad_buttons[i].empty())
|
||||
Settings::values.debug_pad_buttons[i] = default_param;
|
||||
}
|
||||
|
||||
for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) {
|
||||
std::string default_param = InputCommon::GenerateAnalogParamFromKeys(
|
||||
default_analogs[i][0], default_analogs[i][1], default_analogs[i][2],
|
||||
default_analogs[i][3], default_analogs[i][4], 0.5f);
|
||||
Settings::values.analogs[i] =
|
||||
Settings::values.debug_pad_analogs[i] =
|
||||
qt_config
|
||||
->value(Settings::NativeAnalog::mapping[i], QString::fromStdString(default_param))
|
||||
->value(QString("debug_pad_") + Settings::NativeAnalog::mapping[i],
|
||||
QString::fromStdString(default_param))
|
||||
.toString()
|
||||
.toStdString();
|
||||
if (Settings::values.analogs[i].empty())
|
||||
Settings::values.analogs[i] = default_param;
|
||||
if (Settings::values.debug_pad_analogs[i].empty())
|
||||
Settings::values.debug_pad_analogs[i] = default_param;
|
||||
}
|
||||
|
||||
Settings::values.motion_device =
|
||||
qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01")
|
||||
.toString()
|
||||
.toStdString();
|
||||
Settings::values.touch_device =
|
||||
qt_config->value("touch_device", "engine:emu_window").toString().toStdString();
|
||||
Settings::values.touchscreen.enabled = qt_config->value("touchscreen_enabled", true).toBool();
|
||||
Settings::values.touchscreen.device =
|
||||
qt_config->value("touchscreen_device", "engine:emu_window").toString().toStdString();
|
||||
|
||||
Settings::values.touchscreen.finger = qt_config->value("touchscreen_finger", 0).toUInt();
|
||||
Settings::values.touchscreen.rotation_angle = qt_config->value("touchscreen_angle", 0).toUInt();
|
||||
Settings::values.touchscreen.diameter_x =
|
||||
qt_config->value("touchscreen_diameter_x", 15).toUInt();
|
||||
Settings::values.touchscreen.diameter_y =
|
||||
qt_config->value("touchscreen_diameter_y", 15).toUInt();
|
||||
qt_config->endGroup();
|
||||
|
||||
qt_config->beginGroup("Core");
|
||||
|
@ -126,6 +370,20 @@ void Config::ReadValues() {
|
|||
.toStdString());
|
||||
qt_config->endGroup();
|
||||
|
||||
std::transform(default_keyboard_keys.begin(), default_keyboard_keys.end(),
|
||||
Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam);
|
||||
std::transform(default_keyboard_mods.begin(), default_keyboard_mods.end(),
|
||||
Settings::values.keyboard_keys.begin() +
|
||||
Settings::NativeKeyboard::LeftControlKey,
|
||||
InputCommon::GenerateKeyboardParam);
|
||||
std::transform(default_keyboard_mods.begin(), default_keyboard_mods.end(),
|
||||
Settings::values.keyboard_mods.begin(), InputCommon::GenerateKeyboardParam);
|
||||
|
||||
qt_config->beginGroup("Core");
|
||||
Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool();
|
||||
Settings::values.use_multi_core = qt_config->value("use_multi_core", false).toBool();
|
||||
qt_config->endGroup();
|
||||
|
||||
qt_config->beginGroup("System");
|
||||
Settings::values.use_docked_mode = qt_config->value("use_docked_mode", false).toBool();
|
||||
Settings::values.enable_nfc = qt_config->value("enable_nfc", true).toBool();
|
||||
|
@ -232,16 +490,65 @@ void Config::ReadValues() {
|
|||
|
||||
void Config::SaveValues() {
|
||||
qt_config->beginGroup("Controls");
|
||||
for (int p = 0; p < 10; ++p) {
|
||||
qt_config->setValue(QString("player_%1_connected").arg(p),
|
||||
Settings::values.players[p].connected);
|
||||
qt_config->setValue(QString("player_%1_type").arg(p),
|
||||
static_cast<u8>(Settings::values.players[p].type));
|
||||
|
||||
qt_config->setValue(QString("player_%1_body_color_left").arg(p),
|
||||
Settings::values.players[p].body_color_left);
|
||||
qt_config->setValue(QString("player_%1_body_color_right").arg(p),
|
||||
Settings::values.players[p].body_color_right);
|
||||
qt_config->setValue(QString("player_%1_button_color_left").arg(p),
|
||||
Settings::values.players[p].button_color_left);
|
||||
qt_config->setValue(QString("player_%1_button_color_right").arg(p),
|
||||
Settings::values.players[p].button_color_right);
|
||||
|
||||
for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) {
|
||||
qt_config->setValue(QString("player_%1_").arg(p) +
|
||||
QString::fromStdString(Settings::NativeButton::mapping[i]),
|
||||
QString::fromStdString(Settings::values.players[p].buttons[i]));
|
||||
}
|
||||
for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) {
|
||||
qt_config->setValue(QString("player_%1_").arg(p) +
|
||||
QString::fromStdString(Settings::NativeAnalog::mapping[i]),
|
||||
QString::fromStdString(Settings::values.players[p].analogs[i]));
|
||||
}
|
||||
}
|
||||
|
||||
qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device));
|
||||
|
||||
qt_config->setValue("mouse_enabled", Settings::values.mouse_enabled);
|
||||
|
||||
for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) {
|
||||
qt_config->setValue(QString("mouse_") +
|
||||
QString::fromStdString(Settings::NativeMouseButton::mapping[i]),
|
||||
QString::fromStdString(Settings::values.mouse_buttons[i]));
|
||||
}
|
||||
|
||||
qt_config->setValue("keyboard_enabled", Settings::values.keyboard_enabled);
|
||||
|
||||
qt_config->setValue("debug_pad_enabled", Settings::values.debug_pad_enabled);
|
||||
for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) {
|
||||
qt_config->setValue(QString::fromStdString(Settings::NativeButton::mapping[i]),
|
||||
QString::fromStdString(Settings::values.buttons[i]));
|
||||
qt_config->setValue(QString("debug_pad_") +
|
||||
QString::fromStdString(Settings::NativeButton::mapping[i]),
|
||||
QString::fromStdString(Settings::values.debug_pad_buttons[i]));
|
||||
}
|
||||
for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) {
|
||||
qt_config->setValue(QString::fromStdString(Settings::NativeAnalog::mapping[i]),
|
||||
QString::fromStdString(Settings::values.analogs[i]));
|
||||
qt_config->setValue(QString("debug_pad_") +
|
||||
QString::fromStdString(Settings::NativeAnalog::mapping[i]),
|
||||
QString::fromStdString(Settings::values.debug_pad_analogs[i]));
|
||||
}
|
||||
qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device));
|
||||
qt_config->setValue("touch_device", QString::fromStdString(Settings::values.touch_device));
|
||||
|
||||
qt_config->setValue("touchscreen_enabled", Settings::values.touchscreen.enabled);
|
||||
qt_config->setValue("touchscreen_device",
|
||||
QString::fromStdString(Settings::values.touchscreen.device));
|
||||
|
||||
qt_config->setValue("touchscreen_finger", Settings::values.touchscreen.finger);
|
||||
qt_config->setValue("touchscreen_angle", Settings::values.touchscreen.rotation_angle);
|
||||
qt_config->setValue("touchscreen_diameter_x", Settings::values.touchscreen.diameter_x);
|
||||
qt_config->setValue("touchscreen_diameter_y", Settings::values.touchscreen.diameter_y);
|
||||
qt_config->endGroup();
|
||||
|
||||
qt_config->beginGroup("Core");
|
||||
|
@ -280,7 +587,6 @@ void Config::SaveValues() {
|
|||
qt_config->setValue("use_docked_mode", Settings::values.use_docked_mode);
|
||||
qt_config->setValue("enable_nfc", Settings::values.enable_nfc);
|
||||
qt_config->setValue("current_user", Settings::values.current_user);
|
||||
|
||||
qt_config->setValue("language_index", Settings::values.language_index);
|
||||
|
||||
qt_config->setValue("rng_seed_enabled", Settings::values.rng_seed.has_value());
|
||||
|
|
|
@ -22,6 +22,10 @@ public:
|
|||
|
||||
static const std::array<int, Settings::NativeButton::NumButtons> default_buttons;
|
||||
static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs;
|
||||
static const std::array<int, Settings::NativeMouseButton::NumMouseButtons>
|
||||
default_mouse_buttons;
|
||||
static const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> default_keyboard_keys;
|
||||
static const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> default_keyboard_mods;
|
||||
|
||||
private:
|
||||
void ReadValues();
|
||||
|
|
Reference in New Issue