From 2dae6833c295ad41438ae9b09830f223314c7731 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Thu, 2 Mar 2023 20:51:45 -0500 Subject: [PATCH] Fix camera jitter when changing waypoints --- src/p_mobj.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index a99383506..9de016f60 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9500,30 +9500,30 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (mobj->tracer != NULL && P_MobjWasRemoved(mobj->tracer) == false) { + fixed_t newX = Easing_Linear(mobj->movecount, mobj->extravalue1, mobj->tracer->x); + fixed_t newY = Easing_Linear(mobj->movecount, mobj->extravalue2, mobj->tracer->y); + fixed_t newZ = Easing_Linear(mobj->movecount, mobj->cusval, mobj->tracer->z); + + mobj->angle = Easing_Linear(mobj->movecount, mobj->movedir, mobj->tracer->angle); + mobj->pitch = Easing_Linear(mobj->movecount, mobj->lastlook, mobj->tracer->pitch); + + mobj->momx = newX - mobj->x; + mobj->momy = newY - mobj->y; + mobj->momz = newZ - mobj->z; + mobj->movecount += mobj->movefactor; - if (mobj->movecount < FRACUNIT) + if (mobj->movecount >= FRACUNIT) { - fixed_t newX = Easing_Linear(mobj->movecount, mobj->extravalue1, mobj->tracer->x); - fixed_t newY = Easing_Linear(mobj->movecount, mobj->extravalue2, mobj->tracer->y); - fixed_t newZ = Easing_Linear(mobj->movecount, mobj->cusval, mobj->tracer->z); + mobj->movecount = mobj->movecount % FRACUNIT; // time - mobj->angle = Easing_Linear(mobj->movecount, mobj->movedir, mobj->tracer->angle); - mobj->pitch = Easing_Linear(mobj->movecount, mobj->lastlook, mobj->tracer->pitch); + mobj->movedir = mobj->tracer->angle; // start angle + mobj->lastlook = mobj->tracer->pitch; // start pitch + mobj->extravalue1 = mobj->tracer->x; // start x + mobj->extravalue2 = mobj->tracer->y; // start y + mobj->cusval = mobj->tracer->z; // start z - mobj->momx = newX - mobj->x; - mobj->momy = newY - mobj->y; - mobj->momz = newZ - mobj->z; - } - else - { P_SetTarget(&mobj->tracer, P_GetNextTubeWaypoint(mobj->tracer, false)); - mobj->movecount = 0; // time - mobj->movedir = mobj->angle; // start angle - mobj->lastlook = mobj->pitch; // start pitch - mobj->extravalue1 = mobj->x; // start x - mobj->extravalue2 = mobj->y; // start y - mobj->cusval = mobj->z; // start z } }