From 40c576f6525015d3b5bebfd6a155ad0e989ed55e Mon Sep 17 00:00:00 2001 From: havoc Date: Wed, 21 Jan 2004 09:22:19 +0000 Subject: [PATCH] wrap angles on rotating pushers because large angle values are bad for precision git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3827 d7cf8633-e32d-0410-b094-e92efae38249 --- sv_phys.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/sv_phys.c b/sv_phys.c index e6eb2459..7189b842 100644 --- a/sv_phys.c +++ b/sv_phys.c @@ -547,6 +547,12 @@ void SV_PushMove (edict_t *pusher, float movetime) int num_moved; model_t *pushermodel; + if (!pusher->v->velocity[0] && !pusher->v->velocity[1] && !pusher->v->velocity[2] && !pusher->v->avelocity[0] && !pusher->v->avelocity[1] && !pusher->v->avelocity[2]) + { + pusher->v->ltime += movetime; + return; + } + switch ((int) pusher->v->solid) { // LordHavoc: valid pusher types @@ -560,17 +566,15 @@ void SV_PushMove (edict_t *pusher, float movetime) case SOLID_TRIGGER: VectorMA (pusher->v->origin, movetime, pusher->v->velocity, pusher->v->origin); VectorMA (pusher->v->angles, movetime, pusher->v->avelocity, pusher->v->angles); + pusher->v->angles[0] -= 360.0 * floor(pusher->v->angles[0] * (1.0 / 360.0)); + pusher->v->angles[1] -= 360.0 * floor(pusher->v->angles[1] * (1.0 / 360.0)); + pusher->v->angles[2] -= 360.0 * floor(pusher->v->angles[2] * (1.0 / 360.0)); pusher->v->ltime += movetime; SV_LinkEdict (pusher, false); return; default: Host_Error("SV_PushMove: unrecognized solid type %f\n", pusher->v->solid); } - if (!pusher->v->velocity[0] && !pusher->v->velocity[1] && !pusher->v->velocity[2] && !pusher->v->avelocity[0] && !pusher->v->avelocity[1] && !pusher->v->avelocity[2]) - { - pusher->v->ltime += movetime; - return; - } index = (int) pusher->v->modelindex; if (index < 1 || index >= MAX_MODELS) Host_Error("SV_PushMove: invalid modelindex %f\n", pusher->v->modelindex); @@ -741,10 +745,13 @@ void SV_PushMove (edict_t *pusher, float movetime) pr_global_struct->other = EDICT_TO_PROG(check); PR_ExecuteProgram (pusher->v->blocked, ""); } - return; + break; } } } + pusher->v->angles[0] -= 360.0 * floor(pusher->v->angles[0] * (1.0 / 360.0)); + pusher->v->angles[1] -= 360.0 * floor(pusher->v->angles[1] * (1.0 / 360.0)); + pusher->v->angles[2] -= 360.0 * floor(pusher->v->angles[2] * (1.0 / 360.0)); } /* -- 2.39.2