- Added GetPlayerInput() for examining a player's inputs from ACS. Most
buttons are now passed across the network, and there are four new user buttons specifically for use with this command. Also defined +zoom and +reload for future implementation. See http://zdoom.org/files/examples/playerinput.zip for an example. SVN r1215 (trunk)
This commit is contained in:
parent
4ffa924929
commit
5cd4604f81
14 changed files with 252 additions and 49 deletions
|
|
@ -2382,6 +2382,77 @@ int DLevelScript::GetActorProperty (int tid, int property)
|
|||
}
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
// These are the original inputs sent by the player.
|
||||
INPUT_OLDBUTTONS,
|
||||
INPUT_BUTTONS,
|
||||
INPUT_PITCH,
|
||||
INPUT_YAW,
|
||||
INPUT_ROLL,
|
||||
INPUT_FORWARDMOVE,
|
||||
INPUT_SIDEMOVE,
|
||||
INPUT_UPMOVE,
|
||||
|
||||
// These are the inputs, as modified by P_PlayerThink().
|
||||
// Most of the time, these will match the original inputs, but
|
||||
// they can be different if a player is frozen or using a
|
||||
// chainsaw.
|
||||
MODINPUT_OLDBUTTONS,
|
||||
MODINPUT_BUTTONS,
|
||||
MODINPUT_PITCH,
|
||||
MODINPUT_YAW,
|
||||
MODINPUT_ROLL,
|
||||
MODINPUT_FORWARDMOVE,
|
||||
MODINPUT_SIDEMOVE,
|
||||
MODINPUT_UPMOVE
|
||||
};
|
||||
|
||||
int DLevelScript::GetPlayerInput(int playernum, int inputnum)
|
||||
{
|
||||
player_t *p;
|
||||
|
||||
if (playernum < 0)
|
||||
{
|
||||
p = activator->player;
|
||||
}
|
||||
else if (playernum >= MAXPLAYERS || !playeringame[playernum])
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
p = &players[playernum];
|
||||
}
|
||||
if (p == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (inputnum)
|
||||
{
|
||||
case INPUT_OLDBUTTONS: return p->original_oldbuttons; break;
|
||||
case INPUT_BUTTONS: return p->original_cmd.buttons; break;
|
||||
case INPUT_PITCH: return p->original_cmd.pitch; break;
|
||||
case INPUT_YAW: return p->original_cmd.yaw; break;
|
||||
case INPUT_ROLL: return p->original_cmd.roll; break;
|
||||
case INPUT_FORWARDMOVE: return p->original_cmd.forwardmove; break;
|
||||
case INPUT_SIDEMOVE: return p->original_cmd.sidemove; break;
|
||||
case INPUT_UPMOVE: return p->original_cmd.upmove; break;
|
||||
|
||||
case MODINPUT_OLDBUTTONS: return p->oldbuttons; break;
|
||||
case MODINPUT_BUTTONS: return p->cmd.ucmd.buttons; break;
|
||||
case MODINPUT_PITCH: return p->cmd.ucmd.pitch; break;
|
||||
case MODINPUT_YAW: return p->cmd.ucmd.yaw; break;
|
||||
case MODINPUT_ROLL: return p->cmd.ucmd.roll; break;
|
||||
case MODINPUT_FORWARDMOVE: return p->cmd.ucmd.forwardmove; break;
|
||||
case MODINPUT_SIDEMOVE: return p->cmd.ucmd.sidemove; break;
|
||||
case MODINPUT_UPMOVE: return p->cmd.ucmd.upmove; break;
|
||||
|
||||
default: return 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
#define NEXTWORD (LittleLong(*pc++))
|
||||
#define NEXTBYTE (fmt==ACS_LittleEnhanced?getbyte(pc):NEXTWORD)
|
||||
#define STACK(a) (Stack[sp - (a)])
|
||||
|
|
@ -4946,6 +5017,11 @@ int DLevelScript::RunScript ()
|
|||
sp -= 1;
|
||||
break;
|
||||
|
||||
case PCD_GETPLAYERINPUT:
|
||||
STACK(2) = GetPlayerInput (STACK(2), STACK(1));
|
||||
sp -= 1;
|
||||
break;
|
||||
|
||||
case PCD_PLAYERNUMBER:
|
||||
if (activator == NULL || activator->player == NULL)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue