mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-10 18:12:46 +00:00
Add PF_ANALOGSTICK, tells if this player has bound analog stick to d-pad
This commit is contained in:
parent
abaa237b08
commit
b452232974
6 changed files with 52 additions and 3 deletions
|
|
@ -1235,6 +1235,7 @@ enum {
|
|||
WP_KICKSTARTACCEL = 1<<0,
|
||||
WP_SHRINKME = 1<<1,
|
||||
WP_AUTOROULETTE = 1<<2,
|
||||
WP_ANALOGSTICK = 1<<3,
|
||||
};
|
||||
|
||||
void WeaponPref_Send(UINT8 ssplayer)
|
||||
|
|
@ -1250,6 +1251,9 @@ void WeaponPref_Send(UINT8 ssplayer)
|
|||
if (cv_shrinkme[ssplayer].value)
|
||||
prefs |= WP_SHRINKME;
|
||||
|
||||
if (gamecontrolflags[ssplayer] & GCF_ANALOGSTICK)
|
||||
prefs |= WP_ANALOGSTICK;
|
||||
|
||||
SendNetXCmdForPlayer(ssplayer, XD_WEAPONPREF, &prefs, 1);
|
||||
}
|
||||
|
||||
|
|
@ -1268,6 +1272,9 @@ void WeaponPref_Save(UINT8 **cp, INT32 playernum)
|
|||
if (player->pflags & PF_SHRINKME)
|
||||
prefs |= WP_SHRINKME;
|
||||
|
||||
if (player->pflags & PF_ANALOGSTICK)
|
||||
prefs |= WP_ANALOGSTICK;
|
||||
|
||||
WRITEUINT8(*cp, prefs);
|
||||
}
|
||||
|
||||
|
|
@ -1289,6 +1296,11 @@ size_t WeaponPref_Parse(const UINT8 *bufstart, INT32 playernum)
|
|||
if (prefs & WP_SHRINKME)
|
||||
player->pflags |= PF_SHRINKME;
|
||||
|
||||
if (prefs & WP_ANALOGSTICK)
|
||||
player->pflags |= PF_ANALOGSTICK;
|
||||
else
|
||||
player->pflags &= ~PF_ANALOGSTICK;
|
||||
|
||||
if (leveltime < 2)
|
||||
{
|
||||
// BAD HACK: No other place I tried to slot this in
|
||||
|
|
|
|||
|
|
@ -103,7 +103,9 @@ typedef enum
|
|||
|
||||
PF_RINGLOCK = 1<<13, // Prevent picking up rings while SPB is locked on
|
||||
|
||||
//14-17 free, was previously itemflags stuff
|
||||
PF_ANALOGSTICK = 1<<14, // This player is using an analog joystick
|
||||
|
||||
//15-17 free, was previously itemflags stuff
|
||||
|
||||
PF_DRIFTINPUT = 1<<18, // Drifting!
|
||||
PF_GETSPARKS = 1<<19, // Can get sparks
|
||||
|
|
|
|||
|
|
@ -3994,7 +3994,7 @@ const char *const PLAYERFLAG_LIST[] = {
|
|||
|
||||
"RINGLOCK", // Prevent picking up rings while SPB is locked on
|
||||
|
||||
"\x01", // Free
|
||||
"ANALOGSTICK", // This player is using an analog joystick
|
||||
"\x01", // Free
|
||||
"\x01", // Free
|
||||
"\x01", // Free
|
||||
|
|
|
|||
|
|
@ -2189,7 +2189,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
totalring = players[player].totalring;
|
||||
xtralife = players[player].xtralife;
|
||||
|
||||
pflags = (players[player].pflags & (PF_WANTSTOJOIN|PF_KICKSTARTACCEL|PF_SHRINKME|PF_SHRINKACTIVE|PF_AUTOROULETTE));
|
||||
pflags = (players[player].pflags & (PF_WANTSTOJOIN|PF_KICKSTARTACCEL|PF_SHRINKME|PF_SHRINKACTIVE|PF_AUTOROULETTE|PF_ANALOGSTICK));
|
||||
|
||||
// SRB2kart
|
||||
memcpy(&itemRoulette, &players[player].itemRoulette, sizeof (itemRoulette));
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
|
|||
|
||||
// two key codes (or virtual key) per game control
|
||||
INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
|
||||
UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS];
|
||||
INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
|
||||
INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
|
||||
|
||||
|
|
@ -963,9 +964,37 @@ void G_DefineDefaultControls(void)
|
|||
menucontrolreserved[gc_start][0] = KEY_ESCAPE; // Handled special
|
||||
}
|
||||
|
||||
static boolean G_ControlUsesAxis(INT32 map[MAXINPUTMAPPING])
|
||||
{
|
||||
for (INT32 i = 0; i < MAXINPUTMAPPING; i++)
|
||||
{
|
||||
INT32 key = map[i];
|
||||
if (key >= KEY_AXIS1 && key < JOYINPUTEND)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void G_ApplyControlScheme(UINT8 splitplayer, INT32 (*fromcontrols)[MAXINPUTMAPPING])
|
||||
{
|
||||
UINT8 flags = 0;
|
||||
|
||||
if (G_ControlUsesAxis(fromcontrols[gc_up]) ||
|
||||
G_ControlUsesAxis(fromcontrols[gc_down]) ||
|
||||
G_ControlUsesAxis(fromcontrols[gc_left]) ||
|
||||
G_ControlUsesAxis(fromcontrols[gc_right]))
|
||||
{
|
||||
flags |= GCF_ANALOGSTICK;
|
||||
}
|
||||
|
||||
memcpy(gamecontrol[splitplayer], fromcontrols, sizeof gamecontrol[splitplayer]);
|
||||
gamecontrolflags[splitplayer] = flags;
|
||||
|
||||
if (Playing())
|
||||
WeaponPref_Send(splitplayer); // update PF_ANALOGSTICK
|
||||
}
|
||||
|
||||
void G_SaveKeySetting(FILE *f, INT32 (*fromcontrolsa)[MAXINPUTMAPPING], INT32 (*fromcontrolsb)[MAXINPUTMAPPING], INT32 (*fromcontrolsc)[MAXINPUTMAPPING], INT32 (*fromcontrolsd)[MAXINPUTMAPPING])
|
||||
|
|
|
|||
|
|
@ -100,6 +100,11 @@ typedef enum
|
|||
gc_drift = gc_r,
|
||||
} gamecontrols_e;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GCF_ANALOGSTICK = 1 << 0,
|
||||
} gamecontrol_flags_e;
|
||||
|
||||
// mouse values are used once
|
||||
extern consvar_t cv_controlperkey;
|
||||
|
||||
|
|
@ -113,6 +118,7 @@ extern INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
|
|||
|
||||
// several key codes (or virtual key) per game control
|
||||
extern INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
|
||||
extern UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS];
|
||||
extern INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
|
||||
extern INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue