- Blood: Fix DeleteSprite

This commit is contained in:
Christoph Oelckers 2021-11-28 13:29:59 +01:00
parent 9213eae606
commit 3a44f168e0
3 changed files with 11 additions and 16 deletions

View file

@ -174,12 +174,6 @@ using BloodSectIterator = TSectIterator<DBloodActor>;
using BloodSpriteIterator = TSpriteIterator<DBloodActor>;
using BloodLinearSpriteIterator = TLinearSpriteIterator<DBloodActor>;
inline int DeleteSprite(DBloodActor* nSprite)
{
if (nSprite) return DeleteSprite(nSprite->GetSpriteIndex());
return 0;
}
inline void GetActorExtents(DBloodActor* actor, int* top, int* bottom)
{
GetSpriteExtents(&actor->s(), top, bottom);

View file

@ -189,23 +189,24 @@ DBloodActor* InsertSprite(sectortype* pSector, int nStat)
return actor;
}
int DeleteSprite(int nSprite)
inline int DeleteSprite(DBloodActor* actor)
{
auto sp = &sprite[nSprite];
FVector3 pos = GetSoundPos(&sp->pos);
soundEngine->RelinkSound(SOURCE_Actor, &sprite[nSprite], nullptr, &pos);
auto sp = &actor->s();
FVector3 pos = GetSoundPos(&actor->s().pos);
soundEngine->RelinkSound(SOURCE_Actor, actor, nullptr, &pos);
assert(sp->statnum >= 0 && sp->statnum < kMaxStatus);
RemoveSpriteStat(nSprite);
RemoveSpriteStat(actor->GetSpriteIndex());
assert(sp->insector());
RemoveSpriteSect(nSprite);
InsertSpriteStat(nSprite, kMaxStatus);
RemoveSpriteSect(actor->GetSpriteIndex());
InsertSpriteStat(actor->GetSpriteIndex(), kMaxStatus);
#ifdef NOONE_EXTENSIONS
for (auto& ctrl : gPlayerCtrl) if (ctrl.qavScene.initiator == &bloodActors[nSprite]) ctrl.qavScene.initiator = nullptr;
for (auto& ctrl : gPlayerCtrl) if (ctrl.qavScene.initiator == actor) ctrl.qavScene.initiator = nullptr;
#endif
Numsprites--;
return nSprite;
return 0;
}
int ChangeSpriteSect(int nSprite, int nSector)

View file

@ -118,7 +118,7 @@ void InsertSpriteStat(int nSprite, int nStat);
void RemoveSpriteStat(int nSprite);
void qinitspritelists(void);
DBloodActor* InsertSprite(sectortype* pSector, int nStat);
int DeleteSprite(int nSprite);
int DeleteSprite(DBloodActor* actor);
int ChangeSpriteSect(int nSprite, int nSector);
int qchangespritesect(short nSprite, short nSector);
int ChangeSpriteStat(int nSprite, int nStatus);