Implement contoller analog 0 in menus very hackishly

git-svn-id: https://svn.eduke32.com/eduke32@7970 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2019-08-13 09:15:58 +00:00 committed by Christoph Oelckers
parent e19511cad7
commit 791f8376b6
4 changed files with 62 additions and 2 deletions

View file

@ -169,6 +169,7 @@ int32_t I_MenuUp(void)
|| BUTTON(gamefunc_Move_Forward) || BUTTON(gamefunc_Move_Forward)
|| (JOYSTICK_GetHat(0)&HAT_UP) || (JOYSTICK_GetHat(0)&HAT_UP)
|| (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_UP)) || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_UP))
|| CONTROL_GetGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTY)
; ;
} }
@ -180,6 +181,7 @@ void I_MenuUpClear(void)
CONTROL_ClearButton(gamefunc_Move_Forward); CONTROL_ClearButton(gamefunc_Move_Forward);
JOYSTICK_ClearHat(0); JOYSTICK_ClearHat(0);
JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_UP); JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_UP);
CONTROL_ClearGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTY);
} }
@ -192,6 +194,7 @@ int32_t I_MenuDown(void)
|| BUTTON(gamefunc_Move_Backward) || BUTTON(gamefunc_Move_Backward)
|| (JOYSTICK_GetHat(0)&HAT_DOWN) || (JOYSTICK_GetHat(0)&HAT_DOWN)
|| (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_DOWN)) || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_DOWN))
|| CONTROL_GetGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTY)
; ;
} }
@ -204,6 +207,7 @@ void I_MenuDownClear(void)
CONTROL_ClearButton(gamefunc_Move_Backward); CONTROL_ClearButton(gamefunc_Move_Backward);
JOYSTICK_ClearHat(0); JOYSTICK_ClearHat(0);
JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_DOWN); JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_DOWN);
CONTROL_ClearGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTY);
} }
@ -217,6 +221,7 @@ int32_t I_MenuLeft(void)
|| BUTTON(gamefunc_Strafe_Left) || BUTTON(gamefunc_Strafe_Left)
|| (JOYSTICK_GetHat(0)&HAT_LEFT) || (JOYSTICK_GetHat(0)&HAT_LEFT)
|| (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_LEFT)) || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_LEFT))
|| CONTROL_GetGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTX)
; ;
} }
@ -229,6 +234,7 @@ void I_MenuLeftClear(void)
CONTROL_ClearButton(gamefunc_Strafe_Left); CONTROL_ClearButton(gamefunc_Strafe_Left);
JOYSTICK_ClearHat(0); JOYSTICK_ClearHat(0);
JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_LEFT); JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_LEFT);
CONTROL_ClearGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTX);
} }
@ -243,6 +249,7 @@ int32_t I_MenuRight(void)
|| (MOUSE_GetButtons()&MIDDLE_MOUSE) || (MOUSE_GetButtons()&MIDDLE_MOUSE)
|| (JOYSTICK_GetHat(0)&HAT_RIGHT) || (JOYSTICK_GetHat(0)&HAT_RIGHT)
|| (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_RIGHT)) || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_RIGHT))
|| CONTROL_GetGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTX)
; ;
} }
@ -256,6 +263,7 @@ void I_MenuRightClear(void)
MOUSE_ClearButton(MIDDLE_MOUSE); MOUSE_ClearButton(MIDDLE_MOUSE);
JOYSTICK_ClearHat(0); JOYSTICK_ClearHat(0);
JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_RIGHT); JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_RIGHT);
CONTROL_ClearGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTX);
} }

View file

@ -172,6 +172,7 @@ typedef struct
{ {
int32_t analog; int32_t analog;
int32_t digital; int32_t digital;
int16_t digitalClearedN, digitalClearedP;
} controlaxistype; } controlaxistype;

View file

@ -198,6 +198,11 @@ void CONTROL_MapAnalogAxis(int whichaxis, int whichanalog, controldevice device)
void CONTROL_MapDigitalAxis(int32_t whichaxis, int32_t whichfunction, int32_t direction, controldevice device); void CONTROL_MapDigitalAxis(int32_t whichaxis, int32_t whichfunction, int32_t direction, controldevice device);
void CONTROL_SetAnalogAxisScale(int32_t whichaxis, int32_t axisscale, controldevice device); void CONTROL_SetAnalogAxisScale(int32_t whichaxis, int32_t axisscale, controldevice device);
int32_t CONTROL_GetGameControllerDigitalAxisPos(int32_t axis);
int32_t CONTROL_GetGameControllerDigitalAxisNeg(int32_t axis);
void CONTROL_ClearGameControllerDigitalAxisPos(int32_t axis);
void CONTROL_ClearGameControllerDigitalAxisNeg(int32_t axis);
//void CONTROL_PrintKeyMap(void); //void CONTROL_PrintKeyMap(void);
//void CONTROL_PrintControlFlag(int32_t which); //void CONTROL_PrintControlFlag(int32_t which);
//void CONTROL_PrintAxes( void ); //void CONTROL_PrintAxes( void );

View file

@ -538,15 +538,31 @@ static void CONTROL_DigitizeAxis(int axis, controldevice device)
default: return; default: return;
} }
set[axis].digitalClearedN = lastset[axis].digitalClearedN;
set[axis].digitalClearedP = lastset[axis].digitalClearedP;
if (set[axis].analog > 0) if (set[axis].analog > 0)
{ {
set[axis].digitalClearedN = 0;
if (set[axis].analog > THRESHOLD || (set[axis].analog > MINTHRESHOLD && lastset[axis].digital == 1)) if (set[axis].analog > THRESHOLD || (set[axis].analog > MINTHRESHOLD && lastset[axis].digital == 1))
set[axis].digital = 1; set[axis].digital = 1;
else
set[axis].digitalClearedP = 0;
}
else if (set[axis].analog < 0)
{
set[axis].digitalClearedP = 0;
if (set[axis].analog < -THRESHOLD || (set[axis].analog < -MINTHRESHOLD && lastset[axis].digital == -1))
set[axis].digital = -1;
else
set[axis].digitalClearedN = 0;
} }
else else
{ {
if (set[axis].analog < -THRESHOLD || (set[axis].analog < -MINTHRESHOLD && lastset[axis].digital == -1)) set[axis].digitalClearedN = 0;
set[axis].digital = -1; set[axis].digitalClearedP = 0;
} }
} }
@ -744,6 +760,36 @@ void CONTROL_ClearAllButtons(void)
c.cleared = TRUE; c.cleared = TRUE;
} }
int32_t CONTROL_GetGameControllerDigitalAxisPos(int32_t axis)
{
if (!joystick.isGameController)
return 0;
return CONTROL_JoyAxes[axis].digital > 0 && !CONTROL_JoyAxes[axis].digitalClearedP;
}
int32_t CONTROL_GetGameControllerDigitalAxisNeg(int32_t axis)
{
if (!joystick.isGameController)
return 0;
return CONTROL_JoyAxes[axis].digital < 0 && !CONTROL_JoyAxes[axis].digitalClearedN;
}
void CONTROL_ClearGameControllerDigitalAxisPos(int32_t axis)
{
if (!joystick.isGameController)
return;
CONTROL_JoyAxes[axis].digitalClearedP = 1;
}
void CONTROL_ClearGameControllerDigitalAxisNeg(int32_t axis)
{
if (!joystick.isGameController)
return;
CONTROL_JoyAxes[axis].digitalClearedN = 1;
}
void CONTROL_ProcessBinds(void) void CONTROL_ProcessBinds(void)
{ {
if (!CONTROL_BindsEnabled) if (!CONTROL_BindsEnabled)