Interpolate mobj angles and player drawangle

This commit is contained in:
Eidolon 2022-04-12 22:54:56 -05:00
parent 5fda1b297f
commit ab7c2dfb3d
4 changed files with 13 additions and 3 deletions

View file

@ -382,6 +382,7 @@ typedef struct player_s
// fun thing for player sprite
angle_t drawangle;
angle_t old_drawangle;
// player's ring count
INT16 rings;

View file

@ -902,6 +902,12 @@ void P_ResetInterpolationState(mobj_t *mobj)
mobj->old_x = mobj->x;
mobj->old_y = mobj->y;
mobj->old_z = mobj->z;
mobj->old_angle = mobj->angle;
if (mobj->player)
{
mobj->player->old_drawangle = mobj->player->drawangle;
}
}
//
@ -914,6 +920,7 @@ void P_ResetPrecipitationInterpolationState(precipmobj_t *mobj)
mobj->old_x = mobj->x;
mobj->old_y = mobj->y;
mobj->old_z = mobj->z;
mobj->old_angle = mobj->angle;
}
//

View file

@ -287,6 +287,7 @@ typedef struct mobj_s
// More drawing info: to determine current sprite.
angle_t angle, pitch, roll; // orientation
angle_t old_angle;
angle_t rollangle;
spritenum_t sprite; // used to find patch_t and flip value
UINT32 frame; // frame number, plus bits see p_pspr.h
@ -415,6 +416,7 @@ typedef struct precipmobj_s
// More drawing info: to determine current sprite.
angle_t angle, pitch, roll; // orientation
angle_t old_angle;
angle_t rollangle;
spritenum_t sprite; // used to find patch_t and flip value
UINT32 frame; // frame number, plus bits see p_pspr.h

View file

@ -185,11 +185,11 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
if (mobj->player)
{
out->angle = mobj->player->drawangle;
out->angle = R_LerpAngle(mobj->player->old_drawangle, mobj->player->drawangle, frac);
}
else
{
out->angle = mobj->angle;
out->angle = R_LerpAngle(mobj->old_angle, mobj->angle, frac);
}
}
@ -198,7 +198,7 @@ void R_InterpolatePrecipMobjState(precipmobj_t *mobj, fixed_t frac, interpmobjst
out->x = R_LerpFixed(mobj->old_x, mobj->x, frac);
out->y = R_LerpFixed(mobj->old_y, mobj->y, frac);
out->z = R_LerpFixed(mobj->old_z, mobj->z, frac);
out->angle = mobj->angle;
out->angle = R_LerpAngle(mobj->old_angle, mobj->angle, frac);
}
static void AddInterpolator(levelinterpolator_t* interpolator)