From f160f1eaf58e0984ce597402bd97102e1f002868 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sun, 26 May 2024 09:23:34 -0400 Subject: [PATCH] fix: assign defaults for inputs that don't exist in `controls.json` --- include/recomp_input.h | 25 +++++++++++++++++++++++++ src/game/config.cpp | 10 ++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/recomp_input.h b/include/recomp_input.h index 649a2ab..7243862 100644 --- a/include/recomp_input.h +++ b/include/recomp_input.h @@ -112,6 +112,31 @@ namespace recomp { std::vector toggle_menu; }; + constexpr const std::vector& get_default_mapping_for_input(const DefaultN64Mappings& defaults, const GameInput input) { + switch (input) { + case GameInput::A: return defaults.a; + case GameInput::B: return defaults.b; + case GameInput::L: return defaults.l; + case GameInput::R: return defaults.r; + case GameInput::Z: return defaults.z; + case GameInput::START: return defaults.start; + case GameInput::C_LEFT: return defaults.c_left; + case GameInput::C_RIGHT: return defaults.c_right; + case GameInput::C_UP: return defaults.c_up; + case GameInput::C_DOWN: return defaults.c_down; + case GameInput::DPAD_LEFT: return defaults.dpad_left; + case GameInput::DPAD_RIGHT: return defaults.dpad_right; + case GameInput::DPAD_UP: return defaults.dpad_up; + case GameInput::DPAD_DOWN: return defaults.dpad_down; + case GameInput::X_AXIS_NEG: return defaults.analog_left; + case GameInput::X_AXIS_POS: return defaults.analog_right; + case GameInput::Y_AXIS_POS: return defaults.analog_up; + case GameInput::Y_AXIS_NEG: return defaults.analog_down; + case GameInput::TOGGLE_MENU: return defaults.toggle_menu; + default: return std::vector(); + } + } + extern const DefaultN64Mappings default_n64_keyboard_mappings; extern const DefaultN64Mappings default_n64_controller_mappings; diff --git a/src/game/config.cpp b/src/game/config.cpp index 9a14e0a..6c1922c 100644 --- a/src/game/config.cpp +++ b/src/game/config.cpp @@ -324,6 +324,16 @@ bool load_input_device_from_json(const nlohmann::json& config_json, recomp::Inpu // Check if the json object for the given input exists and that it's an array. auto find_input_it = mappings_json.find(input_name); if (find_input_it == mappings_json.end() || !find_input_it->is_array()) { + assign_mapping( + device, + cur_input, + recomp::get_default_mapping_for_input( + device == recomp::InputDevice::Keyboard ? + recomp::default_n64_keyboard_mappings : + recomp::default_n64_controller_mappings, + cur_input + ) + ); continue; } const nlohmann::json& input_json = *find_input_it;