- Exhumed: Have feebtag() return an actor pointer instead.

This commit is contained in:
Mitchell Richters 2023-03-23 21:00:23 +11:00
parent 22e135afeb
commit 5d6744836f

View file

@ -27,12 +27,11 @@ BEGIN_PS_NS
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
static void feebtag(const DVector3& pos, sectortype* pSector, DExhumedActor **nSprite, int nVal2, double deflen) static DExhumedActor* feebtag(const DVector3& pos, sectortype* pSector, int nVal2, double deflen)
{ {
*nSprite = nullptr; DExhumedActor* pPickupActor = nullptr;
auto startwall = pSector->walls.Data(); auto startwall = pSector->walls.Data();
int nWalls = pSector->walls.Size(); int nWalls = pSector->walls.Size();
int var_20 = nVal2 & 2; int var_20 = nVal2 & 2;
@ -43,13 +42,13 @@ static void feebtag(const DVector3& pos, sectortype* pSector, DExhumedActor **nS
if (pSector != nullptr) if (pSector != nullptr)
{ {
ExhumedSectIterator it(pSector); ExhumedSectIterator it(pSector);
while (auto pActor = it.Next()) while (auto itActor = it.Next())
{ {
int nStat = pActor->spr.statnum; int nStat = itActor->spr.statnum;
if (nStat >= 900 && !(pActor->spr.cstat & CSTAT_SPRITE_INVISIBLE)) if (nStat >= 900 && !(itActor->spr.cstat & CSTAT_SPRITE_INVISIBLE))
{ {
auto diff = pActor->spr.pos - pos; auto diff = itActor->spr.pos - pos;
if (diff.Z < 20 && diff.Z > -100) if (diff.Z < 20 && diff.Z > -100)
{ {
@ -58,7 +57,7 @@ static void feebtag(const DVector3& pos, sectortype* pSector, DExhumedActor **nS
if (len < deflen && ((nStat != 950 && nStat != 949) || !(var_14 & 1)) && ((nStat != 912 && nStat != 913) || !(var_20 & 2))) if (len < deflen && ((nStat != 950 && nStat != 949) || !(var_14 & 1)) && ((nStat != 912 && nStat != 913) || !(var_20 & 2)))
{ {
deflen = len; deflen = len;
*nSprite = pActor; pPickupActor = itActor;
} }
} }
} }
@ -67,11 +66,13 @@ static void feebtag(const DVector3& pos, sectortype* pSector, DExhumedActor **nS
nWalls--; nWalls--;
if (nWalls < 0) if (nWalls < 0)
return; return pPickupActor;
pSector = startwall->nextSector(); pSector = startwall->nextSector();
startwall++; startwall++;
} }
return pPickupActor;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -98,8 +99,7 @@ void doPlayerItemPickups(Player* const pPlayer)
var_30 |= 1; var_30 |= 1;
} }
DExhumedActor* pPickupActor; DExhumedActor* pPickupActor = feebtag(pPlayerActor->spr.pos, pPlayerActor->sector(), var_30, 48);
feebtag(pPlayerActor->spr.pos, pPlayerActor->sector(), &pPickupActor, var_30, 48);
if (pPickupActor != nullptr && pPickupActor->spr.statnum >= 900) if (pPickupActor != nullptr && pPickupActor->spr.statnum >= 900)
{ {