mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 23:02:08 +00:00
- scriptified APlayerPawn's DamageFade handling.
This commit is contained in:
parent
2bd72478ee
commit
badacbb968
6 changed files with 38 additions and 17 deletions
|
@ -133,9 +133,6 @@ public:
|
|||
double UseRange; // [NS] Distance at which player can +use
|
||||
double AirCapacity; // Multiplier for air supply underwater.
|
||||
|
||||
// [CW] Fades for when you are being damaged.
|
||||
PalEntry DamageFade;
|
||||
|
||||
// Everything below this point is only used by scripted code or through the scripted variable interface.
|
||||
int RunHealth;
|
||||
TObjPtr<AActor*> InvFirst; // first inventory item displayed on inventory bar
|
||||
|
@ -143,6 +140,9 @@ public:
|
|||
double SideMove1, SideMove2;
|
||||
double HexenArmor[5];
|
||||
|
||||
// [CW] Fades for when you are being damaged.
|
||||
PalEntry DamageFade;
|
||||
|
||||
// [SP] ViewBob Multiplier
|
||||
double ViewBob;
|
||||
double curBob;
|
||||
|
@ -512,8 +512,6 @@ public:
|
|||
// you are 100% sure the context already implies the layer exists.
|
||||
DPSprite *GetPSprite(PSPLayers layer);
|
||||
|
||||
bool GetPainFlash(FName type, PalEntry *color) const;
|
||||
|
||||
// [Nash] set player FOV
|
||||
void SetFOV(float fov);
|
||||
bool HasWeaponsInSlot(int slot) const;
|
||||
|
|
|
@ -1040,6 +1040,7 @@ xx(Face)
|
|||
xx(Slot)
|
||||
xx(SoundClass)
|
||||
xx(ViewBob)
|
||||
xx(DamageFade)
|
||||
|
||||
xx(BlueCard)
|
||||
xx(YellowCard)
|
||||
|
|
|
@ -567,24 +567,28 @@ DEFINE_ACTION_FUNCTION(FPlayerClass, GetColorSetName)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
bool player_t::GetPainFlash(FName type, PalEntry *color) const
|
||||
static int GetPainFlash(AActor *info, int type)
|
||||
{
|
||||
PClass *info = mo->GetClass();
|
||||
|
||||
// go backwards through the list and return the first item with a
|
||||
// matching damage type for an ancestor of our class.
|
||||
// This will always return the best fit because any parent class
|
||||
// must be processed before its children.
|
||||
for (int i = PainFlashes.Size() - 1; i >= 0; i--)
|
||||
{
|
||||
if (std::get<1>(PainFlashes[i]) == type &&
|
||||
std::get<0>(PainFlashes[i])->IsAncestorOf(info))
|
||||
if (std::get<1>(PainFlashes[i]) == ENamedName(type) &&
|
||||
std::get<0>(PainFlashes[i])->IsAncestorOf(info->GetClass()))
|
||||
{
|
||||
*color = std::get<2>(PainFlashes[i]);
|
||||
return true;
|
||||
return std::get<2>(PainFlashes[i]);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(APlayerPawn, GetPainFlashForType, GetPainFlash)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
PARAM_INT(type);
|
||||
ACTION_RETURN_INT(GetPainFlash(self, type));
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -1609,14 +1609,14 @@ DEFINE_CLASS_PROPERTY_PREFIX(player, damagescreencolor, Cfs, PlayerPawn)
|
|||
if (PROP_PARM_COUNT < 3) // Because colors count as 2 parms
|
||||
{
|
||||
color.a = 255;
|
||||
defaults->DamageFade = color;
|
||||
defaults->IntVar(NAME_DamageFade) = color;
|
||||
}
|
||||
else if (PROP_PARM_COUNT < 4)
|
||||
{
|
||||
PROP_DOUBLE_PARM(a, 2);
|
||||
|
||||
color.a = uint8_t(255 * clamp<double>(a, 0.f, 1.f));
|
||||
defaults->DamageFade = color;
|
||||
defaults->IntVar(NAME_DamageFade) = color;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -124,8 +124,13 @@ void V_AddPlayerBlend (player_t *CPlayer, float blend[4], float maxinvalpha, int
|
|||
BPART(gameinfo.pickupcolor)/255.f, cnt > 128 ? 0.5f : cnt / 255.f, blend);
|
||||
}
|
||||
|
||||
PalEntry painFlash = CPlayer->mo->DamageFade;
|
||||
CPlayer->GetPainFlash(CPlayer->mo->DamageTypeReceived, &painFlash);
|
||||
PalEntry painFlash = 0;
|
||||
IFVIRTUALPTR(CPlayer->mo, APlayerPawn, GetPainFlash)
|
||||
{
|
||||
VMValue param = CPlayer->mo;
|
||||
VMReturn ret((int*)&painFlash.d);
|
||||
VMCall(func, ¶m, 1, &ret, 1);
|
||||
}
|
||||
|
||||
if (painFlash.a != 0)
|
||||
{
|
||||
|
|
|
@ -2304,6 +2304,18 @@ class PlayerPawn : Actor native
|
|||
return p1 * (1. - ticfrac) + p2 * ticfrac;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
virtual clearscope color GetPainFlash() const
|
||||
{
|
||||
Color painFlash = GetPainFlashForType(DamageTypeReceived);
|
||||
if (painFlash == 0) painFlash = DamageFade;
|
||||
return painFlash;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
|
@ -2319,6 +2331,7 @@ class PlayerPawn : Actor native
|
|||
native void CheckUse();
|
||||
native void CheckWeaponButtons();
|
||||
native void MarkPlayerSounds();
|
||||
private native clearscope Color GetPainFlashForType(Name type);
|
||||
}
|
||||
|
||||
extend class Actor
|
||||
|
|
Loading…
Reference in a new issue