From f9cfcde6274fc8a9678ead05616ae5587630b6f2 Mon Sep 17 00:00:00 2001 From: Kenix3 Date: Thu, 4 May 2023 23:56:57 -0400 Subject: [PATCH] Lus updates (#2835) * Changes for LUS renames in ResourceManager and Archive. * Moves WriteSaveFile and ReadSaveFile to SaveManager. * Removes ImGui namespace. * Bump LUS * Updates gitignore for intellij projects. * Controller usage is now up to date with newest LUS. * Adapters for removal of Controller.WriteToSource from LUS. * Uses correct capitalization on Controller.GetProfile() * Bump LUS --------- Co-authored-by: Christopher Leggett --- .gitignore | 2 +- libultraship | 2 +- soh/soh/OTRGlobals.cpp | 29 ++++++++++++++++++++++------- soh/src/code/padmgr.c | 16 ++++++++-------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index af0068765..3ef2451d2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ __pycache__/ .vscode/ .vs/ .idea/ -cmake-build-debug +cmake-build-** venv/ .cache/ diff --git a/libultraship b/libultraship index 7fe0c076a..f9e554dc2 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 7fe0c076a8261d7e878b196d2b5de57beccf1177 +Subproject commit f9e554dc214c2f23cfc74a26348ef9fd3055451b diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index afb3a82a6..b684e3143 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1576,12 +1576,27 @@ extern "C" uint32_t OTRGetCurrentHeight() { return OTRGlobals::Instance->context->GetCurrentHeight(); } -extern "C" void OTRControllerCallback(ControllerCallback* controller) { +extern "C" void OTRControllerCallback(uint8_t rumble, uint8_t ledColor) { auto controlDeck = Ship::Window::GetInstance()->GetControlDeck(); - for (int i = 0; i < controlDeck->GetNumVirtualDevices(); ++i) { - auto physicalDevice = controlDeck->GetPhysicalDeviceFromVirtualSlot(i); - physicalDevice->WriteToSource(i, controller); + for (int i = 0; i < controlDeck->GetNumConnectedPorts(); ++i) { + auto physicalDevice = controlDeck->GetDeviceFromPortIndex(i); + switch (ledColor) { + case 0: + physicalDevice->SetLed(i, 255, 0, 0); + break; + case 1: + physicalDevice->SetLed(i, 0x1E, 0x69, 0x1B); + break; + case 2: + physicalDevice->SetLed(i, 0x64, 0x14, 0x00); + break; + case 3: + physicalDevice->SetLed(i, 0x00, 0x3C, 0x64); + break; + } + + physicalDevice->SetRumble(i, rumble); } } @@ -1627,10 +1642,10 @@ extern "C" void AudioPlayer_Play(const uint8_t* buf, uint32_t len) { extern "C" int Controller_ShouldRumble(size_t slot) { auto controlDeck = Ship::Window::GetInstance()->GetControlDeck(); - if (slot < controlDeck->GetNumVirtualDevices()) { - auto physicalDevice = controlDeck->GetPhysicalDeviceFromVirtualSlot(slot); + if (slot < controlDeck->GetNumConnectedPorts()) { + auto physicalDevice = controlDeck->GetDeviceFromPortIndex(slot); - if (physicalDevice->getProfile(slot)->UseRumble && physicalDevice->CanRumble()) { + if (physicalDevice->GetProfile(slot)->UseRumble && physicalDevice->CanRumble()) { return 1; } } diff --git a/soh/src/code/padmgr.c b/soh/src/code/padmgr.c index cfc0c05b5..ac0bfc2c6 100644 --- a/soh/src/code/padmgr.c +++ b/soh/src/code/padmgr.c @@ -11,8 +11,6 @@ extern void* __cdecl memset(_Out_writes_bytes_all_(_Size) void* _Dst, _In_ int _ s32 D_8012D280 = 1; -static ControllerCallback controllerCallback; - OSMesgQueue* PadMgr_LockSerialMesgQueue(PadMgr* padMgr) { OSMesgQueue* ctrlrQ = NULL; @@ -296,25 +294,27 @@ void PadMgr_ProcessInputs(PadMgr* padMgr) { input->press.stick_y += (s8)(input->cur.stick_y - input->prev.stick_y); } - controllerCallback.rumble = (padMgr->rumbleEnable[0] > 0); + uint8_t rumble = (padMgr->rumbleEnable[0] > 0); + uint8_t ledColor = 1; if (HealthMeter_IsCritical()) { - controllerCallback.ledColor = 0; + ledColor = 0; } else if (gPlayState) { switch (CUR_EQUIP_VALUE(EQUIP_TUNIC) - 1) { case PLAYER_TUNIC_KOKIRI: - controllerCallback.ledColor = 1; + ledColor = 1; break; case PLAYER_TUNIC_GORON: - controllerCallback.ledColor = 2; + ledColor = 2; break; case PLAYER_TUNIC_ZORA: - controllerCallback.ledColor = 3; + ledColor = 3; break; } } - OTRControllerCallback(&controllerCallback); + OTRControllerCallback(rumble, ledColor); + if (CVarGetInteger("gPauseBufferBlockInputFrame", 0)) { Controller_BlockGameInput(); } else {