- scriptified PlayerPawn.ResetAirSupply.

This commit is contained in:
Christoph Oelckers 2019-01-03 13:04:48 +01:00
parent badacbb968
commit 23146f1af2
4 changed files with 34 additions and 35 deletions

View file

@ -92,7 +92,6 @@ public:
virtual void BeginPlay () override; virtual void BeginPlay () override;
virtual bool UpdateWaterLevel (bool splash) override; virtual bool UpdateWaterLevel (bool splash) override;
bool ResetAirSupply (bool playgasp = true);
int GetMaxHealth(bool withupgrades = false) const; int GetMaxHealth(bool withupgrades = false) const;
void GiveDeathmatchInventory (); void GiveDeathmatchInventory ();
@ -131,15 +130,18 @@ public:
FName MorphWeapon; FName MorphWeapon;
double AttackZOffset; // attack height, relative to player center double AttackZOffset; // attack height, relative to player center
double UseRange; // [NS] Distance at which player can +use double UseRange; // [NS] Distance at which player can +use
double AirCapacity; // Multiplier for air supply underwater.
// Everything below this point is only used by scripted code or through the scripted variable interface. // Everything below this point is only used by scripted code or through the scripted variable interface.
int RunHealth; int RunHealth;
TObjPtr<AActor*> InvFirst; // first inventory item displayed on inventory bar TObjPtr<AActor*> InvFirst; // first inventory item displayed on inventory bar
// [GRB] Player class properties
double ForwardMove1, ForwardMove2; double ForwardMove1, ForwardMove2;
double SideMove1, SideMove2; double SideMove1, SideMove2;
double AirCapacity; // Multiplier for air supply underwater.
double HexenArmor[5]; double HexenArmor[5];
// [CW] Fades for when you are being damaged. // [CW] Fades for when you are being damaged.
PalEntry DamageFade; PalEntry DamageFade;

View file

@ -5045,14 +5045,18 @@ APlayerPawn *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags)
p->multicount = 0; p->multicount = 0;
p->lastkilltime = 0; p->lastkilltime = 0;
p->BlendR = p->BlendG = p->BlendB = p->BlendA = 0.f; p->BlendR = p->BlendG = p->BlendB = p->BlendA = 0.f;
p->mo->ResetAirSupply(false);
p->Uncrouch(); p->Uncrouch();
p->MinPitch = p->MaxPitch = 0.; // will be filled in by PostBeginPlay()/netcode p->MinPitch = p->MaxPitch = 0.; // will be filled in by PostBeginPlay()/netcode
p->MUSINFOactor = NULL; p->MUSINFOactor = NULL;
p->MUSINFOtics = -1; p->MUSINFOtics = -1;
p->Vel.Zero(); // killough 10/98: initialize bobbing to 0. p->Vel.Zero(); // killough 10/98: initialize bobbing to 0.
IFVIRTUALPTR(p->mo, APlayerPawn, ResetAirSupply)
{
VMValue params[] = { p->mo, false };
VMCall(func, params, 2, nullptr, 0);
}
for (int ii = 0; ii < MAXPLAYERS; ++ii) for (int ii = 0; ii < MAXPLAYERS; ++ii)
{ {
if (playeringame[ii] && players[ii].camera == oldactor) if (playeringame[ii] && players[ii].camera == oldactor)

View file

@ -1017,36 +1017,6 @@ bool APlayerPawn::UpdateWaterLevel (bool splash)
return retval; return retval;
} }
//===========================================================================
//
// APlayerPawn :: ResetAirSupply
//
// Gives the player a full "tank" of air. If they had previously completely
// run out of air, also plays the *gasp sound. Returns true if the player
// was drowning.
//
//===========================================================================
bool APlayerPawn::ResetAirSupply (bool playgasp)
{
bool wasdrowning = (player->air_finished < level.time);
if (playgasp && wasdrowning)
{
S_Sound (this, CHAN_VOICE, "*gasp", 1, ATTN_NORM);
}
if (level.airsupply> 0 && player->mo->AirCapacity > 0) player->air_finished = level.time + int(level.airsupply * player->mo->AirCapacity);
else player->air_finished = INT_MAX;
return wasdrowning;
}
DEFINE_ACTION_FUNCTION(APlayerPawn, ResetAirSupply)
{
PARAM_SELF_PROLOGUE(APlayerPawn);
PARAM_BOOL(playgasp);
ACTION_RETURN_BOOL(self->ResetAirSupply(playgasp));
}
//=========================================================================== //===========================================================================
// //
// Animations // Animations

View file

@ -2317,6 +2317,30 @@ class PlayerPawn : Actor native
return painFlash; return painFlash;
} }
//===========================================================================
//
// APlayerPawn :: ResetAirSupply
//
// Gives the player a full "tank" of air. If they had previously completely
// run out of air, also plays the *gasp sound. Returns true if the player
// was drowning.
//
//===========================================================================
virtual bool ResetAirSupply (bool playgasp = true)
{
let player = self.player;
bool wasdrowning = (player.air_finished < level.time);
if (playgasp && wasdrowning)
{
A_PlaySound("*gasp", CHAN_VOICE);
}
if (level.airsupply > 0 && AirCapacity > 0) player.air_finished = level.time + int(level.airsupply * AirCapacity);
else player.air_finished = int.max;
return wasdrowning;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// //
// //
@ -2324,7 +2348,6 @@ class PlayerPawn : Actor native
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
native clearscope int GetMaxHealth(bool withupgrades = false) const; native clearscope int GetMaxHealth(bool withupgrades = false) const;
native bool ResetAirSupply (bool playgasp = true);
native clearscope static String GetPrintableDisplayName(Class<Actor> cls); native clearscope static String GetPrintableDisplayName(Class<Actor> cls);
native void CheckMusicChange(); native void CheckMusicChange();
native void CheckEnvironment(); native void CheckEnvironment();