mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-20 18:52:43 +00:00
- Duke: Route all clipmove()
/pushmove()
calls through a new interface that accepts a separated Z coordinate.
This commit is contained in:
parent
a6a4cefa6c
commit
e9dcffc5ec
5 changed files with 26 additions and 9 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue