diff --git a/libultraship/libultraship/ControlDeck.cpp b/libultraship/libultraship/ControlDeck.cpp index ff7a1d243..fd6511f78 100644 --- a/libultraship/libultraship/ControlDeck.cpp +++ b/libultraship/libultraship/ControlDeck.cpp @@ -2,7 +2,7 @@ #include "Window.h" #include "Controller.h" -#include "DisconnectedController.h" +#include "VirtualController.h" #include "KeyboardController.h" #include "SDLController.h" #include @@ -27,8 +27,9 @@ void Ship::ControlDeck::ScanPhysicalDevices() { } } + physicalDevices.push_back(std::make_shared("Auto", "Auto", true)); physicalDevices.push_back(std::make_shared()); - physicalDevices.push_back(std::make_shared()); + physicalDevices.push_back(std::make_shared("Disconnected", "None", false)); for (const auto& device : physicalDevices) { for (int i = 0; i < MAXCONTROLLERS; i++) { @@ -51,7 +52,14 @@ void Ship::ControlDeck::SetPhysicalDevice(int slot, int deviceSlot) { void Ship::ControlDeck::WriteToPad(OSContPad* pad) const { for (size_t i = 0; i < virtualDevices.size(); i++) { - physicalDevices[virtualDevices[i]]->Read(&pad[i], i); + const std::shared_ptr backend = physicalDevices[virtualDevices[i]]; + if (backend->GetGuid() == "Auto") { + for (const auto& device : physicalDevices) { + device->Read(&pad[i], i); + } + continue; + } + backend->Read(&pad[i], i); } } diff --git a/libultraship/libultraship/InputEditor.cpp b/libultraship/libultraship/InputEditor.cpp index f03e94d57..25e641a06 100644 --- a/libultraship/libultraship/InputEditor.cpp +++ b/libultraship/libultraship/InputEditor.cpp @@ -26,7 +26,7 @@ namespace Ship { float size = 40; bool readingMode = BtnReading == n64Btn; - bool disabled = BtnReading != -1 && !readingMode || !backend->Connected(); + bool disabled = (BtnReading != -1 && !readingMode) || !backend->Connected() || backend->GetGuid() == "Auto"; ImVec2 len = ImGui::CalcTextSize(label); ImVec2 pos = ImGui::GetCursorPos(); ImGui::SetCursorPosY(pos.y + len.y / 4); @@ -90,7 +90,7 @@ namespace Ship { std::shared_ptr Backend = devices[vDevices[CurrentPort]]; DeviceProfile& profile =Backend->profiles[CurrentPort]; float sensitivity = profile.Thresholds[SENSITIVITY]; - bool IsKeyboard = Backend->GetGuid() == "Keyboard" || !Backend->Connected(); + bool IsKeyboard = Backend->GetGuid() == "Keyboard" || Backend->GetGuid() == "Auto" || !Backend->Connected(); const char* ControllerName = Backend->GetControllerName(); if (ControllerName != nullptr && ImGui::BeginCombo("##ControllerEntries", ControllerName)) { diff --git a/libultraship/libultraship/DisconnectedController.h b/libultraship/libultraship/VirtualController.h similarity index 67% rename from libultraship/libultraship/DisconnectedController.h rename to libultraship/libultraship/VirtualController.h index 9cbc2b99c..017373e55 100644 --- a/libultraship/libultraship/DisconnectedController.h +++ b/libultraship/libultraship/VirtualController.h @@ -4,18 +4,20 @@ #include "Controller.h" -class DisconnectedController final : public Ship::Controller { +class VirtualController final : public Ship::Controller { public: - DisconnectedController() { - GUID = "Disconnected"; + VirtualController(const std::string& CUID, const std::string& KeyName, bool Connected) { + GUID = CUID; + isConnected = Connected; + ButtonName = KeyName; } std::map, int32_t> ReadButtonPress(); void ReadFromSource(int32_t slot) override {} - const char* GetControllerName() override { return "Disconnected"; } - const char* GetButtonName(int slot, int n64Button) override { return "None"; } + const char* GetControllerName() override { return GUID.c_str(); } + const char* GetButtonName(int slot, int n64Button) override { return ButtonName.c_str(); } void WriteToSource(int32_t slot, ControllerCallback* controller) override { } - bool Connected() const override { return false; } + bool Connected() const override { return isConnected; } bool CanRumble() const override { return false; } bool CanGyro() const override { return false; } @@ -25,6 +27,8 @@ public: std::optional GetPadConfSection() { return "Unk"; } void CreateDefaultBinding(int32_t slot) override {} protected: + std::string ButtonName; + bool isConnected = false; std::string GetControllerType() { return "Unk"; } std::string GetConfSection() { return "Unk"; } std::string GetBindingConfSection() { return "Unk"; } diff --git a/libultraship/libultraship/libultraship.vcxproj b/libultraship/libultraship/libultraship.vcxproj index 27e868afa..920f6442f 100644 --- a/libultraship/libultraship/libultraship.vcxproj +++ b/libultraship/libultraship/libultraship.vcxproj @@ -344,6 +344,7 @@ + @@ -352,7 +353,6 @@ - diff --git a/libultraship/libultraship/libultraship.vcxproj.filters b/libultraship/libultraship/libultraship.vcxproj.filters index ec1c6f870..abad0cb72 100644 --- a/libultraship/libultraship/libultraship.vcxproj.filters +++ b/libultraship/libultraship/libultraship.vcxproj.filters @@ -674,14 +674,14 @@ Source Files\Controller - - Source Files\Controller - Source Files\Lib\nlohmann Source Files\Lib\Mercury + + Source Files\Controller + \ No newline at end of file