diff --git a/game/graphics/gfx.cpp b/game/graphics/gfx.cpp index ea1b6c640c..291733ed8e 100644 --- a/game/graphics/gfx.cpp +++ b/game/graphics/gfx.cpp @@ -155,8 +155,9 @@ void LoadPeripheralSettings(const ghc::filesystem::path& filepath) { g_is_debug_menu_visible_on_startup = configuration["Debug Menu Visibility"].get(); } - g_settings.pad_mapping_info.use_mouse = configuration.value("Use Mouse", false); - + if (configuration.find("Debug Menu Visibility") != configuration.end()) { + g_settings.pad_mapping_info.use_mouse = configuration["Use Mouse"].get(); + } int controller_index = 0; for (const auto& peripheral : configuration["Peripherals"]) { auto& controller_buttons_json = peripheral["Controller"]["Buttons"]; diff --git a/game/system/newpad.cpp b/game/system/newpad.cpp index cde31c0dd0..f2172487f9 100644 --- a/game/system/newpad.cpp +++ b/game/system/newpad.cpp @@ -213,8 +213,7 @@ void UpdateAxisValue(MappingInfo& mapping_info) { double input = 0.0f; if (mapping_info.keyboard_analog_mapping[pad][analog].positive_key > -1 && mapping_info.keyboard_analog_mapping[pad][analog].positive_key < glfw::NUM_KEYS) { - if (analog == static_cast(Analog::Left_Y) || - analog == static_cast(Analog::Right_Y)) { + if (analog == static_cast(Analog::Left_Y)) { input -= g_buffered_key_status[mapping_info.keyboard_analog_mapping[pad][analog].positive_key]; } else { @@ -224,8 +223,7 @@ void UpdateAxisValue(MappingInfo& mapping_info) { } if (mapping_info.keyboard_analog_mapping[pad][analog].negative_key > -1 && mapping_info.keyboard_analog_mapping[pad][analog].negative_key < glfw::NUM_KEYS) { - if (analog == static_cast(Analog::Left_Y) || - analog == static_cast(Analog::Right_Y)) { + if (analog == static_cast(Analog::Left_Y)) { input += g_buffered_key_status[mapping_info.keyboard_analog_mapping[pad][analog].negative_key]; } else { @@ -290,7 +288,10 @@ void MapButton(MappingInfo& mapping, Button button, int pad, int key) { } } -void MapAnalog(MappingInfo& mapping, Analog button, int pad, AnalogMappingInfo& analomapping_info) { +void MapAnalog(MappingInfo& mapping, + Analog button, + int pad, + AnalogMappingInfo& analog_mapping_info) { // check if pad is valid. dont map buttons with invalid pads. if (CheckPadIdx(pad) == -1) { return; @@ -298,9 +299,9 @@ void MapAnalog(MappingInfo& mapping, Analog button, int pad, AnalogMappingInfo& if (g_gamepads.gamepad_idx[pad] == -1) { // TODO: Check if other pad is keyboard and if key is already bound - mapping.keyboard_analog_mapping[pad][(int)button] = analomapping_info; + mapping.keyboard_analog_mapping[pad][(int)button] = analog_mapping_info; } else { - mapping.controller_analog_mapping[pad][(int)button] = analomapping_info; + mapping.controller_analog_mapping[pad][(int)button] = analog_mapping_info; } } @@ -375,22 +376,23 @@ void DefaultMapping(MappingInfo& mapping) { MapButton(mapping, Button::L3, 0, GLFW_KEY_COMMA); MapButton(mapping, Button::R3, 0, GLFW_KEY_PERIOD); - AnalogMappingInfo analomapping_info; + AnalogMappingInfo analog_mapping_info; - analomapping_info.positive_key = GLFW_KEY_D; - analomapping_info.negative_key = GLFW_KEY_A; - MapAnalog(mapping, Analog::Left_X, 0, analomapping_info); + analog_mapping_info.positive_key = GLFW_KEY_D; + analog_mapping_info.negative_key = GLFW_KEY_A; + MapAnalog(mapping, Analog::Left_X, 0, analog_mapping_info); - analomapping_info.positive_key = GLFW_KEY_W; - analomapping_info.negative_key = GLFW_KEY_S; - MapAnalog(mapping, Analog::Left_Y, 0, analomapping_info); + analog_mapping_info.positive_key = GLFW_KEY_W; + analog_mapping_info.negative_key = GLFW_KEY_S; + MapAnalog(mapping, Analog::Left_Y, 0, analog_mapping_info); - analomapping_info.mode = AnalogMappingMode::AnalogInput; - analomapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_X_AXIS; - MapAnalog(mapping, Analog::Right_X, 0, analomapping_info); + analog_mapping_info.positive_key = GLFW_KEY_L; + analog_mapping_info.negative_key = GLFW_KEY_J; + MapAnalog(mapping, Analog::Right_X, 0, analog_mapping_info); - analomapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_Y_AXIS; - MapAnalog(mapping, Analog::Right_Y, 0, analomapping_info); + analog_mapping_info.positive_key = GLFW_KEY_I; + analog_mapping_info.negative_key = GLFW_KEY_K; + MapAnalog(mapping, Analog::Right_Y, 0, analog_mapping_info); const double default_mouse_x_sensitivity = 5.0f; const double default_mouse_y_sensitivity = 2.0f; diff --git a/game/system/newpad.h b/game/system/newpad.h index 2b74e4ba2d..fbfd94c09c 100644 --- a/game/system/newpad.h +++ b/game/system/newpad.h @@ -100,7 +100,7 @@ void DefaultMapping(MappingInfo& mapping); int IsPressed(MappingInfo& mapping, Button button, int pad); int GetAnalogValue(MappingInfo& mapping, Analog analog, int pad); void MapButton(MappingInfo& mapping, Button button, int pad, int key); -void MapAnalog(MappingInfo& mapping, Button button, int pad, AnalogMappingInfo& analogMapping); +void MapAnalog(MappingInfo& mapping, Analog button, int pad, AnalogMappingInfo& analogMapping); void SetAnalogAxisValue(MappingInfo& mapping, int axis, double value); void ClearAnalogAxisValue(MappingInfo& mapping, int axis); diff --git a/test/game/test_newpad.cpp b/test/game/test_newpad.cpp index 6308324d3e..7c2c750085 100644 --- a/test/game/test_newpad.cpp +++ b/test/game/test_newpad.cpp @@ -99,6 +99,15 @@ TEST_F(PeripheralTest, SetAnalogAxisValue_NominalAnalogAxisY_SetConvertedValue) } TEST_F(PeripheralTest, SetAnalogAxisValue_InputLargerThanMaxValue_SetMaxValue) { // Arrange + Pad::AnalogMappingInfo analog_mapping_info; + + analog_mapping_info.mode = Pad::AnalogMappingMode::AnalogInput; + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_X_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_X, 0, analog_mapping_info); + + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_Y_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_Y, 0, analog_mapping_info); + float expected_analog_value = 1; // Act @@ -111,6 +120,14 @@ TEST_F(PeripheralTest, SetAnalogAxisValue_InputLargerThanMaxValue_SetMaxValue) { TEST_F(PeripheralTest, SetAnalogAxisValue_InputSmallerThanMinValue_SetMinValue) { // Arrange float expected_analog_value = -1; + Pad::AnalogMappingInfo analog_mapping_info; + + analog_mapping_info.mode = Pad::AnalogMappingMode::AnalogInput; + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_X_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_X, 0, analog_mapping_info); + + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_Y_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_Y, 0, analog_mapping_info); // Act Pad::SetAnalogAxisValue(mapping_info_, static_cast(GlfwKeyCustomAxis::CURSOR_X_AXIS), @@ -138,6 +155,14 @@ TEST_F( // Arrange float expected_x_axis_sensitivity = 1e-4; mapping_info_.mouse_x_axis_sensitivities[0] = 0; + Pad::AnalogMappingInfo analog_mapping_info; + + analog_mapping_info.mode = Pad::AnalogMappingMode::AnalogInput; + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_X_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_X, 0, analog_mapping_info); + + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_Y_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_Y, 0, analog_mapping_info); // Act Pad::SetAnalogAxisValue(mapping_info_, static_cast(GlfwKeyCustomAxis::CURSOR_X_AXIS), 100); @@ -151,6 +176,14 @@ TEST_F( // Arrange float expected_y_axis_sensitivity = 1e-4; mapping_info_.mouse_y_axis_sensitivities[0] = 0; + Pad::AnalogMappingInfo analog_mapping_info; + + analog_mapping_info.mode = Pad::AnalogMappingMode::AnalogInput; + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_X_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_X, 0, analog_mapping_info); + + analog_mapping_info.axis_id = GlfwKeyCustomAxis::CURSOR_Y_AXIS; + Pad::MapAnalog(mapping_info_, Pad::Analog::Right_Y, 0, analog_mapping_info); // Act Pad::SetAnalogAxisValue(mapping_info_, static_cast(GlfwKeyCustomAxis::CURSOR_Y_AXIS), 100);