From 064b11dd64ba00551bd5382ad2de161c532b4297 Mon Sep 17 00:00:00 2001 From: divverent Date: Fri, 8 May 2009 09:58:13 +0000 Subject: [PATCH] simplifying Warsow-style physics code even more, as it now can use a common code path with Quake-style physics (the only difference there is is when moving forward only). This could be done after the observation that CPMA-style acceleration never kicks in in Warsow mode. The sv_aircontrol is now expected to be zero in Warsow-style mode, as it does nothing in that mode anyway! If you do set it, you get Warsow and CPMA air control added! git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8952 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_input.c | 73 ++++++++++++++++-------------------------------------- 1 file changed, 21 insertions(+), 52 deletions(-) diff --git a/cl_input.c b/cl_input.c index 2e87ef2c..19938660 100644 --- a/cl_input.c +++ b/cl_input.c @@ -1152,68 +1152,37 @@ void CL_ClientMovement_Physics_Walk(cl_clientmovement_state_t *s) { // apply air speed limit vec_t accel, wishspeed2; + qboolean accelerating; + wishspeed = min(wishspeed, cl.movevars_maxairspeed); if (s->crouched) wishspeed *= 0.5; accel = cl.movevars_airaccelerate; + + accelerating = (DotProduct(s->velocity, wishdir) > 0); wishspeed2 = wishspeed; - if(cl.movevars_warsowbunny_turnaccel) + // CPM: air control + if(cl.movevars_airstopaccelerate != 0) + if(DotProduct(s->velocity, wishdir) < 0) + accel = cl.movevars_airstopaccelerate; + if(s->cmd.forwardmove == 0 && s->cmd.sidemove != 0) { - qboolean accelerating, decelerating; - //qboolean aircontrol; - accelerating = (DotProduct(s->velocity, wishdir) > 0); - decelerating = (DotProduct(s->velocity, wishdir) < 0); - //aircontrol = false; - - if(accelerating && s->cmd.sidemove == 0 && s->cmd.forwardmove != 0) - { - CL_ClientMovement_Physics_PM_AirAccelerate(s, wishdir, wishspeed2); - } - else - { - // CPM: air control - if(cl.movevars_airstopaccelerate != 0) - if(DotProduct(s->velocity, wishdir) < 0) - accel = cl.movevars_airstopaccelerate; - if(s->cmd.forwardmove == 0 && s->cmd.sidemove != 0) - { - if(cl.movevars_maxairstrafespeed) - if(wishspeed > cl.movevars_maxairstrafespeed) - wishspeed = cl.movevars_maxairstrafespeed; - if(cl.movevars_airstrafeaccelerate) - accel = cl.movevars_airstrafeaccelerate; - //if(cl.movevars_aircontrol) - //aircontrol = true; - } - // !CPM - - CL_ClientMovement_Physics_PM_Accelerate(s, wishdir, wishspeed, accel, cl.movevars_airaccel_qw, cl.movevars_airaccel_sideways_friction / cl.movevars_maxairspeed); - //if(aircontrol) - //CL_ClientMovement_Physics_CPM_PM_Aircontrol(s, wishdir, wishspeed2); - // div0: this never kicks in, as aircontrol is only set to TRUE if self.movement_x == 0 && self.movement_y != 0, but then the function does nothing - } + if(cl.movevars_maxairstrafespeed) + if(wishspeed > cl.movevars_maxairstrafespeed) + wishspeed = cl.movevars_maxairstrafespeed; + if(cl.movevars_airstrafeaccelerate) + accel = cl.movevars_airstrafeaccelerate; } - else - { - // CPM: air control - if(cl.movevars_airstopaccelerate != 0) - if(DotProduct(s->velocity, wishdir) < 0) - accel = cl.movevars_airstopaccelerate; - if(s->cmd.forwardmove == 0 && s->cmd.sidemove != 0) - { - if(cl.movevars_maxairstrafespeed) - if(wishspeed > cl.movevars_maxairstrafespeed) - wishspeed = cl.movevars_maxairstrafespeed; - if(cl.movevars_airstrafeaccelerate) - accel = cl.movevars_airstrafeaccelerate; - } - // !CPM + // !CPM + if(cl.movevars_warsowbunny_turnaccel && accelerating && s->cmd.sidemove == 0 && s->cmd.forwardmove != 0) + CL_ClientMovement_Physics_PM_AirAccelerate(s, wishdir, wishspeed2); + else CL_ClientMovement_Physics_PM_Accelerate(s, wishdir, wishspeed, accel, cl.movevars_airaccel_qw, cl.movevars_airaccel_sideways_friction / cl.movevars_maxairspeed); - if(cl.movevars_aircontrol) - CL_ClientMovement_Physics_CPM_PM_Aircontrol(s, wishdir, wishspeed2); - } + + if(cl.movevars_aircontrol) + CL_ClientMovement_Physics_CPM_PM_Aircontrol(s, wishdir, wishspeed2); } s->velocity[2] -= cl.movevars_gravity * cl.movevars_entgravity * s->cmd.frametime; CL_ClientMovement_Move(s); -- 2.39.2