- Getting rid of DDukeActor::s, part 1.

This commit is contained in:
Christoph Oelckers 2021-12-21 22:28:13 +01:00
parent 99507ed048
commit f216857f55
7 changed files with 65 additions and 82 deletions

View file

@ -142,7 +142,6 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
t = &tsprite[j];
h = static_cast<DDukeActor*>(t->ownerActor);
auto OwnerAc = h->GetOwner();
auto Owner = OwnerAc ? OwnerAc->s : nullptr;
switch (h->spr.picnum)
{
@ -204,33 +203,33 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
case TRIPBOMB:
continue;
case FORCESPHERE:
if (t->statnum == STAT_MISC && Owner)
if (t->statnum == STAT_MISC && OwnerAc)
{
int sqa =
getangle(
Owner->x - ps[screenpeek].pos.x,
Owner->y - ps[screenpeek].pos.y);
OwnerAc->spr.x - ps[screenpeek].pos.x,
OwnerAc->spr.y - ps[screenpeek].pos.y);
int sqb =
getangle(
Owner->x - t->x,
Owner->y - t->y);
OwnerAc->spr.x - t->x,
OwnerAc->spr.y - t->y);
if (abs(getincangle(sqa, sqb)) > 512)
if (ldist(Owner, t) < ldist(ps[screenpeek].GetActor()->s, Owner))
if (ldist(OwnerAc, t) < ldist(ps[screenpeek].GetActor(), OwnerAc))
t->xrepeat = t->yrepeat = 0;
}
continue;
case BURNING:
case BURNING2:
if (Owner && Owner->statnum == STAT_PLAYER)
if (OwnerAc && OwnerAc->spr.statnum == STAT_PLAYER)
{
if (display_mirror == 0 && Owner->yvel == screenpeek && ps[screenpeek].over_shoulder_on == 0)
if (display_mirror == 0 && OwnerAc->spr.yvel == screenpeek && ps[screenpeek].over_shoulder_on == 0)
t->xrepeat = 0;
else
{
t->ang = getangle(x - t->x, y - t->y);
t->x = Owner->x;
t->y = Owner->y;
t->x = OwnerAc->spr.x;
t->y = OwnerAc->spr.y;
t->x += bcos(t->ang, -10);
t->y += bsin(t->ang, -10);
}
@ -628,9 +627,9 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
switch (h->spr.picnum)
{
case LASERLINE:
if (!Owner) break;
if (!OwnerAc) break;
if (t->sector()->lotag == 2) t->pal = 8;
t->z = Owner->z - (3 << 8);
t->z = OwnerAc->spr.z - (3 << 8);
if (gs.lasermode == 2 && ps[screenpeek].heat_on == 0)
t->yrepeat = 0;
[[fallthrough]];
@ -658,8 +657,8 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
[[fallthrough]];
case BURNING:
case BURNING2:
if (!Owner) break;
if (Owner->picnum != TREE1 && Owner->picnum != TREE2)
if (!OwnerAc) break;
if (OwnerAc->spr.picnum != TREE1 && OwnerAc->spr.picnum != TREE2)
t->z = t->sector()->floorz;
t->shade = -127;
break;
@ -685,7 +684,7 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
}
t->picnum = h->spr.picnum + k + ((h->temp_data[0] < 4) * 5);
if (Owner) t->shade = Owner->shade;
if (OwnerAc) t->shade = OwnerAc->spr.shade;
break;
@ -704,22 +703,22 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
if (h->temp_data[0] > 2) t->cstat &= ~(CSTAT_SPRITE_XFLIP | CSTAT_SPRITE_YFLIP);
break;
case FRAMEEFFECT1:
if (Owner && Owner->statnum < MAXSTATUS)
if (OwnerAc && OwnerAc->spr.statnum < MAXSTATUS)
{
if (Owner->picnum == APLAYER)
if (OwnerAc->spr.picnum == APLAYER)
if (ud.cameraactor == nullptr)
if (screenpeek == Owner->yvel && display_mirror == 0)
if (screenpeek == OwnerAc->spr.yvel && display_mirror == 0)
{
t->ownerActor = nullptr;
break;
}
if ((Owner->cstat & CSTAT_SPRITE_INVISIBLE) == 0)
if ((OwnerAc->spr.cstat & CSTAT_SPRITE_INVISIBLE) == 0)
{
t->picnum = OwnerAc->dispicnum;
t->pal = Owner->pal;
t->shade = Owner->shade;
t->ang = Owner->ang;
t->cstat = CSTAT_SPRITE_TRANSLUCENT | Owner->cstat;
t->pal = OwnerAc->spr.pal;
t->shade = OwnerAc->spr.shade;
t->ang = OwnerAc->spr.ang;
t->cstat = CSTAT_SPRITE_TRANSLUCENT | OwnerAc->spr.cstat;
}
}
break;

View file

@ -127,7 +127,6 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
t = &tsprite[j];
h = static_cast<DDukeActor*>(t->ownerActor);
auto OwnerAc = h->GetOwner();
auto Owner = OwnerAc ? OwnerAc->s : nullptr;
switch (h->spr.picnum)
{
@ -198,32 +197,32 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
case TRIPBOMBSPRITE:
continue;
case FORCESPHERE:
if (t->statnum == STAT_MISC && Owner)
if (t->statnum == STAT_MISC && OwnerAc)
{
int sqa =
getangle(
Owner->x - ps[screenpeek].pos.x,
Owner->y - ps[screenpeek].pos.y);
OwnerAc->spr.x - ps[screenpeek].pos.x,
OwnerAc->spr.y - ps[screenpeek].pos.y);
int sqb =
getangle(
Owner->x - t->x,
Owner->y - t->y);
OwnerAc->spr.x - t->x,
OwnerAc->spr.y - t->y);
if (abs(getincangle(sqa, sqb)) > 512)
if (ldist(Owner, t) < ldist(ps[screenpeek].GetActor()->s, Owner))
if (ldist(OwnerAc, t) < ldist(ps[screenpeek].GetActor(), OwnerAc))
t->xrepeat = t->yrepeat = 0;
}
continue;
case BURNING:
if (Owner && Owner->statnum == STAT_PLAYER)
if (OwnerAc && OwnerAc->spr.statnum == STAT_PLAYER)
{
if (display_mirror == 0 && Owner->yvel == screenpeek && ps[Owner->yvel].over_shoulder_on == 0)
if (display_mirror == 0 && OwnerAc->spr.yvel == screenpeek && ps[OwnerAc->spr.yvel].over_shoulder_on == 0)
t->xrepeat = 0;
else
{
t->ang = getangle(x - t->x, y - t->y);
t->x = Owner->x;
t->y = Owner->y;
t->x = OwnerAc->spr.x;
t->y = OwnerAc->spr.y;
t->x += bcos(t->ang, -10);
t->y += bsin(t->ang, -10);
}
@ -237,7 +236,7 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
t->shade = bsin(PlayClock << 4, -10);
break;
case SHRINKSPARK:
if (Owner && (Owner->picnum == CHEER || Owner->picnum == CHEERSTAYPUT) && isRRRA())
if (OwnerAc && (OwnerAc->spr.picnum == CHEER || OwnerAc->spr.picnum == CHEERSTAYPUT) && isRRRA())
{
t->picnum = CHEERBLADE + ((PlayClock >> 4) & 3);
t->shade = -127;
@ -253,16 +252,16 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
}
else goto default_case;
case SPIT:
if (isRRRA() && Owner)
if (isRRRA() && OwnerAc)
{
if (Owner->picnum == MINION && Owner->pal == 8)
if (OwnerAc->spr.picnum == MINION && OwnerAc->spr.pal == 8)
t->picnum = RRTILE3500 + ((PlayClock >> 4) % 6);
else if (Owner->picnum == MINION && Owner->pal == 19)
else if (OwnerAc->spr.picnum == MINION && OwnerAc->spr.pal == 19)
{
t->picnum = RRTILE5090 + ((PlayClock >> 4) & 3);
t->shade = -127;
}
else if (Owner->picnum == MAMA)
else if (OwnerAc->spr.picnum == MAMA)
{
k = getangle(h->spr.x - x, h->spr.y - y);
k = (((h->spr.ang + 3072 + 128 - k) & 2047) >> 8) & 7;
@ -814,7 +813,7 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
break;
case FIRE:
case BURNING:
if (Owner && Owner->picnum != TREE1 && Owner->picnum != TREE2)
if (OwnerAc && OwnerAc->spr.picnum != TREE1 && OwnerAc->spr.picnum != TREE2)
t->z = t->sector()->floorz;
t->shade = -127;
break;
@ -913,7 +912,7 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
t->picnum = h->spr.picnum + k + ((h->temp_data[0] < 4) * 5);
if (Owner) t->shade = Owner->shade;
if (OwnerAc) t->shade = OwnerAc->spr.shade;
break;
case MUD:
t->picnum = MUD + t1;
@ -933,25 +932,25 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
if (h->temp_data[0] > 2) t->cstat &= ~CSTAT_SPRITE_XFLIP | CSTAT_SPRITE_YFLIP;
break;
case FRAMEEFFECT1:
if (Owner && Owner->statnum < MAXSTATUS)
if (OwnerAc && OwnerAc->spr.statnum < MAXSTATUS)
{
if (Owner->picnum == APLAYER)
if (OwnerAc->spr.picnum == APLAYER)
if (ud.cameraactor == nullptr)
if (screenpeek == Owner->yvel && display_mirror == 0)
if (screenpeek == OwnerAc->spr.yvel && display_mirror == 0)
{
t->ownerActor = nullptr;
break;
}
if ((Owner->cstat & CSTAT_SPRITE_INVISIBLE) == 0)
if ((OwnerAc->spr.cstat & CSTAT_SPRITE_INVISIBLE) == 0)
{
if (Owner->picnum == APLAYER)
if (OwnerAc->spr.picnum == APLAYER)
t->picnum = 1554;
else
t->picnum = OwnerAc->dispicnum;
t->pal = Owner->pal;
t->shade = Owner->shade;
t->ang = Owner->ang;
t->cstat = CSTAT_SPRITE_TRANSLUCENT | Owner->cstat;
t->pal = OwnerAc->spr.pal;
t->shade = OwnerAc->spr.shade;
t->ang = OwnerAc->spr.ang;
t->cstat = CSTAT_SPRITE_TRANSLUCENT | OwnerAc->spr.cstat;
}
}
break;

View file

@ -21,16 +21,6 @@ inline int player_struct::GetPlayerNum()
DDukeActor* spawn(DDukeActor* spawner, int type);
inline int ldist(DDukeActor* s1, DDukeActor* s2)
{
return ldist(s1->s, s2->s);
}
inline int dist(DDukeActor* s1, DDukeActor* s2)
{
return dist(s1->s, s2->s);
}
inline int badguy(DDukeActor* pSprite)
{
return badguypic(pSprite->spr.picnum);

View file

@ -81,29 +81,27 @@ inline int checkcursectnums(sectortype* se)
return -1;
}
// These are from duke's sector.c
inline int ldist(const spritetype* s1, const spritetype* s2)
inline int ldist(DDukeActor* s1, DDukeActor* s2)
{
int vx, vy;
vx = s1->x - s2->x;
vy = s1->y - s2->y;
vx = s1->spr.x - s2->spr.x;
vy = s1->spr.y - s2->spr.y;
return(FindDistance2D(vx, vy) + 1);
}
inline int ldist(const spritetype* s1, const tspritetype* s2)
inline int ldist(const DDukeActor* s1, const tspritetype* s2)
{
int vx, vy;
vx = s1->x - s2->x;
vy = s1->y - s2->y;
vx = s1->spr.x - s2->x;
vy = s1->spr.y - s2->y;
return(FindDistance2D(vx, vy) + 1);
}
inline int dist(const spritetype* s1, const spritetype* s2)
inline int dist(DDukeActor* s1, DDukeActor* s2)
{
int vx, vy, vz;
vx = s1->x - s2->x;
vy = s1->y - s2->y;
vz = s1->z - s2->z;
vx = s1->spr.x - s2->spr.x;
vy = s1->spr.y - s2->spr.y;
vz = s1->spr.z - s2->spr.z;
return(FindDistance3D(vx, vy, vz));
}

View file

@ -984,7 +984,6 @@ void checkhitwall_r(DDukeActor* spr, walltype* wal, int x, int y, int z, int atw
{
int j;
int sn = -1, darkestwall;
spritetype* s;
if (wal->overpicnum == MIRROR)
{

View file

@ -354,11 +354,9 @@ void DukeSoundEngine::CalcPosVel(int type, const void* source, const float pt[3]
else if (type == SOURCE_Actor)
{
auto aactor = (DDukeActor*)source;
auto aspr = aactor ? aactor->s : nullptr;
assert(aspr != nullptr);
if (aspr != nullptr)
if (aactor != nullptr)
{
GetPositionInfo(aactor, chanSound - 1, camsect, campos, &aspr->pos, nullptr, pos);
GetPositionInfo(aactor, chanSound - 1, camsect, campos, &aactor->spr.pos, nullptr, pos);
/*
if (vel) // DN3D does not properly maintain this.
{

View file

@ -50,9 +50,9 @@ public:
sectortype* temp_sect, *actorstayput;
TObjPtr<DDukeActor*> temp_actor, seek_actor;
spritetype* s; // direct reference to the corresponding sprite.
TArray<GameVarValue> uservars;
spritetype* s;
// Todo: Once we start assigning subclasses to actors, this one needs to be moved to the proper FIREBALL subclass.
FireProj fproj;
@ -95,19 +95,19 @@ public:
inline bool IsActiveCrane()
{
return s->owner == -2;
return spr.owner == -2;
}
inline void SetActiveCrane(bool yes)
{
ownerActor = nullptr;
s->owner = yes ? -2 : -1;
spr.owner = yes ? -2 : -1;
}
int PlayerIndex() const
{
// only valid for real players - just here to abstract yvel.
return s->yvel;
return spr.yvel;
}
void Serialize(FSerializer& arc) override;