diff --git a/libultraship/libultraship/ControlDeck.cpp b/libultraship/libultraship/ControlDeck.cpp index 31eb90067..7437afeee 100644 --- a/libultraship/libultraship/ControlDeck.cpp +++ b/libultraship/libultraship/ControlDeck.cpp @@ -6,6 +6,7 @@ #include "KeyboardController.h" #include "SDLController.h" #include +#include "Cvar.h" namespace Ship { uint8_t* controllerBits; @@ -51,18 +52,31 @@ namespace Ship { *controllerBits |= (backend->Connected()) << slot; } - void ControlDeck::WriteToPad(OSContPad* pad) const { - for (size_t i = 0; i < virtualDevices.size(); 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); - } - } + void ControlDeck::WriteToPad(OSContPad* pad) const { + + #ifdef __SWITCH__ + bool shouldBlockGameInput = CVar_GetS32("gOpenMenuBar", 0); + #else + bool shouldBlockGameInput = CVar_GetS32("gOpenMenuBar", 0) && CVar_GetS32("gControlNav", 0); + #endif + + for (size_t i = 0; i < virtualDevices.size(); i++) { + const std::shared_ptr backend = physicalDevices[virtualDevices[i]]; + if (backend->GetGuid() == "Auto") { + for (const auto& device : physicalDevices) { + if(shouldBlockGameInput && device->GetGuid() != "Keyboard") { + continue; + } + device->Read(&pad[i], i); + } + continue; + } + if(shouldBlockGameInput && backend->GetGuid() != "Keyboard") { + continue; + } + backend->Read(&pad[i], i); + } + } #define NESTED(key, ...) StringHelper::Sprintf("Controllers.%s.Slot_%d." key, device->GetGuid().c_str(), slot, __VA_ARGS__) diff --git a/libultraship/libultraship/ImGuiImpl.cpp b/libultraship/libultraship/ImGuiImpl.cpp index b73b65886..0d00ec32c 100644 --- a/libultraship/libultraship/ImGuiImpl.cpp +++ b/libultraship/libultraship/ImGuiImpl.cpp @@ -822,7 +822,12 @@ namespace SohImGui { GlobalCtx2::GetInstance()->GetWindow()->SetMenuBar(menu_bar); ShowCursor(menu_bar, Dialogues::dMenubar); GlobalCtx2::GetInstance()->GetWindow()->GetControlDeck()->SaveControllerSettings(); - if (CVar_GetS32("gControlNav", 0)) { + #ifdef __SWITCH__ + bool enableControllerNavigation = true; + #else + bool enableControllerNavigation = CVar_GetS32("gControlNav", 0); + #endif + if (enableControllerNavigation) { if (CVar_GetS32("gOpenMenuBar", 0)) { io->ConfigFlags |=ImGuiConfigFlags_NavEnableGamepad | ImGuiConfigFlags_NavEnableKeyboard; } else { @@ -892,9 +897,11 @@ namespace SohImGui { if (ImGui::BeginMenu("Controller")) { + + #ifndef __SWITCH__ EnhancementCheckbox("Use Controller Navigation", "gControlNav"); Tooltip("Allows controller navigation of the menu bar\nD-pad to move between items, A to select, and X to grab focus on the menu bar"); - + #endif EnhancementCheckbox("Controller Configuration", "gControllerConfigurationEnabled"); controller->Opened = CVar_GetS32("gControllerConfigurationEnabled", 0); @@ -1365,7 +1372,7 @@ namespace SohImGui { { val = 20; } - + CVar_SetS32(fps_cvar, val); needs_save = true; } diff --git a/libultraship/libultraship/Window.cpp b/libultraship/libultraship/Window.cpp index 0db33792e..f4f047428 100644 --- a/libultraship/libultraship/Window.cpp +++ b/libultraship/libultraship/Window.cpp @@ -19,7 +19,7 @@ #include #include #include "Console.h" -#include "Cvar.h" +#include "ImGuiImpl.h" #include @@ -67,10 +67,9 @@ extern "C" { pad->gyro_x = 0; pad->gyro_y = 0; - if (!CVar_GetS32("gOpenMenuBar", 0)) { - Ship::GlobalCtx2::GetInstance()->GetWindow()->GetControlDeck()->WriteToPad(pad); - } + if (SohImGui::controller->Opened) return; + Ship::GlobalCtx2::GetInstance()->GetWindow()->GetControlDeck()->WriteToPad(pad); Ship::ExecuteHooks(pad); }