From ec2222347e8c1974feda1866ac0f6a856a5c169d Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Wed, 21 Sep 2022 20:29:16 -0500 Subject: [PATCH] Fix issue with 'auto' controller setting (#1548) * Fix issue with 'auto' controller setting * Combine inputs rather than overwrite for auto setting * Swap condition checking for zeroed pads --- libultraship/libultraship/Controller.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libultraship/libultraship/Controller.cpp b/libultraship/libultraship/Controller.cpp index 697a7d523..038f9cc06 100644 --- a/libultraship/libultraship/Controller.cpp +++ b/libultraship/libultraship/Controller.cpp @@ -79,7 +79,14 @@ namespace Ship { padBuffer.push_front(padToBuffer); if (pad != nullptr) { - *pad = padBuffer[std::min(padBuffer.size() - 1, (size_t)CVar_GetS32("gSimulatedInputLag", 0))]; + auto &padFromBuffer = padBuffer[std::min(padBuffer.size() - 1, (size_t)CVar_GetS32("gSimulatedInputLag", 0))]; + pad->button |= padFromBuffer.button; + if (pad->stick_x == 0) pad->stick_x = padFromBuffer.stick_x; + if (pad->stick_y == 0) pad->stick_y = padFromBuffer.stick_y; + if (pad->gyro_x == 0) pad->gyro_x = padFromBuffer.gyro_x; + if (pad->gyro_y == 0) pad->gyro_y = padFromBuffer.gyro_y; + if (pad->right_stick_x == 0) pad->right_stick_x = padFromBuffer.right_stick_x; + if (pad->right_stick_y == 0) pad->right_stick_y = padFromBuffer.right_stick_y; } while (padBuffer.size() > 6) {