2 Commits
Author SHA1 Message Date
str1k3r 570752a7a5 fix: checking for touchpad on all controllers 2026-09-17 19:13:52 -04:00
str1k3r f85bdd8a45 feat: SDL3 for rumble & PS touchpad thingy 2026-09-14 21:27:48 -04:00
4 changed files with 27 additions and 12 deletions
+11 -9
View File
@@ -23,6 +23,7 @@ SOFTWARE.
*/ */
#include "INP_ForceFeedback.h" #include "INP_ForceFeedback.h"
#include "INP_Main.h"
void CForceFeedback::Initialise(int iInputStateC, unsigned char ucMapC, unsigned char ucActionC, unsigned char ucMenuActionC) void CForceFeedback::Initialise(int iInputStateC, unsigned char ucMapC, unsigned char ucActionC, unsigned char ucMenuActionC)
{ {
@@ -85,8 +86,8 @@ void CForceFeedback::AddRumble(unsigned int uiPad, WORD leftMotorSpeed, WORD rig
QueryPerformanceCounter(&qwCurrentTime); QueryPerformanceCounter(&qwCurrentTime);
pRumble->m_TimeLeft = (m_TicksPerSecond * fSeconds) + qwCurrentTime.QuadPart; pRumble->m_TimeLeft = (m_TicksPerSecond * fSeconds) + qwCurrentTime.QuadPart;
pRumble->m_RumbleData.wLeftMotorSpeed = leftMotorSpeed; pRumble->m_LowFreqRumble = leftMotorSpeed;
pRumble->m_RumbleData.wRightMotorSpeed = rightMotorSpeed; pRumble->m_HighFreqRumble = rightMotorSpeed;
pRumble->m_Pad = uiPad; pRumble->m_Pad = uiPad;
m_RumbleList.AddToTail(pRumble); m_RumbleList.AddToTail(pRumble);
@@ -108,14 +109,15 @@ void CForceFeedback::Tick(void)
LinkedList::_LL_NODE *pRumbleNode = m_RumbleList.m_Head; LinkedList::_LL_NODE *pRumbleNode = m_RumbleList.m_Head;
while (pRumbleNode) while (pRumbleNode)
{ {
if (pRumbleNode->GetDataAs<RUMBLE_EFFECT>()->m_TimeLeft <= qwCurrentTime.QuadPart) RUMBLE_EFFECT *pRumble = pRumbleNode->GetDataAs<RUMBLE_EFFECT>();
SDL_Gamepad* m_pGamepad = InternalInputManager.m_Joypads[pRumble->m_Pad].m_pGamepad;
if (pRumble->m_TimeLeft <= qwCurrentTime.QuadPart)
{ {
RUMBLE_EFFECT *pRumble = pRumbleNode->GetDataAs<RUMBLE_EFFECT>(); pRumble->m_LowFreqRumble = 0;
pRumble->m_HighFreqRumble = 0;
pRumble->m_RumbleData.wLeftMotorSpeed = 0; if (m_pGamepad != nullptr) SDL_RumbleGamepad(m_pGamepad, 0, 0, 0);
pRumble->m_RumbleData.wRightMotorSpeed = 0;
XInputSetState(pRumble->m_Pad, &pRumble->m_RumbleData);
m_RumbleList.RemoveNode(pRumbleNode); m_RumbleList.RemoveNode(pRumbleNode);
@@ -127,7 +129,7 @@ void CForceFeedback::Tick(void)
} }
else else
{ {
XInputSetState(pRumbleNode->GetDataAs<RUMBLE_EFFECT>()->m_Pad, &pRumbleNode->GetDataAs<RUMBLE_EFFECT>()->m_RumbleData); if (m_pGamepad != nullptr) SDL_RumbleGamepad(m_pGamepad, pRumble->m_LowFreqRumble, pRumble->m_HighFreqRumble, 30000);
pRumbleNode = pRumbleNode->m_Next; pRumbleNode = pRumbleNode->m_Next;
} }
} }
+4 -2
View File
@@ -24,6 +24,7 @@ SOFTWARE.
*/ */
#include "LinkedList.h" #include "LinkedList.h"
#include "SDL3\SDL_gamepad.h"
#define MAX_EFFECTS 10 #define MAX_EFFECTS 10
@@ -38,9 +39,10 @@ public:
struct RUMBLE_EFFECT struct RUMBLE_EFFECT
{ {
DWORD m_Pad; int m_Pad;
uint64_t m_TimeLeft; uint64_t m_TimeLeft;
XINPUT_VIBRATION m_RumbleData; uint16_t m_LowFreqRumble;
uint16_t m_HighFreqRumble;
WORD unk; WORD unk;
}; };
+9
View File
@@ -148,6 +148,15 @@ void CInput::SetJoypadValues(JOYPAD *pThisPad)
pThisPad->m_uiButtons |= _360_JOY_BUTTON_BACK; pThisPad->m_uiButtons |= _360_JOY_BUTTON_BACK;
} }
//str1k3r - Only check the touchpad if we have one
if (SDL_GetNumGamepadTouchpads(pGamePad) > 0)
{
if (SDL_GetGamepadButton(pGamePad, SDL_GAMEPAD_BUTTON_TOUCHPAD))
{
pThisPad->m_uiButtons |= _PS_JOY_BUTTON_TOUCHPAD;
}
}
if (SDL_GetGamepadButton(pGamePad, SDL_GAMEPAD_BUTTON_LEFT_STICK)) if (SDL_GetGamepadButton(pGamePad, SDL_GAMEPAD_BUTTON_LEFT_STICK))
{ {
pThisPad->m_uiButtons |= _360_JOY_BUTTON_LTHUMB; pThisPad->m_uiButtons |= _360_JOY_BUTTON_LTHUMB;
+3 -1
View File
@@ -1,6 +1,5 @@
#pragma once #pragma once
#define MAP_STYLE_0 0 #define MAP_STYLE_0 0
#define MAP_STYLE_1 1 #define MAP_STYLE_1 1
#define MAP_STYLE_2 2 #define MAP_STYLE_2 2
@@ -36,6 +35,9 @@
#define _360_JOY_BUTTON_RT 0x00400000 #define _360_JOY_BUTTON_RT 0x00400000
#define _360_JOY_BUTTON_LT 0x00800000 #define _360_JOY_BUTTON_LT 0x00800000
//str1k3r - DualShock 4 / DualSense Touchpad
#define _PS_JOY_BUTTON_TOUCHPAD _360_JOY_BUTTON_BACK
// Stick axis maps - to allow changes for SouthPaw in-game axis mapping // Stick axis maps - to allow changes for SouthPaw in-game axis mapping
#define AXIS_MAP_LX 0 #define AXIS_MAP_LX 0
#define AXIS_MAP_LY 1 #define AXIS_MAP_LY 1