Should actually fix the unpluggin problem, also reset Dual analog state when reconnected, in case a normal controller is connected

This commit is contained in:
Soniccd123
2024-12-23 02:59:36 -03:00
committed by Stefanos Kornilios Mitsis Poiitidis
parent 76c5fae015
commit 267f39b9fd

View File

@@ -1167,6 +1167,11 @@ void CPad::ProcessPCSpecificStuff(void)
;
}
void attachtest (maple_device_t *dev)
{
CPad::GetPad(0)->IsDualAnalog = false;
}
void CPad::Update(int16 pad)
{
OldState = NewState;
@@ -1433,30 +1438,64 @@ void CPad::Update(int16 pad)
#endif
{
#ifdef RW_DC
if (((NewState.RightStickY > 64 && OldState.RightStickY > 64)) || ((NewState.RightStickY) < -64 && (OldState.RightStickY < -64)))
{
// if (contMaple == nullptr)
// CPad::GetPad(0)->IsDualAnalog = false;
// else
CPad::GetPad(0)->IsDualAnalog = true;
}
//CPad::IsDualAnalog = cont_has_capabilities(contMaple, CONT_CAPABILITIES_DUAL_ANALOG); //Query controller about Dual analog capabilities
if (pad == 0)
{
NewState.DPadUp = state->dpad_up; //This part could be inside a compiler directive to preserve the old code and just use this block if compil
NewState.DPadDown = state->dpad_down; //I also changed CControllerState inside Pad.h and created these values for DC controllers
NewState.DPadLeft = state->dpad_left;
NewState.DPadRight = state->dpad_right;
NewState.A = state->a;
NewState.B = state->b;
NewState.C = state->c;
NewState.D = state->d;
NewState.X = state->x;
NewState.Y = state->y;
NewState.Z = state->z;
NewState.Start = state->start;
NewState.RightTrigger = state->rtrig;
NewState.LeftTrigger = state->ltrig;
NewState.LeftStickX = state->joyx;
NewState.LeftStickY = state->joyy;
NewState.RightStickX = state->joy2x;
NewState.RightStickY = state->joy2y;
NewState.RightShock = state->dpad_left;
if (contMaple == NULL)
{
CPad::GetPad(0)->IsDualAnalog = false;
NewState.DPadUp = 0;
NewState.DPadDown = 0;
NewState.DPadLeft = 0;
NewState.DPadRight = 0;
NewState.A = 0;
NewState.B = 0;
NewState.C = 0;
NewState.D = 0;
NewState.X = 0;
NewState.Y = 0;
NewState.Z = 0;
NewState.Start = 0;
NewState.RightTrigger = 0;
NewState.LeftTrigger = 0;
NewState.LeftStickX = 0;
NewState.LeftStickY = 0;
NewState.RightStickX = 0;
NewState.RightStickY = 0;
NewState.RightShock = 0;
}
else
{
NewState.DPadUp = state->dpad_up; //This part could be inside a compiler directive to preserve the old code and just use this block if compil
NewState.DPadDown = state->dpad_down; //I also changed CControllerState inside Pad.h and created these values for DC controllers
NewState.DPadLeft = state->dpad_left;
NewState.DPadRight = state->dpad_right;
NewState.A = state->a;
NewState.B = state->b;
NewState.C = state->c;
NewState.D = state->d;
NewState.X = state->x;
NewState.Y = state->y;
NewState.Z = state->z;
NewState.Start = state->start;
NewState.RightTrigger = state->rtrig;
NewState.LeftTrigger = state->ltrig;
NewState.LeftStickX = state->joyx;
NewState.LeftStickY = state->joyy;
NewState.RightStickX = state->joy2x;
NewState.RightStickY = state->joy2y;
NewState.RightShock = state->dpad_left;
}
}
else
@@ -1482,32 +1521,29 @@ void CPad::Update(int16 pad)
NewState.RightShock = 0;
}
auto contMaple = maple_enum_type(0, MAPLE_FUNC_CONTROLLER);
auto state = (cont_state_t *)maple_dev_status(contMaple);
if (contMaple == nullptr)
{
//CPad::GetPad(0)->IsDualAnalog = false;
NewState.DPadUp = 0;
NewState.DPadDown = 0;
NewState.DPadLeft = 0;
NewState.DPadRight = 0;
NewState.A = 0;
NewState.B = 0;
NewState.C = 0;
NewState.D = 0;
NewState.X = 0;
NewState.Y = 0;
NewState.Z = 0;
NewState.Start = 0;
NewState.RightTrigger = 0;
NewState.LeftTrigger = 0;
NewState.LeftStickX = 0;
NewState.LeftStickY = 0;
NewState.RightStickX = 0;
NewState.RightStickY = 0;
NewState.RightShock = 0;
}
// if (old_contMaple == nullptr && contMaple != nullptr)
// {
// CPad::GetPad(0)->IsDualAnalog = false;
// NewState.DPadUp = 0;
// NewState.DPadDown = 0;
// NewState.DPadLeft = 0;
// NewState.DPadRight = 0;
// NewState.A = 0;
// NewState.B = 0;
// NewState.C = 0;
// NewState.D = 0;
// NewState.X = 0;
// NewState.Y = 0;
// NewState.Z = 0;
// NewState.Start = 0;
// NewState.RightTrigger = 0;
// NewState.LeftTrigger = 0;
// NewState.LeftStickX = 0;
// NewState.LeftStickY = 0;
// NewState.RightStickX = 0;
// NewState.RightStickY = 0;
// NewState.RightShock = 0;
// }
#else
NewState = ReconcileTwoControllersInput(PCTempKeyState, PCTempJoyState);
@@ -1526,21 +1562,44 @@ void CPad::Update(int16 pad)
bHornHistory[iCurrHornHistory] = GetHorn();
#ifdef RW_DC
if (((NewState.RightStickY > 64 && OldState.RightStickY > 64)) || ((NewState.RightStickY) < -64 && (OldState.RightStickY < -64)))
{
if (contMaple == nullptr)
CPad::GetPad(0)->IsDualAnalog = false;
else
CPad::GetPad(0)->IsDualAnalog = true;
}
#endif
#ifdef RW_DC
auto old_contMaple = contMaple;
auto n_dev = maple_enum_count();
contMaple = maple_enum_type(0, MAPLE_FUNC_CONTROLLER);
state = (cont_state_t *)maple_dev_status(contMaple);
#endif
// if (n_dev == 0)
// {
// CPad::GetPad(0)->IsDualAnalog = false;
// NewState.DPadUp = 0;
// NewState.DPadDown = 0;
// NewState.DPadLeft = 0;
// NewState.DPadRight = 0;
// NewState.A = 0;
// NewState.B = 0;
// NewState.C = 0;
// NewState.D = 0;
// NewState.X = 0;
// NewState.Y = 0;
// NewState.Z = 0;
// NewState.Start = 0;
// NewState.RightTrigger = 0;
// NewState.LeftTrigger = 0;
// NewState.LeftStickX = 0;
// NewState.LeftStickY = 0;
// NewState.RightStickX = 0;
// NewState.RightStickY = 0;
// NewState.RightShock = 0;
// }
if ( !bDisplayNoControllerMessage )
CGame::bDemoMode = false;
}
void CPad::DoCheats(void)
{
#ifdef DETECT_PAD_INPUT_SWITCH