- animatesprite.cpp.

This commit is contained in:
Christoph Oelckers 2021-11-24 00:28:50 +01:00
parent a34e89c8b7
commit c8f4caf364
2 changed files with 35 additions and 29 deletions

View file

@ -67,7 +67,7 @@ static void RotateXZ(int *pX, int *, int *pZ, int ang)
*pZ = dmulscale30r(oX,angSin,oZ,angCos); *pZ = dmulscale30r(oX,angSin,oZ,angCos);
} }
template<typename T> tspritetype* viewInsertTSprite(spritetype* tsprite, int& spritesortcnt, int nSector, int nStatnum, T const * const parentTSprite) tspritetype* viewInsertTSprite(spritetype* tsprite, int& spritesortcnt, sectortype* pSector, int nStatnum, tspritetype const * const parentTSprite)
{ {
if (spritesortcnt >= MAXSPRITESONSCREEN) if (spritesortcnt >= MAXSPRITESONSCREEN)
return nullptr; return nullptr;
@ -81,7 +81,7 @@ template<typename T> tspritetype* viewInsertTSprite(spritetype* tsprite, int& sp
pTSprite->owner = -1; pTSprite->owner = -1;
pTSprite->type = -spritesortcnt; pTSprite->type = -spritesortcnt;
pTSprite->statnum = nStatnum; pTSprite->statnum = nStatnum;
pTSprite->sectnum = nSector; pTSprite->setsector(pSector);
spritesortcnt++; spritesortcnt++;
if (parentTSprite) if (parentTSprite)
{ {
@ -140,7 +140,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
int top, bottom; int top, bottom;
GetSpriteExtents(pTSprite, &top, &bottom); GetSpriteExtents(pTSprite, &top, &bottom);
auto pNSprite2 = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite2 = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite2) if (!pNSprite2)
break; break;
@ -159,7 +159,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
case kViewEffectAtom: case kViewEffectAtom:
for (int i = 0; i < 16; i++) for (int i = 0; i < 16; i++)
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -185,7 +185,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
{ {
int top, bottom; int top, bottom;
GetSpriteExtents(pTSprite, &top, &bottom); GetSpriteExtents(pTSprite, &top, &bottom);
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -201,7 +201,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectTesla: case kViewEffectTesla:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -215,7 +215,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectShoot: case kViewEffectShoot:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -227,7 +227,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectReflectiveBall: case kViewEffectReflectiveBall:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -240,7 +240,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectPhase: case kViewEffectPhase:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -267,8 +267,8 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
for (int i = 0; i < 5 && spritesortcnt < MAXSPRITESONSCREEN; i++) for (int i = 0; i < 5 && spritesortcnt < MAXSPRITESONSCREEN; i++)
{ {
int nSector = pTSprite->sectnum; auto pSector = pTSprite->sector();
auto pNSprite = viewInsertTSprite<tspritetype>(tsprite, spritesortcnt, nSector, 32767, NULL); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pSector, 32767, NULL);
if (!pNSprite) if (!pNSprite)
break; break;
@ -278,9 +278,9 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
int y = MulScale(nLen, Sin(nAng), 30); int y = MulScale(nLen, Sin(nAng), 30);
pNSprite->y = pTSprite->y + y; pNSprite->y = pTSprite->y + y;
pNSprite->z = pTSprite->z; pNSprite->z = pTSprite->z;
assert(validSectorIndex(nSector)); assert(pSector);
FindSector(pNSprite->x, pNSprite->y, pNSprite->z, &nSector); FindSector(pNSprite->x, pNSprite->y, pNSprite->z, &pSector);
pNSprite->sectnum = nSector; pNSprite->setsector(pSector);
pNSprite->owner = pTSprite->owner; pNSprite->owner = pTSprite->owner;
pNSprite->picnum = pTSprite->picnum; pNSprite->picnum = pTSprite->picnum;
pNSprite->cstat |= 2; pNSprite->cstat |= 2;
@ -295,7 +295,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectFlame: case kViewEffectFlame:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -308,7 +308,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectSmokeHigh: case kViewEffectSmokeHigh:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -327,7 +327,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectSmokeLow: case kViewEffectSmokeLow:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -346,7 +346,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectTorchHigh: case kViewEffectTorchHigh:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -360,7 +360,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectTorchLow: case kViewEffectTorchLow:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -376,7 +376,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
{ {
if (r_shadows) if (r_shadows)
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -395,7 +395,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectFlareHalo: case kViewEffectFlareHalo:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -410,11 +410,11 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectCeilGlow: case kViewEffectCeilGlow:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
sectortype *pSector = &sector[pTSprite->sectnum]; sectortype *pSector = pTSprite->sector();
pNSprite->x = pTSprite->x; pNSprite->x = pTSprite->x;
pNSprite->y = pTSprite->y; pNSprite->y = pTSprite->y;
pNSprite->z = pSector->ceilingz; pNSprite->z = pSector->ceilingz;
@ -429,11 +429,11 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectFloorGlow: case kViewEffectFloorGlow:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
sectortype *pSector = &sector[pTSprite->sectnum]; sectortype *pSector = pTSprite->sector();
pNSprite->x = pTSprite->x; pNSprite->x = pTSprite->x;
pNSprite->y = pTSprite->y; pNSprite->y = pTSprite->y;
pNSprite->z = pSector->floorz; pNSprite->z = pSector->floorz;
@ -449,7 +449,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
} }
case kViewEffectSpear: case kViewEffectSpear:
{ {
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -469,7 +469,7 @@ static tspritetype *viewAddEffect(spritetype* tsprite, int& spritesortcnt, int n
WEAPONICON weaponIcon = gWeaponIcon[pPlayer->curWeapon]; WEAPONICON weaponIcon = gWeaponIcon[pPlayer->curWeapon];
auto& nTile = weaponIcon.nTile; auto& nTile = weaponIcon.nTile;
if (nTile < 0) break; if (nTile < 0) break;
auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sectnum, 32767, pTSprite); auto pNSprite = viewInsertTSprite(tsprite, spritesortcnt, pTSprite->sector(), 32767, pTSprite);
if (!pNSprite) if (!pNSprite)
break; break;
@ -683,7 +683,7 @@ void viewProcessSprites(spritetype* tsprite, int& spritesortcnt, int32_t cX, int
} }
} }
sectortype *pSector = &sector[pTSprite->sectnum]; sectortype *pSector = pTSprite->sector();
XSECTOR const* pXSector = pSector->hasX() ? &pSector->xs() : nullptr; XSECTOR const* pXSector = pSector->hasX() ? &pSector->xs() : nullptr;
int nShade = pTSprite->shade; int nShade = pTSprite->shade;
@ -812,7 +812,7 @@ void viewProcessSprites(spritetype* tsprite, int& spritesortcnt, int32_t cX, int
viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectFlareHalo); viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectFlareHalo);
if (pTSprite->type != kMissileFlareRegular) break; if (pTSprite->type != kMissileFlareRegular) break;
sectortype *pSector = &sector[pTSprite->sectnum]; sectortype *pSector = pTSprite->sector();
int zDiff = (pTSprite->z - pSector->ceilingz) >> 8; int zDiff = (pTSprite->z - pSector->ceilingz) >> 8;
if ((pSector->ceilingstat&1) == 0 && zDiff < 64) { if ((pSector->ceilingstat&1) == 0 && zDiff < 64) {

View file

@ -68,6 +68,12 @@ inline bool FindSector(int nX, int nY, sectortype** ppSector)
*ppSector = &sector[n]; *ppSector = &sector[n];
return res; return res;
} }
[[deprecated]]
bool FindSector(int nX, int nY, int nZ, int* nSector);
[[deprecated]]
bool FindSector(int nX, int nY, int* nSector);
bool CheckProximity(DBloodActor *pSprite, int nX, int nY, int nZ, int nSector, int nDist); bool CheckProximity(DBloodActor *pSprite, int nX, int nY, int nZ, int nSector, int nDist);
bool CheckProximityPoint(int nX1, int nY1, int nZ1, int nX2, int nY2, int nZ2, int nDist); bool CheckProximityPoint(int nX1, int nY1, int nZ1, int nX2, int nY2, int nZ2, int nDist);
bool CheckProximityWall(walltype* pWall, int x, int y, int nDist); bool CheckProximityWall(walltype* pWall, int x, int y, int nDist);