NSVehicle: add two new overridable methods. (bool)PreventPlayerMovement and (bool)PreventPlayerFire

This commit is contained in:
Marco Cawthorne 2022-09-08 13:59:18 -07:00
parent 04fe295035
commit 30a482e80e
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
4 changed files with 34 additions and 1 deletions

View File

@ -41,6 +41,15 @@ Game_Input(player pl)
return;
}
NSVehicle veh = (NSVehicle)pl.vehicle;
bool canfire = true;
if (veh)
if (veh.PreventPlayerFire() == true)
canfire = false;
if (canfire == false)
return;
if (input_buttons & INPUT_BUTTON0)
Weapons_Primary(pl);
else if (input_buttons & INPUT_BUTTON4)

View File

@ -63,6 +63,8 @@ class NSVehicle:NSSurfacePropEntity
virtual float(void) DriverAnimation;
virtual bool(void) CanDriverCrouch;
virtual bool(void) PreventPlayerMovement;
virtual bool(void) PreventPlayerFire;
};
enumflags

View File

@ -77,6 +77,18 @@ NSVehicle::CanDriverCrouch(void)
return (false);
}
bool
NSVehicle::PreventPlayerMovement(void)
{
return (true);
}
bool
NSVehicle::PreventPlayerFire(void)
{
return (true);
}
float
NSVehicle::DriverAnimation(void)
{

View File

@ -308,6 +308,7 @@ void
NSClientPlayer::Physics_InputPreMove(void)
{
NSVehicle veh = (NSVehicle)vehicle;
bool canmove = true;
/* when pressing the 'use' button, we also walk slower for precision */
if (input_buttons & INPUT_BUTTON5) {
@ -327,7 +328,16 @@ NSClientPlayer::Physics_InputPreMove(void)
}
}
if (flags & FL_FROZEN || movetype == MOVETYPE_NONE) {
/* find all the valid ways to freeze a player... */
if (veh)
if (veh.PreventPlayerMovement() == true)
canmove = false;
if (flags & FL_FROZEN || movetype == MOVETYPE_NONE)
canmove = false;
/* freeze in place */
if (canmove == false) {
input_movevalues = [0,0,0];
input_buttons &= ~INPUT_BUTTON2;
}