diff --git a/src/p_mobj.c b/src/p_mobj.c index 0ec069471c6f0b92341f08ba5ae76e39835b6f44..a20f5e1c3ef1fd0a73223351ea502aee234fb8ad 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -892,6 +892,30 @@ void P_EmeraldManager(void) emeraldspawndelay = 0; } +// +// P_ResetInterpolationState +// +// Reset the rendering interpolation state of the mobj. +// +void P_ResetInterpolationState(mobj_t *mobj) +{ + mobj->old_x = mobj->x; + mobj->old_y = mobj->y; + mobj->old_z = mobj->z; +} + +// +// P_ResetPrecipitationInterpolationState +// +// Reset the rendering interpolation state of the precipmobj. +// +void P_ResetPrecipitationInterpolationState(precipmobj_t *mobj) +{ + mobj->old_x = mobj->x; + mobj->old_y = mobj->y; + mobj->old_z = mobj->z; +} + // // P_ExplodeMissile // @@ -4026,10 +4050,7 @@ void P_NullPrecipThinker(precipmobj_t *mobj) void P_SnowThinker(precipmobj_t *mobj) { - // reset old state (for interpolation) - mobj->old_x = mobj->x; - mobj->old_y = mobj->y; - mobj->old_z = mobj->z; + P_ResetPrecipitationInterpolationState(mobj); P_CycleStateAnimation((mobj_t *)mobj); @@ -4040,10 +4061,7 @@ void P_SnowThinker(precipmobj_t *mobj) void P_RainThinker(precipmobj_t *mobj) { - // reset old state (for interpolation) - mobj->old_x = mobj->x; - mobj->old_y = mobj->y; - mobj->old_z = mobj->z; + P_ResetPrecipitationInterpolationState(mobj); P_CycleStateAnimation((mobj_t *)mobj); @@ -10041,10 +10059,7 @@ void P_MobjThinker(mobj_t *mobj) I_Assert(mobj != NULL); I_Assert(!P_MobjWasRemoved(mobj)); - // Set old position (for interpolation) - mobj->old_x = mobj->x; - mobj->old_y = mobj->y; - mobj->old_z = mobj->z; + P_ResetInterpolationState(mobj); if (mobj->flags & MF_NOTHINK) return; @@ -10911,10 +10926,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) if (CheckForReverseGravity && !(mobj->flags & MF_NOBLOCKMAP)) P_CheckGravity(mobj, false); - // set old state too (for interpolation) - mobj->old_x = mobj->x; - mobj->old_y = mobj->y; - mobj->old_z = mobj->z; + P_ResetInterpolationState(mobj); return mobj; } @@ -10963,10 +10975,7 @@ static precipmobj_t *P_SpawnPrecipMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype || mobj->subsector->sector->floorpic == skyflatnum) mobj->precipflags |= PCF_PIT; - // set initial old positions (for interpolation) - mobj->old_x = mobj->x; - mobj->old_y = mobj->y; - mobj->old_z = mobj->z; + P_ResetPrecipitationInterpolationState(mobj); return mobj; } diff --git a/src/p_mobj.h b/src/p_mobj.h index 702fd40474411cd7fe8e0dc0523d532918d99f0a..7f2736801f4a5c3599a6dc874928bce7c70606ad 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -501,6 +501,8 @@ void P_RingZMovement(mobj_t *mo); boolean P_SceneryZMovement(mobj_t *mo); void P_PlayerZMovement(mobj_t *mo); void P_EmeraldManager(void); +void P_ResetInterpolationState(mobj_t *mobj); +void P_ResetPrecipitationInterpolationState(precipmobj_t *mobj); extern INT32 modulothing;