From 170387ab26f22779142eba72460443d337c9ccf1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers <coelckers@users.noreply.github.com> Date: Wed, 2 Feb 2022 19:49:57 +0100 Subject: [PATCH] - tspritetype::pos access wrappers, part 1. --- source/core/maptypes.h | 10 +++++----- source/core/rendering/scene/hw_flats.cpp | 10 +++++----- source/core/rendering/scene/hw_sprites.cpp | 18 +++++++++--------- source/core/rendering/scene/hw_walls.cpp | 8 ++++---- source/games/blood/src/db.cpp | 4 +--- source/games/duke/src/animatesprites_d.cpp | 14 ++++++-------- source/games/duke/src/animatesprites_r.cpp | 6 +++--- source/games/duke/src/inlines.h | 4 ++-- source/games/exhumed/src/sequence.cpp | 8 +++++--- source/games/sw/src/game.h | 8 ++++---- 10 files changed, 44 insertions(+), 46 deletions(-) diff --git a/source/core/maptypes.h b/source/core/maptypes.h index a54c7f9c4..a3d788b94 100644 --- a/source/core/maptypes.h +++ b/source/core/maptypes.h @@ -475,6 +475,11 @@ struct spritetypebase { __int_pos = { x, y, z }; } + + const vec3_t int_pos() const + { + return __int_pos; + } }; @@ -495,11 +500,6 @@ struct tspritetype : public spritetypebase DCoreActor* ownerActor; int time; - const vec3_t int_pos() const - { - return __int_pos; - } - void set_int_pos(const vec3_t& pos) { __int_pos = pos; diff --git a/source/core/rendering/scene/hw_flats.cpp b/source/core/rendering/scene/hw_flats.cpp index d6522bf8f..c38c8c7be 100644 --- a/source/core/rendering/scene/hw_flats.cpp +++ b/source/core/rendering/scene/hw_flats.cpp @@ -124,7 +124,7 @@ void HWFlat::MakeVertices(HWDrawInfo* di) int ofsz[4]; auto cstat = Sprite->cstat; if (tspriteGetSlope(Sprite)) cstat &= ~CSTAT_SPRITE_YFLIP; // NBlood doesn't y-flip slope sprites. - GetFlatSpritePosition(Sprite, Sprite->__int_pos.vec2, pos, ofsz, true); + GetFlatSpritePosition(Sprite, Sprite->int_pos().vec2, pos, ofsz, true); Sprite->cstat = cstat; auto ret = screen->mVertexData->AllocVertices(6); @@ -177,7 +177,7 @@ void HWFlat::MakeVertices(HWDrawInfo* di) auto svp = &di->SlopeSpriteVertices[svi]; auto& vpt = di->Viewpoint; - depth = (float)((Sprite->__int_pos.X * (1/16.f) - vpt.Pos.X) * vpt.TanCos + (Sprite->__int_pos.Y * (1 / -16.f) - vpt.Pos.Y) * vpt.TanSin); + depth = (float)((Sprite->int_pos().X * (1/16.f) - vpt.Pos.X) * vpt.TanCos + (Sprite->int_pos().Y * (1 / -16.f) - vpt.Pos.Y) * vpt.TanSin); for (unsigned j = 0; j < 4; j++) { @@ -421,12 +421,12 @@ void HWFlat::ProcessFlatSprite(HWDrawInfo* di, tspritetype* sprite, sectortype* int tilenum = sprite->picnum; texture = tileGetTexture(tilenum); bool belowfloor = false; - if (sprite->__int_pos.Z > sprite->sectp->floorz) + if (sprite->int_pos().Z > sprite->sectp->floorz) { belowfloor = true; - sprite->__int_pos.Z = sprite->sectp->floorz; + sprite->int_pos().Z = sprite->sectp->floorz; } - z = sprite->__int_pos.Z * (1 / -256.f); + z = sprite->int_pos().Z * (1 / -256.f); if (z == di->Viewpoint.Pos.Z) return; // looking right at the edge. dynlightindex = -1; diff --git a/source/core/rendering/scene/hw_sprites.cpp b/source/core/rendering/scene/hw_sprites.cpp index a5e5550b3..b893143de 100644 --- a/source/core/rendering/scene/hw_sprites.cpp +++ b/source/core/rendering/scene/hw_sprites.cpp @@ -332,9 +332,9 @@ void HWSprite::Process(HWDrawInfo* di, tspritetype* spr, sectortype* sector, int SetSpriteTranslucency(spr, alpha, RenderStyle); - x = spr->__int_pos.X * (1 / 16.f); - z = spr->__int_pos.Z * (1 / -256.f); - y = spr->__int_pos.Y * (1 / -16.f); + x = spr->int_pos().X * (1 / 16.f); + z = spr->int_pos().Z * (1 / -256.f); + y = spr->int_pos().Y * (1 / -16.f); auto vp = di->Viewpoint; if ((vp.Pos.XY() - DVector2(x, y)).LengthSquared() < 0.125) return; @@ -395,9 +395,9 @@ void HWSprite::Process(HWDrawInfo* di, tspritetype* spr, sectortype* sector, int float viewvecX = vp.ViewVector.X; float viewvecY = vp.ViewVector.Y; - x = spr->__int_pos.X * (1 / 16.f); - y = spr->__int_pos.Y * (1 / -16.f); - z = spr->__int_pos.Z * (1 / -256.f); + x = spr->int_pos().X * (1 / 16.f); + y = spr->int_pos().Y * (1 / -16.f); + z = spr->int_pos().Z * (1 / -256.f); x1 = x - viewvecY * (xoff - (width * 0.5f)); x2 = x - viewvecY * (xoff + (width * 0.5f)); @@ -504,13 +504,13 @@ bool HWSprite::ProcessVoxel(HWDrawInfo* di, voxmodel_t* vox, tspritetype* spr, s scalevec.Z *= sprzscale; translatevec.Z *= sprzscale; - float zpos = (float)(spr->__int_pos.Z + ownerActor->sprext.position_offset.Z); + float zpos = (float)(spr->int_pos().Z + ownerActor->sprext.position_offset.Z); float zscale = ((spr->cstat & CSTAT_SPRITE_YFLIP) && (spr->ownerActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != 0) ? -4.f : 4.f; zpos -= (spr->yoffset * spr->yrepeat) * zscale * voxel->bscale; - x = (spr->__int_pos.X + ownerActor->sprext.position_offset.X) * (1 / 16.f); + x = (spr->int_pos().X + ownerActor->sprext.position_offset.X) * (1 / 16.f); z = zpos * (1 / -256.f); - y = (spr->__int_pos.Y + ownerActor->sprext.position_offset.Y) * (1 / -16.f); + y = (spr->int_pos().Y + ownerActor->sprext.position_offset.Y) * (1 / -16.f); float zoff = voxel->siz.Z * .5f; if (!(spr->cstat & CSTAT_SPRITE_YCENTER)) diff --git a/source/core/rendering/scene/hw_walls.cpp b/source/core/rendering/scene/hw_walls.cpp index a5375b683..624316958 100644 --- a/source/core/rendering/scene/hw_walls.cpp +++ b/source/core/rendering/scene/hw_walls.cpp @@ -55,8 +55,8 @@ static walltype* IsOnWall(tspritetype* tspr, int height, DVector2& outpos) auto sect = tspr->sectp; - float tx = tspr->__int_pos.X * (float)inttoworld; - float ty = tspr->__int_pos.Y * (float)inttoworld; + float tx = tspr->int_pos().X * (float)inttoworld; + float ty = tspr->int_pos().Y * (float)inttoworld; for(auto& wal : wallsofsector(sect)) { @@ -1128,9 +1128,9 @@ void HWWall::ProcessWallSprite(HWDrawInfo* di, tspritetype* spr, sectortype* sec seg = nullptr; Sprite = spr; vec2_t pos[2]; - int sprz = spr->__int_pos.Z; + int sprz = spr->int_pos().Z; - GetWallSpritePosition(spr, spr->__int_pos.vec2, pos, true); + GetWallSpritePosition(spr, spr->int_pos().vec2, pos, true); glseg.x1 = pos[0].X * (1 / 16.f); glseg.y1 = pos[0].Y * (1 / -16.f); glseg.x2 = pos[1].X * (1 / 16.f); diff --git a/source/games/blood/src/db.cpp b/source/games/blood/src/db.cpp index a6c4b0e0d..40f706138 100644 --- a/source/games/blood/src/db.cpp +++ b/source/games/blood/src/db.cpp @@ -473,9 +473,7 @@ void dbLoadMap(const char* pPath, int* pX, int* pY, int* pZ, short* pAngle, int* } auto pSprite = &sprites.sprites[i]; *pSprite = {}; - pSprite->__int_pos.X = LittleLong(load.x); - pSprite->__int_pos.Y = LittleLong(load.y); - pSprite->__int_pos.Z = LittleLong(load.z); + pSprite->SetMapPos(LittleLong(load.x), LittleLong(load.y), LittleLong(load.z)); pSprite->cstat = ESpriteFlags::FromInt(LittleShort(load.cstat)); pSprite->picnum = LittleShort(load.picnum); int secno = LittleShort(load.sectnum); diff --git a/source/games/duke/src/animatesprites_d.cpp b/source/games/duke/src/animatesprites_d.cpp index 605ad6752..9b0a3abdd 100644 --- a/source/games/duke/src/animatesprites_d.cpp +++ b/source/games/duke/src/animatesprites_d.cpp @@ -209,8 +209,8 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, int smoothrat OwnerAc->int_pos().Y - ps[screenpeek].pos.Y); int sqb = getangle( - OwnerAc->int_pos().X - t->__int_pos.X, - OwnerAc->int_pos().Y - t->__int_pos.Y); + OwnerAc->int_pos().X - t->int_pos().X, + OwnerAc->int_pos().Y - t->int_pos().Y); if (abs(getincangle(sqa, sqb)) > 512) if (ldist(OwnerAc, t) < ldist(ps[screenpeek].GetActor(), OwnerAc)) @@ -225,11 +225,9 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, int smoothrat t->xrepeat = 0; else { - t->ang = getangle(x - t->__int_pos.X, y - t->__int_pos.Y); - t->__int_pos.X = OwnerAc->int_pos().X; - t->__int_pos.Y = OwnerAc->int_pos().Y; - t->__int_pos.X += bcos(t->ang, -10); - t->__int_pos.Y += bsin(t->ang, -10); + t->ang = getangle(x - t->int_pos().X, y - t->int_pos().Y); + t->__int_pos.X = OwnerAc->int_pos().X + bcos(t->ang, -10); + t->__int_pos.Y = OwnerAc->int_pos().Y + bsin(t->ang, -10); } } break; @@ -604,7 +602,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, int smoothrat else { // Alter the shadow's position so that it appears behind the sprite itself. - int look = getangle(shadowspr->__int_pos.X - ps[screenpeek].pos.X, shadowspr->__int_pos.Y - ps[screenpeek].pos.Y); + int look = getangle(shadowspr->int_pos() - ps[screenpeek].pos.X, shadowspr->__int_pos.Y - ps[screenpeek].pos.Y); shadowspr->__int_pos.X += bcos(look, -9); shadowspr->__int_pos.Y += bsin(look, -9); } diff --git a/source/games/duke/src/animatesprites_r.cpp b/source/games/duke/src/animatesprites_r.cpp index 5f3043e42..aab96f98a 100644 --- a/source/games/duke/src/animatesprites_r.cpp +++ b/source/games/duke/src/animatesprites_r.cpp @@ -204,8 +204,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, int smoothrat OwnerAc->int_pos().Y - ps[screenpeek].pos.Y); int sqb = getangle( - OwnerAc->int_pos().X - t->__int_pos.X, - OwnerAc->int_pos().Y - t->__int_pos.Y); + OwnerAc->int_pos().X - t->int_pos().X, + OwnerAc->int_pos().Y - t->int_pos().Y); if (abs(getincangle(sqa, sqb)) > 512) if (ldist(OwnerAc, t) < ldist(ps[screenpeek].GetActor(), OwnerAc)) @@ -219,7 +219,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, int smoothrat t->xrepeat = 0; else { - t->ang = getangle(x - t->__int_pos.X, y - t->__int_pos.Y); + t->ang = getangle(x - t->int_pos().X, y - t->int_pos().Y); t->__int_pos.X = OwnerAc->int_pos().X; t->__int_pos.Y = OwnerAc->int_pos().Y; t->__int_pos.X += bcos(t->ang, -10); diff --git a/source/games/duke/src/inlines.h b/source/games/duke/src/inlines.h index fdce668c8..31f595055 100644 --- a/source/games/duke/src/inlines.h +++ b/source/games/duke/src/inlines.h @@ -105,8 +105,8 @@ inline int ldist(DDukeActor* s1, DDukeActor* s2) inline int ldist(const DDukeActor* s1, const tspritetype* s2) { int vx, vy; - vx = s1->int_pos().X - s2->__int_pos.X; - vy = s1->int_pos().Y - s2->__int_pos.Y; + vx = s1->int_pos().X - s2->int_pos().X; + vy = s1->int_pos().Y - s2->int_pos().Y; return(FindDistance2D(vx, vy) + 1); } inline int dist(DDukeActor* s1, DDukeActor* s2) diff --git a/source/games/exhumed/src/sequence.cpp b/source/games/exhumed/src/sequence.cpp index b2ae4c4bc..bf2911030 100644 --- a/source/games/exhumed/src/sequence.cpp +++ b/source/games/exhumed/src/sequence.cpp @@ -479,7 +479,7 @@ int seq_GetSeqPicnum(int16_t nSeq, int16_t edx, int16_t ebx) int seq_PlotArrowSequence(int nSprite, int16_t nSeq, int nVal) { tspritetype* pTSprite = mytspriteArray->get(nSprite); - int nAngle = GetMyAngle(nCamerax - pTSprite->__int_pos.X, nCameray - pTSprite->__int_pos.Y); + int nAngle = GetMyAngle(nCamerax - pTSprite->int_pos().X, nCameray - pTSprite->int_pos().Y); int nSeqOffset = ((((pTSprite->ang + 512) - nAngle) + 128) & kAngleMask) >> 8; @@ -527,7 +527,8 @@ int seq_PlotArrowSequence(int nSprite, int16_t nSeq, int nVal) int seq_PlotSequence(int nSprite, int16_t edx, int16_t nFrame, int16_t ecx) { tspritetype* pTSprite = mytspriteArray->get(nSprite); - int nAngle = GetMyAngle(nCamerax - pTSprite->__int_pos.X, nCameray - pTSprite->__int_pos.Y); + int nAngle = GetMyAngle(nCamerax - pTSprite->int_pos().X, nCameray - pTSprite->int_pos().Y); + int val; @@ -580,7 +581,8 @@ int seq_PlotSequence(int nSprite, int16_t edx, int16_t nFrame, int16_t ecx) } tspritetype* tsp = mytspriteArray->newTSprite(); - tsp->__int_pos = pTSprite->__int_pos; + tsp->set_int_pos(pTSprite->int_pos()); + tsp->shade = shade; tsp->pal = pTSprite->pal; tsp->xrepeat = pTSprite->xrepeat; diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 53656de83..4bb88f3a9 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -242,15 +242,15 @@ inline int GetSpriteSizeToBottom(const spritetypebase* sp) inline int GetSpriteZOfTop(const spritetypebase* sp) { return (sp->cstat & CSTAT_SPRITE_YCENTER) ? - sp->__int_pos.Z - GetSpriteSizeToTop(sp) : - sp->__int_pos.Z - GetSpriteSizeZ(sp); + sp->int_pos().Z - GetSpriteSizeToTop(sp) : + sp->int_pos().Z - GetSpriteSizeZ(sp); } inline int GetSpriteZOfBottom(const spritetypebase* sp) { return (sp->cstat & CSTAT_SPRITE_YCENTER) ? - sp->__int_pos.Z + GetSpriteSizeToBottom(sp) : - sp->__int_pos.Z; + sp->int_pos().Z + GetSpriteSizeToBottom(sp) : + sp->int_pos().Z; } // mid and upper/lower sprite calculations