From 83230365dee6fef4bd4dc14b1f7e147176ae7b41 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya0@users.noreply.github.com> Date: Fri, 17 Oct 2025 05:58:18 -0400 Subject: [PATCH] move button names from ship to LUS (#943) * a bunch of button name plumbing * remove the parts * clang-format * start moving things * bit more * clang format * remove a line * builds * working --- .../controller/controldeck/ControlDeck.h | 4 +- .../controldevice/controller/Controller.h | 3 +- .../ship/controller/controldeck/ControlDeck.h | 6 ++- .../controldevice/controller/Controller.h | 3 +- .../controller/ControllerButton.h | 5 --- src/fast/interpreter.cpp | 2 + .../controller/controldeck/ControlDeck.cpp | 30 +++++++++++++-- .../controldevice/controller/Controller.cpp | 7 +--- .../controller/controldeck/ControlDeck.cpp | 17 ++++++++- .../controldevice/controller/Controller.cpp | 12 ++---- .../controller/ControllerButton.cpp | 37 +------------------ src/ship/window/gui/InputEditorWindow.cpp | 1 + 12 files changed, 62 insertions(+), 65 deletions(-) diff --git a/include/libultraship/controller/controldeck/ControlDeck.h b/include/libultraship/controller/controldeck/ControlDeck.h index ea670a9..79bb579 100644 --- a/include/libultraship/controller/controldeck/ControlDeck.h +++ b/include/libultraship/controller/controldeck/ControlDeck.h @@ -8,6 +8,7 @@ #include "ship/controller/physicaldevice/ConnectedPhysicalDeviceManager.h" #include "ship/controller/physicaldevice/GlobalSDLDeviceSettings.h" #include "ship/controller/controldevice/controller/mapping/ControllerDefaultMappings.h" +#include "libultraship/libultra/controller.h" namespace LUS { class ControlDeck final : public Ship::ControlDeck { @@ -15,7 +16,8 @@ class ControlDeck final : public Ship::ControlDeck { ControlDeck(); ControlDeck(std::vector additionalBitmasks); ControlDeck(std::vector additionalBitmasks, - std::shared_ptr controllerDefaultMappings); + std::shared_ptr controllerDefaultMappings, + std::unordered_map buttonNames); OSContPad* GetPads(); void WriteToPad(void* pad) override; diff --git a/include/libultraship/controller/controldevice/controller/Controller.h b/include/libultraship/controller/controldevice/controller/Controller.h index cc2276e..d5ec7df 100644 --- a/include/libultraship/controller/controldevice/controller/Controller.h +++ b/include/libultraship/controller/controldevice/controller/Controller.h @@ -15,8 +15,7 @@ namespace LUS { class Controller : public Ship::Controller { public: - Controller(uint8_t portIndex); - Controller(uint8_t portIndex, std::vector additionalBitmasks); + Controller(uint8_t portIndex, std::vector bitmasks); void ReadToPad(void* pad) override; diff --git a/include/ship/controller/controldeck/ControlDeck.h b/include/ship/controller/controldeck/ControlDeck.h index adda786..4f8ef9e 100644 --- a/include/ship/controller/controldeck/ControlDeck.h +++ b/include/ship/controller/controldeck/ControlDeck.h @@ -13,7 +13,8 @@ namespace Ship { class ControlDeck { public: ControlDeck(std::vector additionalBitmasks, - std::shared_ptr controllerDefaultMappings); + std::shared_ptr controllerDefaultMappings, + std::unordered_map buttonNames); ~ControlDeck(); void Init(uint8_t* controllerBits); @@ -31,6 +32,8 @@ class ControlDeck { std::shared_ptr GetConnectedPhysicalDeviceManager(); std::shared_ptr GetGlobalSDLDeviceSettings(); std::shared_ptr GetControllerDefaultMappings(); + const std::unordered_map& GetAllButtonNames() const; + std::string GetButtonNameForBitmask(CONTROLLERBUTTONS_T bitmask); protected: bool AllGameInputBlocked(); @@ -42,5 +45,6 @@ class ControlDeck { std::shared_ptr mConnectedPhysicalDeviceManager; std::shared_ptr mGlobalSDLDeviceSettings; std::shared_ptr mControllerDefaultMappings; + std::unordered_map mButtonNames; }; } // namespace Ship diff --git a/include/ship/controller/controldevice/controller/Controller.h b/include/ship/controller/controldevice/controller/Controller.h index a770e8d..de5b29e 100644 --- a/include/ship/controller/controldevice/controller/Controller.h +++ b/include/ship/controller/controldevice/controller/Controller.h @@ -20,8 +20,7 @@ namespace Ship { class Controller : public ControlDevice { public: - Controller(uint8_t portIndex); - Controller(uint8_t portIndex, std::vector additionalBitmasks); + Controller(uint8_t portIndex, std::vector bitmasks); ~Controller(); void ReloadAllMappingsFromConfig(); diff --git a/include/ship/controller/controldevice/controller/ControllerButton.h b/include/ship/controller/controldevice/controller/ControllerButton.h index 1a1b38f..2ed6324 100644 --- a/include/ship/controller/controldevice/controller/ControllerButton.h +++ b/include/ship/controller/controldevice/controller/ControllerButton.h @@ -4,15 +4,10 @@ #include #include #include -#include "libultraship/libultra/controller.h" #include "ship/controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h" namespace Ship { -#define BUTTON_BITMASKS \ - BTN_A, BTN_B, BTN_L, BTN_R, BTN_Z, BTN_START, BTN_CLEFT, BTN_CRIGHT, BTN_CUP, BTN_CDOWN, BTN_DLEFT, BTN_DRIGHT, \ - BTN_DUP, BTN_DDOWN - class ControllerButton { public: ControllerButton(uint8_t portIndex, CONTROLLERBUTTONS_T bitmask); diff --git a/src/fast/interpreter.cpp b/src/fast/interpreter.cpp index 57b6510..98d92f5 100644 --- a/src/fast/interpreter.cpp +++ b/src/fast/interpreter.cpp @@ -35,6 +35,8 @@ #include "ship/Context.h" #include "ship/config/ConsoleVariable.h" +#include "libultraship/libultra/os.h" + #include std::stack currentDir; diff --git a/src/libultraship/controller/controldeck/ControlDeck.cpp b/src/libultraship/controller/controldeck/ControlDeck.cpp index cdfbaae..c7c96f6 100644 --- a/src/libultraship/controller/controldeck/ControlDeck.cpp +++ b/src/libultraship/controller/controldeck/ControlDeck.cpp @@ -9,15 +9,37 @@ namespace LUS { ControlDeck::ControlDeck(std::vector additionalBitmasks, - std::shared_ptr controllerDefaultMappings) - : Ship::ControlDeck(additionalBitmasks, controllerDefaultMappings), mPads(nullptr) { + std::shared_ptr controllerDefaultMappings, + std::unordered_map buttonNames) + : Ship::ControlDeck(additionalBitmasks, controllerDefaultMappings, buttonNames), mPads(nullptr) { + std::vector bitmasks; + for (auto [bitmask, name] : buttonNames) { + bitmasks.push_back(bitmask); + } + bitmasks.insert(bitmasks.end(), additionalBitmasks.begin(), additionalBitmasks.end()); for (int32_t i = 0; i < MAXCONTROLLERS; i++) { - mPorts.push_back(std::make_shared(i, std::make_shared(i, additionalBitmasks))); + mPorts.push_back(std::make_shared(i, std::make_shared(i, bitmasks))); } } ControlDeck::ControlDeck(std::vector additionalBitmasks) - : ControlDeck(additionalBitmasks, std::make_shared()) { + : ControlDeck(additionalBitmasks, std::make_shared(), + std::unordered_map({ + { BTN_A, "A" }, + { BTN_B, "B" }, + { BTN_L, "L" }, + { BTN_R, "R" }, + { BTN_Z, "Z" }, + { BTN_START, "Start" }, + { BTN_CLEFT, "CLeft" }, + { BTN_CRIGHT, "CRight" }, + { BTN_CUP, "CUp" }, + { BTN_CDOWN, "CDown" }, + { BTN_DLEFT, "DLeft" }, + { BTN_DRIGHT, "DRight" }, + { BTN_DUP, "DUp" }, + { BTN_DDOWN, "DDown" }, + })) { } ControlDeck::ControlDeck() : ControlDeck(std::vector()) { diff --git a/src/libultraship/controller/controldevice/controller/Controller.cpp b/src/libultraship/controller/controldevice/controller/Controller.cpp index 9388b2a..9af93fb 100644 --- a/src/libultraship/controller/controldevice/controller/Controller.cpp +++ b/src/libultraship/controller/controldevice/controller/Controller.cpp @@ -15,11 +15,8 @@ #define MINIMUM_RADIUS_TO_MAP_NOTCH 0.9 namespace LUS { -Controller::Controller(uint8_t portIndex, std::vector additionalBitmasks) - : Ship::Controller(portIndex, additionalBitmasks) { -} - -Controller::Controller(uint8_t portIndex) : Ship::Controller(portIndex, {}) { +Controller::Controller(uint8_t portIndex, std::vector bitmasks) + : Ship::Controller(portIndex, bitmasks) { } void Controller::ReadToPad(void* pad) { diff --git a/src/ship/controller/controldeck/ControlDeck.cpp b/src/ship/controller/controldeck/ControlDeck.cpp index 85617b3..b5298b8 100644 --- a/src/ship/controller/controldeck/ControlDeck.cpp +++ b/src/ship/controller/controldeck/ControlDeck.cpp @@ -10,7 +10,8 @@ namespace Ship { ControlDeck::ControlDeck(std::vector additionalBitmasks, - std::shared_ptr controllerDefaultMappings) { + std::shared_ptr controllerDefaultMappings, + std::unordered_map buttonNames) { mConnectedPhysicalDeviceManager = std::make_shared(); mGlobalSDLDeviceSettings = std::make_shared(); mControllerDefaultMappings = controllerDefaultMappings == nullptr ? std::make_shared() @@ -118,4 +119,18 @@ std::shared_ptr ControlDeck::GetGlobalSDLDeviceSettings std::shared_ptr ControlDeck::GetControllerDefaultMappings() { return mControllerDefaultMappings; } + +const std::unordered_map& ControlDeck::GetAllButtonNames() const { + return mButtonNames; +} + +std::string ControlDeck::GetButtonNameForBitmask(CONTROLLERBUTTONS_T bitmask) { + // if we don't have a name for this bitmask, + // return the stringified bitmask + if (!mButtonNames.contains(bitmask)) { + return std::to_string(bitmask); + } + + return mButtonNames[bitmask]; +} } // namespace Ship diff --git a/src/ship/controller/controldevice/controller/Controller.cpp b/src/ship/controller/controldevice/controller/Controller.cpp index 558e369..102ad69 100644 --- a/src/ship/controller/controldevice/controller/Controller.cpp +++ b/src/ship/controller/controldevice/controller/Controller.cpp @@ -1,4 +1,5 @@ #include "ship/controller/controldevice/controller/Controller.h" +#include "ship/controller/controldeck/ControlDeck.h" #include #include #include "ship/Context.h" @@ -16,12 +17,8 @@ namespace Ship { -Controller::Controller(uint8_t portIndex, std::vector additionalBitmasks) - : ControlDevice(portIndex) { - for (auto bitmask : { BUTTON_BITMASKS }) { - mButtons[bitmask] = std::make_shared(portIndex, bitmask); - } - for (auto bitmask : additionalBitmasks) { +Controller::Controller(uint8_t portIndex, std::vector bitmasks) : ControlDevice(portIndex) { + for (auto bitmask : bitmasks) { mButtons[bitmask] = std::make_shared(portIndex, bitmask); } mLeftStick = std::make_shared(portIndex, LEFT_STICK); @@ -31,9 +28,6 @@ Controller::Controller(uint8_t portIndex, std::vector addit mLED = std::make_shared(portIndex); } -Controller::Controller(uint8_t portIndex) : Controller(portIndex, {}) { -} - Controller::~Controller() { SPDLOG_TRACE("destruct controller"); } diff --git a/src/ship/controller/controldevice/controller/ControllerButton.cpp b/src/ship/controller/controldevice/controller/ControllerButton.cpp index 0a72ba8..72b7881 100644 --- a/src/ship/controller/controldevice/controller/ControllerButton.cpp +++ b/src/ship/controller/controldevice/controller/ControllerButton.cpp @@ -12,6 +12,7 @@ #include "ship/Context.h" #include "ship/window/Window.h" +#include "ship/controller/controldeck/ControlDeck.h" namespace Ship { ControllerButton::ControllerButton(uint8_t portIndex, CONTROLLERBUTTONS_T bitmask) @@ -23,41 +24,7 @@ ControllerButton::~ControllerButton() { } std::string ControllerButton::GetConfigNameFromBitmask(CONTROLLERBUTTONS_T bitmask) { - switch (bitmask) { - case BTN_A: - return "A"; - case BTN_B: - return "B"; - case BTN_L: - return "L"; - case BTN_R: - return "R"; - case BTN_Z: - return "Z"; - case BTN_START: - return "Start"; - case BTN_CLEFT: - return "CLeft"; - case BTN_CRIGHT: - return "CRight"; - case BTN_CUP: - return "CUp"; - case BTN_CDOWN: - return "CDown"; - case BTN_DLEFT: - return "DLeft"; - case BTN_DRIGHT: - return "DRight"; - case BTN_DUP: - return "DUp"; - case BTN_DDOWN: - return "DDown"; - default: - // if we don't have a name for this bitmask, - // which happens with additionalBitmasks provided by ports, - // return the stringified bitmask - return std::to_string(bitmask); - } + return Ship::Context::GetInstance()->GetControlDeck()->GetButtonNameForBitmask(bitmask); } std::unordered_map> ControllerButton::GetAllButtonMappings() { diff --git a/src/ship/window/gui/InputEditorWindow.cpp b/src/ship/window/gui/InputEditorWindow.cpp index 7ef4c33..27455ba 100644 --- a/src/ship/window/gui/InputEditorWindow.cpp +++ b/src/ship/window/gui/InputEditorWindow.cpp @@ -5,6 +5,7 @@ #include "ship/config/ConsoleVariable.h" #include "ship/controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToButtonMapping.h" #include "ship/controller/controldeck/ControlDeck.h" +#include "libultraship/libultra/controller.h" #define SCALE_IMGUI_SIZE(value) ((value / 13.0f) * ImGui::GetFontSize())