diff options
Diffstat (limited to 'src/yuzu_cmd/config.cpp')
| -rw-r--r-- | src/yuzu_cmd/config.cpp | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 8e9c7d211..131bc2201 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <memory> | 5 | #include <memory> |
| 6 | #include <optional> | ||
| 6 | #include <sstream> | 7 | #include <sstream> |
| 7 | 8 | ||
| 8 | // Ignore -Wimplicit-fallthrough due to https://github.com/libsdl-org/SDL/issues/4307 | 9 | // Ignore -Wimplicit-fallthrough due to https://github.com/libsdl-org/SDL/issues/4307 |
| @@ -29,11 +30,12 @@ | |||
| 29 | 30 | ||
| 30 | namespace FS = Common::FS; | 31 | namespace FS = Common::FS; |
| 31 | 32 | ||
| 32 | Config::Config() { | 33 | const std::filesystem::path default_config_path = |
| 33 | // TODO: Don't hardcode the path; let the frontend decide where to put the config files. | 34 | FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "sdl2-config.ini"; |
| 34 | sdl2_config_loc = FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "sdl2-config.ini"; | ||
| 35 | sdl2_config = std::make_unique<INIReader>(FS::PathToUTF8String(sdl2_config_loc)); | ||
| 36 | 35 | ||
| 36 | Config::Config(std::optional<std::filesystem::path> config_path) | ||
| 37 | : sdl2_config_loc{config_path.value_or(default_config_path)}, | ||
| 38 | sdl2_config{std::make_unique<INIReader>(FS::PathToUTF8String(sdl2_config_loc))} { | ||
| 37 | Reload(); | 39 | Reload(); |
| 38 | } | 40 | } |
| 39 | 41 | ||
| @@ -66,6 +68,11 @@ static const std::array<int, Settings::NativeButton::NumButtons> default_buttons | |||
| 66 | SDL_SCANCODE_M, SDL_SCANCODE_N, SDL_SCANCODE_1, SDL_SCANCODE_2, SDL_SCANCODE_B, | 68 | SDL_SCANCODE_M, SDL_SCANCODE_N, SDL_SCANCODE_1, SDL_SCANCODE_2, SDL_SCANCODE_B, |
| 67 | }; | 69 | }; |
| 68 | 70 | ||
| 71 | static const std::array<int, Settings::NativeMotion::NumMotions> default_motions = { | ||
| 72 | SDL_SCANCODE_7, | ||
| 73 | SDL_SCANCODE_8, | ||
| 74 | }; | ||
| 75 | |||
| 69 | static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs{{ | 76 | static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs{{ |
| 70 | { | 77 | { |
| 71 | SDL_SCANCODE_UP, | 78 | SDL_SCANCODE_UP, |
| @@ -102,27 +109,42 @@ void Config::ReadSetting(const std::string& group, Settings::BasicSetting<Type>& | |||
| 102 | void Config::ReadValues() { | 109 | void Config::ReadValues() { |
| 103 | // Controls | 110 | // Controls |
| 104 | for (std::size_t p = 0; p < Settings::values.players.GetValue().size(); ++p) { | 111 | for (std::size_t p = 0; p < Settings::values.players.GetValue().size(); ++p) { |
| 112 | auto& player = Settings::values.players.GetValue()[p]; | ||
| 113 | |||
| 105 | const auto group = fmt::format("ControlsP{}", p); | 114 | const auto group = fmt::format("ControlsP{}", p); |
| 106 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { | 115 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { |
| 107 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); | 116 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); |
| 108 | Settings::values.players.GetValue()[p].buttons[i] = | 117 | player.buttons[i] = |
| 109 | sdl2_config->Get(group, Settings::NativeButton::mapping[i], default_param); | 118 | sdl2_config->Get(group, Settings::NativeButton::mapping[i], default_param); |
| 110 | if (Settings::values.players.GetValue()[p].buttons[i].empty()) | 119 | if (player.buttons[i].empty()) { |
| 111 | Settings::values.players.GetValue()[p].buttons[i] = default_param; | 120 | player.buttons[i] = default_param; |
| 121 | } | ||
| 112 | } | 122 | } |
| 113 | 123 | ||
| 114 | for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) { | 124 | for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) { |
| 115 | std::string default_param = InputCommon::GenerateAnalogParamFromKeys( | 125 | std::string default_param = InputCommon::GenerateAnalogParamFromKeys( |
| 116 | default_analogs[i][0], default_analogs[i][1], default_analogs[i][2], | 126 | default_analogs[i][0], default_analogs[i][1], default_analogs[i][2], |
| 117 | default_analogs[i][3], default_analogs[i][4], 0.5f); | 127 | default_analogs[i][3], default_analogs[i][4], 0.5f); |
| 118 | Settings::values.players.GetValue()[p].analogs[i] = | 128 | player.analogs[i] = |
| 119 | sdl2_config->Get(group, Settings::NativeAnalog::mapping[i], default_param); | 129 | sdl2_config->Get(group, Settings::NativeAnalog::mapping[i], default_param); |
| 120 | if (Settings::values.players.GetValue()[p].analogs[i].empty()) | 130 | if (player.analogs[i].empty()) { |
| 121 | Settings::values.players.GetValue()[p].analogs[i] = default_param; | 131 | player.analogs[i] = default_param; |
| 132 | } | ||
| 133 | } | ||
| 134 | |||
| 135 | for (int i = 0; i < Settings::NativeMotion::NumMotions; ++i) { | ||
| 136 | const std::string default_param = | ||
| 137 | InputCommon::GenerateKeyboardParam(default_motions[i]); | ||
| 138 | auto& player_motions = player.motions[i]; | ||
| 139 | |||
| 140 | player_motions = | ||
| 141 | sdl2_config->Get(group, Settings::NativeMotion::mapping[i], default_param); | ||
| 142 | if (player_motions.empty()) { | ||
| 143 | player_motions = default_param; | ||
| 144 | } | ||
| 122 | } | 145 | } |
| 123 | 146 | ||
| 124 | Settings::values.players.GetValue()[p].connected = | 147 | player.connected = sdl2_config->GetBoolean(group, "connected", false); |
| 125 | sdl2_config->GetBoolean(group, "connected", false); | ||
| 126 | } | 148 | } |
| 127 | 149 | ||
| 128 | ReadSetting("ControlsGeneral", Settings::values.mouse_enabled); | 150 | ReadSetting("ControlsGeneral", Settings::values.mouse_enabled); |
| @@ -246,6 +268,7 @@ void Config::ReadValues() { | |||
| 246 | 268 | ||
| 247 | // Core | 269 | // Core |
| 248 | ReadSetting("Core", Settings::values.use_multi_core); | 270 | ReadSetting("Core", Settings::values.use_multi_core); |
| 271 | ReadSetting("Core", Settings::values.use_extended_memory_layout); | ||
| 249 | 272 | ||
| 250 | // Cpu | 273 | // Cpu |
| 251 | ReadSetting("Cpu", Settings::values.cpu_accuracy); | 274 | ReadSetting("Cpu", Settings::values.cpu_accuracy); |
| @@ -259,11 +282,14 @@ void Config::ReadValues() { | |||
| 259 | ReadSetting("Cpu", Settings::values.cpuopt_misc_ir); | 282 | ReadSetting("Cpu", Settings::values.cpuopt_misc_ir); |
| 260 | ReadSetting("Cpu", Settings::values.cpuopt_reduce_misalign_checks); | 283 | ReadSetting("Cpu", Settings::values.cpuopt_reduce_misalign_checks); |
| 261 | ReadSetting("Cpu", Settings::values.cpuopt_fastmem); | 284 | ReadSetting("Cpu", Settings::values.cpuopt_fastmem); |
| 285 | ReadSetting("Cpu", Settings::values.cpuopt_fastmem_exclusives); | ||
| 286 | ReadSetting("Cpu", Settings::values.cpuopt_recompile_exclusives); | ||
| 262 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_unfuse_fma); | 287 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_unfuse_fma); |
| 263 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_reduce_fp_error); | 288 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_reduce_fp_error); |
| 264 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_ignore_standard_fpcr); | 289 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_ignore_standard_fpcr); |
| 265 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_inaccurate_nan); | 290 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_inaccurate_nan); |
| 266 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_fastmem_check); | 291 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_fastmem_check); |
| 292 | ReadSetting("Cpu", Settings::values.cpuopt_unsafe_ignore_global_monitor); | ||
| 267 | 293 | ||
| 268 | // Renderer | 294 | // Renderer |
| 269 | ReadSetting("Renderer", Settings::values.renderer_backend); | 295 | ReadSetting("Renderer", Settings::values.renderer_backend); |