From 733871e1e793b79a1c48c7f430df5cad94e281f6 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Mon, 5 Jan 2026 07:44:09 +0000 Subject: [PATCH] feat: Update gamepad input bindings for consistency and add logging in input service --- config/seed_runtime.json | 28 ++++++++++++------------ scripts/gui.lua | 10 ++++++++- src/services/impl/sdl_input_service.cpp | 24 ++++++++++++++++++++ src/services/interfaces/config_types.hpp | 28 ++++++++++++------------ 4 files changed, 61 insertions(+), 29 deletions(-) diff --git a/config/seed_runtime.json b/config/seed_runtime.json index e170497..9626462 100644 --- a/config/seed_runtime.json +++ b/config/seed_runtime.json @@ -26,25 +26,25 @@ "gamepad_move_y_axis": "lefty", "gamepad_look_x_axis": "rightx", "gamepad_look_y_axis": "righty", - "gamepad_dpad_up": "dpad_up", - "gamepad_dpad_down": "dpad_down", - "gamepad_dpad_left": "dpad_left", - "gamepad_dpad_right": "dpad_right", + "gamepad_dpad_up": "dpup", + "gamepad_dpad_down": "dpdown", + "gamepad_dpad_left": "dpleft", + "gamepad_dpad_right": "dpright", "gamepad_button_actions": { - "south": "gamepad_a", - "east": "gamepad_b", - "west": "gamepad_x", - "north": "gamepad_y", - "left_shoulder": "gamepad_lb", - "right_shoulder": "gamepad_rb", - "left_stick": "gamepad_ls", - "right_stick": "gamepad_rs", + "a": "gamepad_a", + "b": "gamepad_b", + "x": "gamepad_x", + "y": "gamepad_y", + "leftshoulder": "gamepad_lb", + "rightshoulder": "gamepad_rb", + "leftstick": "gamepad_ls", + "rightstick": "gamepad_rs", "back": "gamepad_back", "start": "gamepad_start" }, "gamepad_axis_actions": { - "left_trigger": "gamepad_lt", - "right_trigger": "gamepad_rt" + "lefttrigger": "gamepad_lt", + "righttrigger": "gamepad_rt" }, "gamepad_axis_action_threshold": 0.5 }, diff --git a/scripts/gui.lua b/scripts/gui.lua index 713866f..b2ba518 100644 --- a/scripts/gui.lua +++ b/scripts/gui.lua @@ -45,6 +45,13 @@ local function rectContains(rect, x, y) return x >= rect.x and x <= rect.x + rect.width and y >= rect.y and y <= rect.y + rect.height end +local function log_trace(fmt, ...) + if not lua_debug or not fmt then + return + end + print(string.format(fmt, ...)) +end + local InputState = {} InputState.__index = InputState @@ -382,7 +389,8 @@ function Gui.textbox(context, widgetId, rectDef, state, opts) end if context.input:isKeyDown("end") then state.cursor = #state.text - context.input.keys.end = false + context.input.keys["end"] = false + log_trace("Textbox end key pressed, cursor=%d text_len=%d", state.cursor, #state.text) end if context.input:isKeyDown("enter") then if opts.onSubmit then diff --git a/src/services/impl/sdl_input_service.cpp b/src/services/impl/sdl_input_service.cpp index 3dc76df..eac0760 100644 --- a/src/services/impl/sdl_input_service.cpp +++ b/src/services/impl/sdl_input_service.cpp @@ -330,6 +330,12 @@ void SdlInputService::BuildActionKeyMapping() { SDL_GamepadButton button = SDL_GetGamepadButtonFromString(normalized.c_str()); if (button != SDL_GAMEPAD_BUTTON_INVALID) { target = button; + if (logger_) { + logger_->Trace("SdlInputService", "BuildActionKeyMapping", + "gamepadButton=" + std::string(bindingName) + + ", value=" + buttonValue + + ", buttonCode=" + std::to_string(static_cast(button))); + } } else if (logger_) { logger_->Error("SdlInputService: unknown gamepad button binding for " + std::string(bindingName) + " -> " + buttonValue); @@ -350,6 +356,12 @@ void SdlInputService::BuildActionKeyMapping() { SDL_GamepadAxis axis = SDL_GetGamepadAxisFromString(normalized.c_str()); if (axis != SDL_GAMEPAD_AXIS_INVALID) { target = axis; + if (logger_) { + logger_->Trace("SdlInputService", "BuildActionKeyMapping", + "gamepadAxis=" + std::string(axisName) + + ", value=" + axisValue + + ", axisCode=" + std::to_string(static_cast(axis))); + } } else if (logger_) { logger_->Error("SdlInputService: unknown gamepad axis binding for " + std::string(axisName) + " -> " + axisValue); @@ -375,6 +387,12 @@ void SdlInputService::BuildActionKeyMapping() { continue; } gamepadButtonActions_[button] = actionName; + if (logger_) { + logger_->Trace("SdlInputService", "BuildActionKeyMapping", + "gamepadButtonAction=" + buttonName + + ", action=" + actionName + + ", buttonCode=" + std::to_string(static_cast(button))); + } } for (const auto& [axisName, actionName] : bindings.gamepadAxisActions) { @@ -391,6 +409,12 @@ void SdlInputService::BuildActionKeyMapping() { continue; } gamepadAxisActions_[axis] = actionName; + if (logger_) { + logger_->Trace("SdlInputService", "BuildActionKeyMapping", + "gamepadAxisAction=" + axisName + + ", action=" + actionName + + ", axisCode=" + std::to_string(static_cast(axis))); + } } gamepadAxisActionThreshold_ = bindings.gamepadAxisActionThreshold; diff --git a/src/services/interfaces/config_types.hpp b/src/services/interfaces/config_types.hpp index fe92735..1d1c7e9 100644 --- a/src/services/interfaces/config_types.hpp +++ b/src/services/interfaces/config_types.hpp @@ -23,25 +23,25 @@ struct InputBindings { std::string gamepadMoveYAxis = "lefty"; std::string gamepadLookXAxis = "rightx"; std::string gamepadLookYAxis = "righty"; - std::string gamepadDpadUpButton = "dpad_up"; - std::string gamepadDpadDownButton = "dpad_down"; - std::string gamepadDpadLeftButton = "dpad_left"; - std::string gamepadDpadRightButton = "dpad_right"; + std::string gamepadDpadUpButton = "dpup"; + std::string gamepadDpadDownButton = "dpdown"; + std::string gamepadDpadLeftButton = "dpleft"; + std::string gamepadDpadRightButton = "dpright"; std::unordered_map gamepadButtonActions = { - {"south", "gamepad_a"}, - {"east", "gamepad_b"}, - {"west", "gamepad_x"}, - {"north", "gamepad_y"}, - {"left_shoulder", "gamepad_lb"}, - {"right_shoulder", "gamepad_rb"}, - {"left_stick", "gamepad_ls"}, - {"right_stick", "gamepad_rs"}, + {"a", "gamepad_a"}, + {"b", "gamepad_b"}, + {"x", "gamepad_x"}, + {"y", "gamepad_y"}, + {"leftshoulder", "gamepad_lb"}, + {"rightshoulder", "gamepad_rb"}, + {"leftstick", "gamepad_ls"}, + {"rightstick", "gamepad_rs"}, {"back", "gamepad_back"}, {"start", "gamepad_start"} }; std::unordered_map gamepadAxisActions = { - {"left_trigger", "gamepad_lt"}, - {"right_trigger", "gamepad_rt"} + {"lefttrigger", "gamepad_lt"}, + {"righttrigger", "gamepad_rt"} }; float gamepadAxisActionThreshold = 0.5f; };