- Duke: Route all clipmove()/pushmove() calls through a new interface that accepts a separated Z coordinate.

This commit is contained in:
Mitchell Richters 2022-11-20 18:46:19 +11:00 committed by Christoph Oelckers
parent a6a4cefa6c
commit e9dcffc5ec
5 changed files with 26 additions and 9 deletions

View file

@ -442,6 +442,15 @@ inline int clipmove(DVector3& pos, sectortype** const sect, const DVector2& mvec
return result.type; return result.type;
} }
inline int clipmove(DVector2& pos, double z, sectortype** const sect, const DVector2& mvec,
double const walldist, double const ceildist, double const flordist, unsigned const cliptype, CollisionBase& result, int clipmoveboxtracenum = 3)
{
auto vect = DVector3(pos, z);
auto res = clipmove(vect, sect, mvec, walldist, ceildist, flordist, cliptype, result);
pos = vect.XY();
return res;
}
inline PClassActor* PClass::FindActor(FName name) inline PClassActor* PClass::FindActor(FName name)
{ {

View file

@ -268,6 +268,14 @@ bool checkOpening(const DVector2& inpos, double z, const sectortype* sec, const
int pushmove(DVector3& pos, sectortype** pSect, double walldist, double ceildist, double flordist, unsigned cliptype); int pushmove(DVector3& pos, sectortype** pSect, double walldist, double ceildist, double flordist, unsigned cliptype);
tspritetype* renderAddTsprite(tspriteArray& tsprites, DCoreActor* actor); tspritetype* renderAddTsprite(tspriteArray& tsprites, DCoreActor* actor);
inline int pushmove(DVector2& pos, double z, sectortype** pSect, double walldist, double ceildist, double flordist, unsigned cliptype)
{
auto vect = DVector3(pos, z);
auto result = pushmove(vect, pSect, walldist, ceildist, flordist, cliptype);
pos = vect.XY();
return result;
}

View file

@ -618,7 +618,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
} }
Collision coll; Collision coll;
clipmove(p->PlayerNowPosition, &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll); clipmove(p->posXY(), p->posZget(), &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll);
} }
backupplayer(p); backupplayer(p);
@ -627,7 +627,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
updatesector(p->PlayerNowPosition, &p->cursector); updatesector(p->PlayerNowPosition, &p->cursector);
pushmove(p->PlayerNowPosition, &p->cursector, 8, 4, 20, CLIPMASK0); pushmove(p->posXY(), p->posZget(), &p->cursector, 8, 4, 20, CLIPMASK0);
if (floorz > ceilingz + 16 && actor->spr.pal != 1) if (floorz > ceilingz + 16 && actor->spr.pal != 1)
p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->posZget()) * 2)); p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->posZget()) * 2));

View file

@ -3038,7 +3038,7 @@ HORIZONLY:
ChangeActorSect(pact, p->cursector); ChangeActorSect(pact, p->cursector);
} }
else else
clipmove(p->PlayerNowPosition, &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); clipmove(p->posXY(), p->posZget(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip);
if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
p->posZadd(32); p->posZadd(32);
@ -3090,7 +3090,7 @@ HORIZONLY:
while (ud.clipping == 0) while (ud.clipping == 0)
{ {
int blocked; int blocked;
blocked = (pushmove(p->PlayerNowPosition, &p->cursector, 10.25, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); blocked = (pushmove(p->posXY(), p->posZget(), &p->cursector, 10.25, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked)
{ {

View file

@ -3742,7 +3742,7 @@ HORIZONLY:
ChangeActorSect(pact, p->cursector); ChangeActorSect(pact, p->cursector);
} }
else else
clipmove(p->PlayerNowPosition, &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); clipmove(p->posXY(), p->posZget(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip);
if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
p->posZadd(32); p->posZadd(32);
@ -3771,10 +3771,10 @@ HORIZONLY:
if (wal->lotag < 44) if (wal->lotag < 44)
{ {
dofurniture(clip.hitWall, p->cursector, snum); dofurniture(clip.hitWall, p->cursector, snum);
pushmove(p->PlayerNowPosition, &p->cursector, 10.75, 4, 4, CLIPMASK0); pushmove(p->posXY(), p->posZget(), &p->cursector, 10.75, 4, 4, CLIPMASK0);
} }
else else
pushmove(p->PlayerNowPosition, &p->cursector, 10.75, 4, 4, CLIPMASK0); pushmove(p->posXY(), p->posZget(), &p->cursector, 10.75, 4, 4, CLIPMASK0);
} }
} }
} }
@ -3875,9 +3875,9 @@ HORIZONLY:
{ {
int blocked; int blocked;
if (pact->clipdist == 16) if (pact->clipdist == 16)
blocked = (pushmove(p->PlayerNowPosition, &p->cursector, 8, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); blocked = (pushmove(p->posXY(), p->posZget(), &p->cursector, 8, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
else else
blocked = (pushmove(p->PlayerNowPosition, &p->cursector, 1, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); blocked = (pushmove(p->posXY(), p->posZget(), &p->cursector, 1, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked)
{ {