mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 23:02:08 +00:00
Added A_OverlayOffset
Like A_WeaponOffset except it can access any psprites
This commit is contained in:
parent
1ecfb5897b
commit
8c205ebac3
3 changed files with 53 additions and 10 deletions
|
@ -532,6 +532,7 @@ public:
|
||||||
void TickPSprites();
|
void TickPSprites();
|
||||||
void DestroyPSprites();
|
void DestroyPSprites();
|
||||||
DPSprite *GetPSprite(psprnum_t layer); // Used ONLY for compatibility with the old hardcoded layers.
|
DPSprite *GetPSprite(psprnum_t layer); // Used ONLY for compatibility with the old hardcoded layers.
|
||||||
|
DPSprite *FindPSprite(int layer);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Bookkeeping on players - state.
|
// Bookkeeping on players - state.
|
||||||
|
|
|
@ -158,6 +158,29 @@ DPSprite *player_t::GetPSprite(psprnum_t layer)
|
||||||
return pspr;
|
return pspr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DPSprite *player_t::FindPSprite(int layer)
|
||||||
|
{
|
||||||
|
if (layer == 0)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
DPSprite *pspr = psprites;
|
||||||
|
while (pspr)
|
||||||
|
{
|
||||||
|
if (pspr->ID == layer)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pspr = pspr->Next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pspr;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// PROC P_NewPspriteTick
|
// PROC P_NewPspriteTick
|
||||||
|
@ -863,7 +886,7 @@ DEFINE_ACTION_FUNCTION(AInventory, A_CheckReload)
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// PROC A_WeaponOffset
|
// PROC A_OverlayOffset
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
enum WOFFlags
|
enum WOFFlags
|
||||||
|
@ -873,16 +896,11 @@ enum WOFFlags
|
||||||
WOF_ADD = 1 << 2,
|
WOF_ADD = 1 << 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(AInventory, A_WeaponOffset)
|
void A_OverlayOffset(AActor *self, int layer, double wx, double wy, int flags)
|
||||||
{
|
{
|
||||||
PARAM_ACTION_PROLOGUE;
|
|
||||||
PARAM_FLOAT_OPT(wx) { wx = 0.; }
|
|
||||||
PARAM_FLOAT_OPT(wy) { wy = 32.; }
|
|
||||||
PARAM_INT_OPT(flags) { flags = 0; }
|
|
||||||
|
|
||||||
if ((flags & WOF_KEEPX) && (flags & WOF_KEEPY))
|
if ((flags & WOF_KEEPX) && (flags & WOF_KEEPY))
|
||||||
{
|
{
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player_t *player = self->player;
|
player_t *player = self->player;
|
||||||
|
@ -890,7 +908,11 @@ DEFINE_ACTION_FUNCTION(AInventory, A_WeaponOffset)
|
||||||
|
|
||||||
if (player && (player->playerstate != PST_DEAD))
|
if (player && (player->playerstate != PST_DEAD))
|
||||||
{
|
{
|
||||||
psp = player->GetPSprite(ps_weapon);
|
psp = player->FindPSprite(layer);
|
||||||
|
|
||||||
|
if (psp == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!(flags & WOF_KEEPX))
|
if (!(flags & WOF_KEEPX))
|
||||||
{
|
{
|
||||||
if (flags & WOF_ADD)
|
if (flags & WOF_ADD)
|
||||||
|
@ -914,7 +936,26 @@ DEFINE_ACTION_FUNCTION(AInventory, A_WeaponOffset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(AInventory, A_OverlayOffset)
|
||||||
|
{
|
||||||
|
PARAM_ACTION_PROLOGUE;
|
||||||
|
PARAM_INT_OPT(layer) { layer = ps_weapon; }
|
||||||
|
PARAM_FLOAT_OPT(wx) { wx = 0.; }
|
||||||
|
PARAM_FLOAT_OPT(wy) { wy = 32.; }
|
||||||
|
PARAM_INT_OPT(flags) { flags = 0; }
|
||||||
|
A_OverlayOffset(self, layer, wx, wy, flags);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(AInventory, A_WeaponOffset)
|
||||||
|
{
|
||||||
|
PARAM_ACTION_PROLOGUE;
|
||||||
|
PARAM_FLOAT_OPT(wx) { wx = 0.; }
|
||||||
|
PARAM_FLOAT_OPT(wy) { wy = 32.; }
|
||||||
|
PARAM_INT_OPT(flags) { flags = 0; }
|
||||||
|
A_OverlayOffset(self, ps_weapon, wx, wy, flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ ACTOR Inventory native
|
||||||
action native A_RestoreSpecialThing1();
|
action native A_RestoreSpecialThing1();
|
||||||
action native A_RestoreSpecialThing2();
|
action native A_RestoreSpecialThing2();
|
||||||
action native A_WeaponOffset(float wx = 0, float wy = 32, int flags = 0);
|
action native A_WeaponOffset(float wx = 0, float wy = 32, int flags = 0);
|
||||||
|
action native A_OverlayOffset(int layer = 1, float wx = 0, float wy = 32, int flags = 0);
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue