Refactored A_ClearOverlays.

This commit is contained in:
MajorCooke 2016-06-18 07:43:59 -05:00 committed by Christoph Oelckers
parent dd410876cf
commit 2b91db7b3a

View file

@ -1139,14 +1139,12 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Overlay)
player_t *player = self->player; player_t *player = self->player;
if (player == nullptr) if (player == nullptr || (dontoverride && (player->FindPSprite(layer) != nullptr)))
ACTION_RETURN_BOOL(false);
DPSprite *pspr;
if (dontoverride && (player->FindPSprite(layer) != nullptr))
{ {
ACTION_RETURN_BOOL(false); ACTION_RETURN_BOOL(false);
} }
DPSprite *pspr;
pspr = new DPSprite(player, stateowner, layer); pspr = new DPSprite(player, stateowner, layer);
pspr->SetState(state); pspr->SetState(state);
ACTION_RETURN_BOOL(true); ACTION_RETURN_BOOL(true);
@ -1159,10 +1157,9 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_ClearOverlays)
PARAM_INT_OPT(stop) { stop = 0; } PARAM_INT_OPT(stop) { stop = 0; }
PARAM_BOOL_OPT(safety) { safety = true; } PARAM_BOOL_OPT(safety) { safety = true; }
if (!ACTION_CALL_FROM_PSPRITE()) if (!self->player)
{
ACTION_RETURN_INT(0); ACTION_RETURN_INT(0);
}
player_t *player = self->player; player_t *player = self->player;
if (!start && !stop) if (!start && !stop)
{ {
@ -1171,23 +1168,27 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_ClearOverlays)
} }
int count = 0; int count = 0;
for (int i = start; i <= stop; i++) DPSprite *pspr = player->psprites;
while (pspr != nullptr)
{ {
int id = pspr->GetID();
//Do not wipe out layer 0. Ever.
if (!id || id > stop || id < start)
continue;
if (safety) if (safety)
{ {
if (i >= PSP_TARGETCENTER) if (id >= PSP_TARGETCENTER)
break; break;
else if ((i >= PSP_STRIFEHANDS && i <= PSP_WEAPON) || (i == PSP_FLASH)) else if ((id >= PSP_STRIFEHANDS && id <= PSP_WEAPON) || (id == PSP_FLASH))
continue; continue;
} }
// [MC]Don't affect non-hardcoded layers unless it's really desired. // [MC]Don't affect non-hardcoded layers unless it's really desired.
DPSprite *pspr = player->FindPSprite(i);
if (pspr != nullptr)
{
pspr->SetState(nullptr); pspr->SetState(nullptr);
count++; count++;
} pspr->GetNext();
} }
ACTION_RETURN_INT(count); ACTION_RETURN_INT(count);
} }