Compare commits

...

2 Commits

Author SHA1 Message Date
mark wallace
d0ea5f41be - Added static const int DUCK_DELAY_FRAMES = 30 to define the delay (1 second at 30 FPS).
- Added `int duckFrameCounter` to track frames the duck button is held.
  - Added `bool isDucking` to track crouch state and prevent re-triggering.
  - Updated `CPad` constructor to initialize `duckFrameCounter` and `isDucking`.
2025-03-30 18:37:55 +00:00
mark wallace
f7d23f3bb3 Modified CPad::DuckJustDown to use a frame counter for a 1-second delay. 2025-03-30 18:35:13 +00:00
2 changed files with 53 additions and 25 deletions

View File

@@ -3881,36 +3881,49 @@ bool CPad::CollectPickupJustDown(void)
return false; return false;
} }
bool CPad::DuckJustDown(void) bool CPad::DuckJustDown(void)
{ {
if (ArePlayerControlsDisabled()) if (ArePlayerControlsDisabled()) {
duckFrameCounter = 0;
return false; return false;
}
#ifdef RW_DC #ifdef RW_DC
switch (CPad::GetPad(0)->Mode) bool buttonPressed = false;
{ switch (CPad::GetPad(0)->Mode) {
case 0: //Xbox Mode case 0: // Xbox Mode
if (CPad::GetPad(0)->IsDualAnalog) buttonPressed = NewState.X;
{ break;
return !!(NewState.X&& !OldState.X); case 1: // PS2 Mode
} buttonPressed = NewState.X;
else break;
{ }
return !!(NewState.X&& !OldState.X);
} if (buttonPressed) {
case 1: //PS2 Mode duckFrameCounter++;
if (CPad::GetPad(0)->IsDualAnalog) if (duckFrameCounter >= DUCK_DELAY_FRAMES && !isDucking) {
{ isDucking = true;
return !!(NewState.X&& !OldState.X); return true; // Trigger ducking after delay
} }
else } else {
{ duckFrameCounter = 0;
return !!(NewState.X&& !OldState.X); isDucking = false;
}
} }
return false; return false;
#else #else
return !!(NewState.LeftShock && !OldState.LeftShock); bool buttonPressed = NewState.Square;
if (buttonPressed) {
duckFrameCounter++;
if (duckFrameCounter >= DUCK_DELAY_FRAMES && !isDucking) {
isDucking = true;
return true;
}
} else {
duckFrameCounter = 0;
isDucking = false;
}
return false;
#endif #endif
} }

View File

@@ -173,11 +173,26 @@ public:
uint32 CameraJustUpTime; uint32 CameraJustUpTime;
uint32 CameraLastPressed; uint32 CameraLastPressed;
bool CameraIsDoublePressed; bool CameraIsDoublePressed;
static const int DUCK_DELAY_FRAMES = 30; // 1 second at 30 FPS
int duckFrameCounter; // Frames the duck button has been held
bool isDucking; // Tracks if duck action is active
#ifdef DETECT_PAD_INPUT_SWITCH #ifdef DETECT_PAD_INPUT_SWITCH
static bool IsAffectedByController; static bool IsAffectedByController;
#endif #endif
CPad() { }
CPad() : duckFrameCounter(0), isDucking(false), // New variables initialized
SteeringLeftRightBuffer{0}, DrunkDrivingBufferUsed(0), Phase(0), Mode(0),
ShakeDur(0), DisablePlayerControls(0), ShakeFreq(0), iCurrHornHistory(0),
JustOutOfFrontend(0), bApplyBrakes(0), LastTimeTouched(0), AverageWeapon(0),
AverageEntries(0), IsKeyboardMouse(false), IsDualAnalog(false),
CameraJustDown(false), CameraJustUp(false), CameraJustUpTime(0),
CameraLastPressed(0), CameraIsDoublePressed(false) {
Clear(false);
memset(bHornHistory, 0, sizeof(bHornHistory));
memset(CheatString, 0, sizeof(CheatString));
}
~CPad() { } ~CPad() { }
static bool bDisplayNoControllerMessage; static bool bDisplayNoControllerMessage;