mirror of
https://gitlab.com/skmp/dca3-game.git
synced 2025-08-01 12:31:04 +02:00
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:

committed by
Stefanos Kornilios Mitsis Poiitidis
parent
76c5fae015
commit
267f39b9fd
167
src/core/Pad.cpp
167
src/core/Pad.cpp
@@ -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
|
||||
|
Reference in New Issue
Block a user