diff --git a/libultraship/libultraship/Controller.h b/libultraship/libultraship/Controller.h index 19ec7c6dd..a993dc681 100644 --- a/libultraship/libultraship/Controller.h +++ b/libultraship/libultraship/Controller.h @@ -21,6 +21,7 @@ namespace Ship { virtual void ReadFromSource() = 0; virtual void WriteToSource(ControllerCallback* controller) = 0; virtual bool CanRumble() const = 0; + virtual bool Connected() = 0; bool isRumbling; void SetButtonMapping(const std::string& szButtonName, int32_t dwScancode); diff --git a/libultraship/libultraship/KeyboardController.h b/libultraship/libultraship/KeyboardController.h index 97e2235ff..a955bab96 100644 --- a/libultraship/libultraship/KeyboardController.h +++ b/libultraship/libultraship/KeyboardController.h @@ -11,6 +11,7 @@ namespace Ship { void ReadFromSource(); void WriteToSource(ControllerCallback* controller); bool CanRumble() const { return false; } + bool Connected() { return true; } bool PressButton(int32_t dwScancode); bool ReleaseButton(int32_t dwScancode); diff --git a/libultraship/libultraship/SDLController.h b/libultraship/libultraship/SDLController.h index f4c84822d..788abdcb8 100644 --- a/libultraship/libultraship/SDLController.h +++ b/libultraship/libultraship/SDLController.h @@ -13,6 +13,7 @@ namespace Ship { void ReadFromSource(); void WriteToSource(ControllerCallback* controller); bool CanRumble() const { return SDL_GameControllerHasRumble(Cont); } + bool Connected() { return Cont != nullptr; } std::string GetGuid() { return guid; }; diff --git a/libultraship/libultraship/SohImGuiImpl.cpp b/libultraship/libultraship/SohImGuiImpl.cpp index d1af45617..d93792d55 100644 --- a/libultraship/libultraship/SohImGuiImpl.cpp +++ b/libultraship/libultraship/SohImGuiImpl.cpp @@ -349,7 +349,7 @@ namespace SohImGui { if (ImGui::BeginMenu("Controller")) { for (const auto& [i, controllers] : Ship::Window::Controllers) { bool hasPad = std::find_if(controllers.begin(), controllers.end(), [](const auto& c) { - return c->HasPadConf(); + return c->HasPadConf() && c->Connected(); }) != controllers.end(); if (!hasPad) continue;