mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
G_PlayerInputAnalog: Only attempt default binds for menu if no binds are reachable by GetValueFromControlTable for that button
- GetValueFromControlTable: Return 0 only if a single G_KeyIsAvailable returns true for any bind
- Otherwise returns NO_BINDS_REACHABLE -- #define'd as (-1)
- Does not cover the `menucontrolreserved` check, which could maybe be moved to the opposite end of the function if it causes problems.
This commit is contained in:
parent
22294c2c4d
commit
1acf00daa6
2 changed files with 26 additions and 7 deletions
32
src/g_game.c
32
src/g_game.c
|
|
@ -870,12 +870,12 @@ INT16 G_SoftwareClipAimingPitch(INT32 *aiming)
|
|||
|
||||
static INT32 G_GetValueFromControlTable(INT32 deviceID, INT32 deadzone, INT32 *controltable)
|
||||
{
|
||||
INT32 i;
|
||||
INT32 i, failret = NO_BINDS_REACHABLE;
|
||||
|
||||
if (deviceID <= UNASSIGNED_DEVICE)
|
||||
{
|
||||
// An invalid device can't have any binds!
|
||||
return 0;
|
||||
return failret;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXINPUTMAPPING; i++)
|
||||
|
|
@ -895,10 +895,12 @@ static INT32 G_GetValueFromControlTable(INT32 deviceID, INT32 deadzone, INT32 *c
|
|||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
failret = 0;
|
||||
}
|
||||
|
||||
// Not pressed.
|
||||
return 0;
|
||||
return failret;
|
||||
}
|
||||
|
||||
INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
|
||||
|
|
@ -911,6 +913,7 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
|
|||
INT32 value = -1;
|
||||
INT32 avail_gamepad_id = 0;
|
||||
INT32 i;
|
||||
boolean bind_was_reachable = false;
|
||||
|
||||
if (p >= MAXSPLITSCREENPLAYERS)
|
||||
{
|
||||
|
|
@ -952,6 +955,10 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
|
|||
{
|
||||
return value;
|
||||
}
|
||||
if (value != NO_BINDS_REACHABLE)
|
||||
{
|
||||
bind_was_reachable = true;
|
||||
}
|
||||
|
||||
// If you're on gamepad in 1P, and you didn't have a gamepad bind for this, then try your keyboard binds.
|
||||
if (main_player == true && keyboard_player == -1 && deviceID > KEYBOARD_MOUSE_DEVICE)
|
||||
|
|
@ -961,6 +968,10 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
|
|||
{
|
||||
return value;
|
||||
}
|
||||
if (value != NO_BINDS_REACHABLE)
|
||||
{
|
||||
bind_was_reachable = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (in_menu == true)
|
||||
|
|
@ -997,15 +1008,22 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
|
|||
{
|
||||
return value;
|
||||
}
|
||||
if (value != NO_BINDS_REACHABLE)
|
||||
{
|
||||
bind_was_reachable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Still nothing bound after everything. Try default gamepad controls.
|
||||
value = G_GetValueFromControlTable(deviceID, deadzone, &(gamecontroldefault[gc][0]));
|
||||
if (value > 0)
|
||||
if (bind_was_reachable == false)
|
||||
{
|
||||
return value;
|
||||
// Still nothing bound after everything. Try default gamepad controls.
|
||||
value = G_GetValueFromControlTable(deviceID, deadzone, &(gamecontroldefault[gc][0]));
|
||||
if (value > 0)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ extern consvar_t cv_controlperkey;
|
|||
#define MAXDEVICES (MAXGAMEPADS + 1) // Gamepads + keyboard & mouse
|
||||
#define KEYBOARD_MOUSE_DEVICE (0)
|
||||
#define UNASSIGNED_DEVICE (-1)
|
||||
#define NO_BINDS_REACHABLE (-1)
|
||||
extern INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
|
||||
|
||||
// several key codes (or virtual key) per game control
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue