summaryrefslogtreecommitdiff
path: root/src/yuzu_cmd/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/yuzu_cmd/config.cpp')
-rw-r--r--src/yuzu_cmd/config.cpp50
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
30namespace FS = Common::FS; 31namespace FS = Common::FS;
31 32
32Config::Config() { 33const 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
36Config::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
71static const std::array<int, Settings::NativeMotion::NumMotions> default_motions = {
72 SDL_SCANCODE_7,
73 SDL_SCANCODE_8,
74};
75
69static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs{{ 76static 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>&
102void Config::ReadValues() { 109void 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);