/* =================== SV_AirMove =================== */ void SV_AirMove (void) { int i; vec3_t wishvel, wishdir; float wishspeed; float fmove, smove; AngleVectors (sv_player->v.angles, forward, right, up); fmove = cmd.forwardmove; smove = cmd.sidemove; // hack to not let you back into teleporter if (sv.time < sv_player->v.teleport_time && fmove < 0) fmove = 0; for (i=0 ; i<3 ; i++) wishvel[i] = forward[i]*fmove + right[i]*smove; if ( (int)sv_player->v.movetype != MOVETYPE_WALK) wishvel[2] = cmd.upmove; else wishvel[2] = 0; VectorCopy (wishvel, wishdir); wishspeed = VectorNormalize(wishdir); if (wishspeed > sv_maxspeed.value) { VectorScale (wishvel, sv_maxspeed.value/wishspeed, wishvel); wishspeed = sv_maxspeed.value; } if ( sv_player->v.movetype == MOVETYPE_NOCLIP) { // noclip VectorCopy (wishvel, velocity); } else if ( onground ) { SV_UserFriction (); SV_Accelerate (wishspeed, wishdir); } else { // not on ground, so little effect on velocity SV_AirAccelerate (wishspeed, wishvel); } }
/* =================== SV_AirMove =================== */ static void SV_AirMove(const usercmd_t *cmd, edict_t *player) { qboolean onground = (int)player->v.flags & FL_ONGROUND; vec3_t wishvel, wishdir, forward, right, up; vec_t wishspeed, fmove, smove; int i; AngleVectors(player->v.angles, forward, right, up); fmove = cmd->forwardmove; smove = cmd->sidemove; /* hack to not let you back into teleporter */ if (sv.time < player->v.teleport_time && fmove < 0) fmove = 0; for (i = 0; i < 3; i++) wishvel[i] = forward[i] * fmove + right[i] * smove; if ((int)player->v.movetype != MOVETYPE_WALK) wishvel[2] = cmd->upmove; else wishvel[2] = 0; VectorCopy(wishvel, wishdir); wishspeed = VectorNormalize(wishdir); if (wishspeed > sv_maxspeed.value) { VectorScale(wishvel, sv_maxspeed.value / wishspeed, wishvel); wishspeed = sv_maxspeed.value; } if (player->v.movetype == MOVETYPE_NOCLIP) { VectorCopy(wishvel, player->v.velocity); } else if (onground) { SV_UserFriction(player); SV_Accelerate(wishdir, wishspeed, player->v.velocity); } else { /* not on ground, so little effect on velocity */ SV_AirAccelerate(wishvel, wishspeed, player->v.velocity); } }