- Wrap access to previous yaw.

This commit is contained in:
Mitchell Richters 2022-11-25 18:35:36 +11:00 committed by Christoph Oelckers
parent be466fec8d
commit 850c988dfa
13 changed files with 37 additions and 35 deletions

View file

@ -347,7 +347,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, PlayerAngles& w, P
if (arc.isReading())
{
w.ZzOLDANGLE = w.ZzANGLE();
w.ZzOLDANGLE() = w.ZzANGLE();
w.ZzOLDLOOKANG = w.ZzLOOKANG;
w.ZzOLDROTSCRNANG = w.ZzROTSCRNANG;
w.legacyDisabledYaw = w.legacyDisabledYaw;

View file

@ -15,6 +15,8 @@ struct PlayerAngles
DAngle& ZzOLDHORIZON() { return prevHoriz; }
DAngle thisAngle;
DAngle& ZzANGLE() { return thisAngle; }
DAngle prevAngle;
DAngle& ZzOLDANGLE() { return prevAngle; }
friend FSerializer& Serialize(FSerializer& arc, const char* keyname, PlayerAngles& w, PlayerAngles* def);
@ -86,7 +88,7 @@ struct PlayerAngles
else
{
ZzANGLE() = value;
if (backup) ZzOLDANGLE = ZzANGLE();
if (backup) ZzOLDANGLE() = ZzANGLE();
}
}
@ -146,7 +148,7 @@ struct PlayerAngles
DAngle horizLERPSUM(double const interpfrac) { return interpolatedvalue(horizOLDSUM(), horizSUM(), interpfrac); }
void resetAdjustmentPitch() { legacyAdjustmentPitch = nullAngle; }
DAngle ZzOLDANGLE, ZzLOOKANG, ZzOLDLOOKANG, ZzROTSCRNANG, ZzOLDROTSCRNANG, YawSpin;
DAngle ZzLOOKANG, ZzOLDLOOKANG, ZzROTSCRNANG, ZzOLDROTSCRNANG, YawSpin;
void processLegacyHelperYaw(double const scaleAdjust)
{
if (targetedYaw())
@ -170,20 +172,20 @@ struct PlayerAngles
}
void backupYaw()
{
ZzOLDANGLE = ZzANGLE();
ZzOLDANGLE() = ZzANGLE();
ZzOLDLOOKANG = ZzLOOKANG;
ZzOLDROTSCRNANG = ZzROTSCRNANG;
}
void restoreYaw()
{
ZzANGLE() = ZzOLDANGLE;
ZzANGLE() = ZzOLDANGLE();
ZzLOOKANG = ZzOLDLOOKANG;
ZzROTSCRNANG = ZzOLDROTSCRNANG;
}
DAngle angOLDSUM() { return ZzOLDANGLE + ZzOLDLOOKANG; }
DAngle angOLDSUM() { return ZzOLDANGLE() + ZzOLDLOOKANG; }
DAngle angSUM() { return ZzANGLE() + ZzLOOKANG; }
DAngle angLERPSUM(double const interpfrac) { return interpolatedvalue(angOLDSUM(), angSUM(), interpfrac); }
DAngle angLERPANG(double const interpfrac) { return interpolatedvalue(ZzOLDANGLE, ZzANGLE(), interpfrac); }
DAngle angLERPANG(double const interpfrac) { return interpolatedvalue(ZzOLDANGLE(), ZzANGLE(), interpfrac); }
DAngle angLERPLOOKANG(double const interpfrac) { return interpolatedvalue(ZzOLDLOOKANG, ZzLOOKANG, interpfrac); }
DAngle angLERPROTSCRN(double const interpfrac) { return interpolatedvalue(ZzOLDROTSCRNANG, ZzROTSCRNANG, interpfrac); }
DAngle angRENDERLOOKANG(double const interpfrac) { return !SyncInput() ? ZzLOOKANG : angLERPLOOKANG(interpfrac); }

View file

@ -40,7 +40,7 @@ void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang)
if (ang != DAngle::fromDeg(INT_MIN))
{
pPlayer->Angles.ZzOLDANGLE = pPlayer->Angles.ZzANGLE() = ang;
pPlayer->Angles.ZzOLDANGLE() = pPlayer->Angles.ZzANGLE() = ang;
}
}

View file

@ -401,7 +401,7 @@ void moveplayers(void)
{
act->restorepos();
act->backupz();
act->spr.Angles.Yaw = p->Angles.ZzOLDANGLE;
act->spr.Angles.Yaw = p->Angles.ZzOLDANGLE();
SetActor(act, act->spr.pos);
}
else

View file

@ -123,7 +123,7 @@ void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang)
if (ang != DAngle::fromDeg(INT_MIN))
{
p->Angles.ZzOLDANGLE = p->Angles.ZzANGLE() = ang;
p->Angles.ZzOLDANGLE() = p->Angles.ZzANGLE() = ang;
}
}

View file

@ -274,13 +274,13 @@ void drawoverlays(double interpfrac)
else
{
cposxy = interpolatedvalue(pp->GetActor()->getPrevPosWithOffsetZ(), pp->GetActor()->getPosWithOffsetZ(), interpfrac).XY();
cang = !SyncInput() ? pp->Angles.ZzANGLE() : interpolatedvalue(pp->Angles.ZzOLDANGLE, pp->Angles.ZzANGLE(), interpfrac);
cang = !SyncInput() ? pp->Angles.ZzANGLE() : interpolatedvalue(pp->Angles.ZzOLDANGLE(), pp->Angles.ZzANGLE(), interpfrac);
}
}
else
{
cposxy = pp->GetActor()->opos.XY();
cang = pp->Angles.ZzOLDANGLE;
cang = pp->Angles.ZzOLDANGLE();
}
DrawOverheadMap(cposxy, cang, interpfrac);
RestoreInterpolations();

View file

@ -477,7 +477,7 @@ void DoPlayer(bool bSet, int lVar1, int lLabelID, int lVar2, DDukeActor* sActor,
break;
case PLAYER_OANG:
if (!bSet) SetGameVarID(lVar2, ps[iPlayer].Angles.ZzOLDANGLE.Buildang(), sActor, sPlayer);
if (!bSet) SetGameVarID(lVar2, ps[iPlayer].Angles.ZzOLDANGLE().Buildang(), sActor, sPlayer);
break;
case PLAYER_ANGVEL: // This no longer exists.

View file

@ -72,7 +72,7 @@ void pickrandomspot(int snum)
p->GetActor()->spr.pos = po[i].opos;
p->GetActor()->backuppos();
p->setbobpos();
p->Angles.ZzOLDANGLE = p->Angles.ZzANGLE() = po[i].oa;
p->Angles.ZzOLDANGLE() = p->Angles.ZzANGLE() = po[i].oa;
p->setCursector(po[i].os);
}
@ -627,7 +627,7 @@ void resetpspritevars(int g, const DVector3& startpos)
act->SetOwner(act);
ps[j].setbobpos();
ps[j].Angles.ZzOLDANGLE = ps[j].Angles.ZzANGLE() = act->spr.Angles.Yaw; // check me out later.
ps[j].Angles.ZzOLDANGLE() = ps[j].Angles.ZzANGLE() = act->spr.Angles.Yaw; // check me out later.
updatesector(act->spr.pos, &ps[j].cursector);

View file

@ -1516,17 +1516,17 @@ void checksectors_d(int snum)
return;
}
if (p->newOwner != nullptr)
neartag(p->GetActor()->getPrevPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPrevPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
else
{
neartag(p->GetActor()->getPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
if (near.actor() == nullptr && near.hitWall == nullptr && near.hitSector == nullptr)
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(8), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(8), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
if (near.actor() == nullptr && near.hitWall == nullptr && near.hitSector == nullptr)
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
if (near.actor() == nullptr && near.hitWall == nullptr && near.hitSector == nullptr)
{
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag | NT_Hitag);
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag | NT_Hitag);
if (near.actor() != nullptr)
{
switch (near.actor()->spr.picnum)

View file

@ -2379,21 +2379,21 @@ void checksectors_r(int snum)
}
return;
}
neartag(p->GetActor()->getPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near , 80., NT_Lotag | NT_Hitag);
neartag(p->GetActor()->getPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near , 80., NT_Lotag | NT_Hitag);
}
if (p->newOwner != nullptr)
neartag(p->GetActor()->getPrevPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPrevPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
else
{
neartag(p->GetActor()->getPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPosWithOffsetZ(), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
if (near.actor() == nullptr && near.hitWall == nullptr && near.hitSector == nullptr)
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(8), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(8), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
if (near.actor() == nullptr && near.hitWall == nullptr && near.hitSector == nullptr)
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag);
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag);
if (near.actor() == nullptr && near.hitWall == nullptr && near.hitSector == nullptr)
{
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE, near, 80., NT_Lotag | NT_Hitag);
neartag(p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector(), p->Angles.ZzOLDANGLE(), near, 80., NT_Lotag | NT_Hitag);
if (near.actor() != nullptr)
{
switch (near.actor()->spr.picnum)

View file

@ -48,7 +48,7 @@ void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang)
if (ang != DAngle::fromDeg(INT_MIN))
{
nPlayer->Angles.ZzOLDANGLE = nPlayer->Angles.ZzANGLE() = ang;
nPlayer->Angles.ZzOLDANGLE() = nPlayer->Angles.ZzANGLE() = ang;
}
}

View file

@ -66,7 +66,7 @@ void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang)
if (ang != DAngle::fromDeg(INT_MIN))
{
Player->Angles.ZzOLDANGLE = Player->Angles.ZzANGLE() = ang;
Player->Angles.ZzOLDANGLE() = Player->Angles.ZzANGLE() = ang;
}
}

View file

@ -1311,7 +1311,7 @@ void DoPlayerTeleportPause(PLAYER* pp)
void DoPlayerTeleportToSprite(PLAYER* pp, DVector3& pos, DAngle ang)
{
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE = ang;
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = ang;
pp->actor->spr.pos = pos;
pp->actor->backuppos();
@ -5122,7 +5122,7 @@ void DoPlayerBeginOperate(PLAYER* pp)
pp->sop = pp->sop_control = sop;
sop->controller = pp->actor;
pp->Angles.ZzOLDANGLE = pp->Angles.ZzANGLE() = sop->ang;
pp->Angles.ZzOLDANGLE() = pp->Angles.ZzANGLE() = sop->ang;
pp->actor->spr.pos.XY() = sop->pmid.XY();
updatesector(pp->actor->getPosWithOffsetZ(), &pp->cursector);
calcSlope(pp->cursector, pp->actor->getPosWithOffsetZ(), &cz, &fz);
@ -5212,7 +5212,7 @@ void DoPlayerBeginRemoteOperate(PLAYER* pp, SECTOR_OBJECT* sop)
auto save_sect = pp->cursector;
pp->Angles.ZzOLDANGLE = pp->Angles.ZzANGLE() = sop->ang;
pp->Angles.ZzOLDANGLE() = pp->Angles.ZzANGLE() = sop->ang;
pp->actor->spr.pos.XY() = sop->pmid.XY();
updatesector(pp->actor->getPosWithOffsetZ(), &pp->cursector);
calcSlope(pp->cursector, pp->actor->getPosWithOffsetZ(), &cz, &fz);
@ -5334,9 +5334,9 @@ void DoPlayerStopOperate(PLAYER* pp)
{
DSWActor* rsp = pp->remoteActor;
if (TEST_BOOL1(rsp))
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE = rsp->spr.Angles.Yaw; // check me out later.
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = rsp->spr.Angles.Yaw; // check me out later.
else
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE = (pp->sop_remote->pmid.XY() - pp->actor->spr.pos.XY()).Angle();
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = (pp->sop_remote->pmid.XY() - pp->actor->spr.pos.XY()).Angle();
}
if (pp->sop_control)
@ -7047,7 +7047,7 @@ void InitAllPlayers(void)
// Initialize all [MAX_SW_PLAYERS] arrays here!
for (pp = Player; pp < &Player[MAX_SW_PLAYERS]; pp++)
{
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE = pfirst->Angles.ZzANGLE();
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = pfirst->Angles.ZzANGLE();
pp->Angles.ZzHORIZON() = pp->Angles.ZzOLDHORIZON() = pfirst->Angles.ZzHORIZON();
pp->cursector = pfirst->cursector;
// set like this so that player can trigger something on start of the level
@ -7203,7 +7203,7 @@ void PlayerSpawnPosition(PLAYER* pp)
ASSERT(spawn_sprite != nullptr);
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE = spawn_sprite->spr.Angles.Yaw; // check me out later.
pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = spawn_sprite->spr.Angles.Yaw; // check me out later.
pp->setcursector(spawn_sprite->sector());
if (pp->actor)