Added GetPlayerInput(int numinput, int ptr = AAPTR_PLAYER1).

- Works exactly like the ACS version, but with pointers instead. The pointer can be anything, so long as it can be identified as a player.
This commit is contained in:
MajorCooke 2016-06-20 08:49:57 -05:00
commit 85a34bbb88
5 changed files with 142 additions and 25 deletions

View file

@ -4190,31 +4190,6 @@ bool DLevelScript::DoCheckActorTexture(int tid, AActor *activator, int string, b
return tex == TexMan[secpic];
}
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)
{

View file

@ -162,6 +162,31 @@ void InitSpawnablesFromMapinfo();
int P_Thing_Warp(AActor *caller, AActor *reference, double xofs, double yofs, double zofs, DAngle angle, int flags, double heightoffset, double radiusoffset, DAngle pitch);
bool P_Thing_CheckProximity(AActor *self, PClass *classname, double distance, int count, int flags, int ptr);
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
};
enum CPXF
{
CPXF_ANCESTOR = 1 << 0,

View file

@ -543,6 +543,63 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, GetCVar)
return 0;
}
//==========================================================================
//
// GetPlayerInput
//
// NON-ACTION function that works like ACS's GetPlayerInput.
// Takes a pointer as anyone may or may not be a player.
//==========================================================================
DEFINE_ACTION_FUNCTION_PARAMS(AActor, GetPlayerInput)
{
if (numret > 0)
{
assert(ret != nullptr);
PARAM_SELF_PROLOGUE(AActor);
PARAM_INT (inputnum);
PARAM_INT_OPT (ptr) { ptr = AAPTR_PLAYER1; }
AActor *mobj = COPY_AAPTR(self, ptr);
//Need a player.
if (!mobj || !mobj->player)
{
ret->SetInt(0);
}
else
{
player_t *p = mobj->player;
int renum = 0;
switch (inputnum)
{
case INPUT_OLDBUTTONS: renum = p->original_oldbuttons; break;
case INPUT_BUTTONS: renum = p->original_cmd.buttons; break;
case INPUT_PITCH: renum = p->original_cmd.pitch; break;
case INPUT_YAW: renum = p->original_cmd.yaw; break;
case INPUT_ROLL: renum = p->original_cmd.roll; break;
case INPUT_FORWARDMOVE: renum = p->original_cmd.forwardmove; break;
case INPUT_SIDEMOVE: renum = p->original_cmd.sidemove; break;
case INPUT_UPMOVE: renum = p->original_cmd.upmove; break;
case MODINPUT_OLDBUTTONS: renum = p->oldbuttons; break;
case MODINPUT_BUTTONS: renum = p->cmd.ucmd.buttons; break;
case MODINPUT_PITCH: renum = p->cmd.ucmd.pitch; break;
case MODINPUT_YAW: renum = p->cmd.ucmd.yaw; break;
case MODINPUT_ROLL: renum = p->cmd.ucmd.roll; break;
case MODINPUT_FORWARDMOVE: renum = p->cmd.ucmd.forwardmove; break;
case MODINPUT_SIDEMOVE: renum = p->cmd.ucmd.sidemove; break;
case MODINPUT_UPMOVE: renum = p->cmd.ucmd.upmove; break;
default: renum = 0; break;
}
ret->SetInt(renum);
}
return 1;
}
return 0;
}
//===========================================================================
//
// __decorate_internal_state__