- 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;
}
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)
{

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);
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;
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);
@ -627,7 +627,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
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)
p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->posZget()) * 2));

View file

@ -3038,7 +3038,7 @@ HORIZONLY:
ChangeActorSect(pact, p->cursector);
}
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)
p->posZadd(32);
@ -3090,7 +3090,7 @@ HORIZONLY:
while (ud.clipping == 0)
{
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)
{

View file

@ -3742,7 +3742,7 @@ HORIZONLY:
ChangeActorSect(pact, p->cursector);
}
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)
p->posZadd(32);
@ -3771,10 +3771,10 @@ HORIZONLY:
if (wal->lotag < 44)
{
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
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;
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
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)
{