mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-14 00:21:38 +00:00
- SW: Attempt at making vehicle movement work nicely while uninterpolated.
This commit is contained in:
parent
e24521b189
commit
28a3ef131f
2 changed files with 23 additions and 10 deletions
|
@ -191,6 +191,11 @@ void so_setinterpolationtics(SECTOR_OBJECTp sop, int16_t locktics)
|
||||||
interp->lasttic = locktics;
|
interp->lasttic = locktics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool so_nointerpolations(short track)
|
||||||
|
{
|
||||||
|
return !cl_syncinput && (track >= SO_TURRET_MGUN && track <= SO_VEHICLE);
|
||||||
|
}
|
||||||
|
|
||||||
void so_updateinterpolations(void) // Stick at beginning of domovethings
|
void so_updateinterpolations(void) // Stick at beginning of domovethings
|
||||||
{
|
{
|
||||||
int32_t i;
|
int32_t i;
|
||||||
|
@ -202,8 +207,7 @@ void so_updateinterpolations(void) // Stick at beginning of domovethings
|
||||||
for (sop = SectorObject, interp = so_interpdata;
|
for (sop = SectorObject, interp = so_interpdata;
|
||||||
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
||||||
{
|
{
|
||||||
bool skip = !cl_syncinput && (sop->track == SO_TURRET);
|
if (SO_EMPTY(sop) || so_nointerpolations(sop->track))
|
||||||
if (SO_EMPTY(sop) || skip)
|
|
||||||
continue;
|
continue;
|
||||||
if (interp->tic < interp->lasttic)
|
if (interp->tic < interp->lasttic)
|
||||||
interp->tic += synctics;
|
interp->tic += synctics;
|
||||||
|
@ -241,8 +245,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b
|
||||||
for (sop = SectorObject, interp = so_interpdata;
|
for (sop = SectorObject, interp = so_interpdata;
|
||||||
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
||||||
{
|
{
|
||||||
bool skip = !cl_syncinput && (sop->track == SO_TURRET);
|
if (SO_EMPTY(sop) || so_nointerpolations(sop->track))
|
||||||
if (SO_EMPTY(sop) || skip)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (i = 0; i < interp->numinterpolations; i++)
|
for (i = 0; i < interp->numinterpolations; i++)
|
||||||
|
@ -268,8 +271,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b
|
||||||
for (sop = SectorObject, interp = so_interpdata;
|
for (sop = SectorObject, interp = so_interpdata;
|
||||||
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
||||||
{
|
{
|
||||||
bool skip = !cl_syncinput && (sop->track == SO_TURRET);
|
if (SO_EMPTY(sop) || so_nointerpolations(sop->track))
|
||||||
if (SO_EMPTY(sop) || skip)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Check if interpolation has been explicitly disabled
|
// Check if interpolation has been explicitly disabled
|
||||||
|
@ -329,8 +331,7 @@ void so_restoreinterpolations(void) // Stick at end of drawscree
|
||||||
for (sop = SectorObject, interp = so_interpdata;
|
for (sop = SectorObject, interp = so_interpdata;
|
||||||
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
sop < &SectorObject[MAX_SECTOR_OBJECTS]; sop++, interp++)
|
||||||
{
|
{
|
||||||
bool skip = !cl_syncinput && (sop->track == SO_TURRET);
|
if (SO_EMPTY(sop) || so_nointerpolations(sop->track))
|
||||||
if (SO_EMPTY(sop) || skip)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (i = 0, data = interp->data; i < interp->numinterpolations; i++, data++)
|
for (i = 0, data = interp->data; i < interp->numinterpolations; i++, data++)
|
||||||
|
|
|
@ -1669,6 +1669,11 @@ DoPlayerTurnVehicle(PLAYERp pp, fixed_t q16avel, int z, int floor_dist)
|
||||||
sprite[pp->PlayerSprite].ang = FixedToInt(pp->q16ang);
|
sprite[pp->PlayerSprite].ang = FixedToInt(pp->q16ang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!cl_syncinput)
|
||||||
|
{
|
||||||
|
OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), pp->oposx + mulscale16(pp->posx - pp->oposx, smoothratio), pp->oposy + mulscale16(pp->posy - pp->oposy, smoothratio));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -3042,7 +3047,10 @@ DoPlayerMoveVehicle(PLAYERp pp)
|
||||||
}
|
}
|
||||||
|
|
||||||
save_sectnum = pp->cursectnum;
|
save_sectnum = pp->cursectnum;
|
||||||
|
if (cl_syncinput)
|
||||||
|
{
|
||||||
OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), MAXSO, MAXSO);
|
OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), MAXSO, MAXSO);
|
||||||
|
}
|
||||||
pp->cursectnum = pp->sop->op_main_sector; // for speed
|
pp->cursectnum = pp->sop->op_main_sector; // for speed
|
||||||
|
|
||||||
floor_dist = labs(z - pp->sop->floor_loz);
|
floor_dist = labs(z - pp->sop->floor_loz);
|
||||||
|
@ -3146,7 +3154,11 @@ DoPlayerMoveVehicle(PLAYERp pp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cl_syncinput)
|
||||||
|
{
|
||||||
OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), pp->posx, pp->posy);
|
OperateSectorObject(pp->sop, FixedToInt(pp->q16ang), pp->posx, pp->posy);
|
||||||
|
}
|
||||||
|
|
||||||
pp->cursectnum = save_sectnum; // for speed
|
pp->cursectnum = save_sectnum; // for speed
|
||||||
|
|
||||||
if (!cl_syncinput)
|
if (!cl_syncinput)
|
||||||
|
|
Loading…
Reference in a new issue