/* ================ CL_BaseMove Send the intended movement message to the server ================ */ void CL_BaseMove (usercmd_t *cmd) { CL_AdjustAngles (); memset (cmd, 0, sizeof(*cmd)); VectorCopy (cl.viewangles, cmd->angles); if (in_strafe.state & 1) { cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_right); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_left); } cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed->value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed->value * CL_KeyState (&in_down); if (! (in_klook.state & 1) ) { cmd->forwardmove += cl_forwardspeed->value * CL_KeyState (&in_forward); cmd->forwardmove -= cl_forwardspeed->value * CL_KeyState (&in_back); } // // adjust for speed key / running // if ( (in_speed.state & 1) ^ (int)(cl_run->value) ) { cmd->forwardmove *= 2; cmd->sidemove *= 2; cmd->upmove *= 2; } }
/* ================= CL_UpdateCmd Updates msec, angles and builds interpolated movement vector for local prediction. Doesn't touch command forward/side/upmove, these are filled by CL_FinalizeCmd. ================= */ void CL_UpdateCmd( int msec ) { VectorClear( cl.localmove ); if( sv_paused->integer ) { return; } // add to milliseconds of time to apply the move cl.cmd.msec += msec; // adjust viewangles CL_AdjustAngles( msec ); // get basic movement from keyboard CL_BaseMove( cl.localmove ); // allow mice to add to the move CL_MouseMove(); // add accumulated mouse forward/side movement cl.localmove[0] += cl.mousemove[0]; cl.localmove[1] += cl.mousemove[1]; // clamp to server defined max speed CL_ClampSpeed( cl.localmove ); CL_ClampPitch(); cl.cmd.angles[0] = ANGLE2SHORT( cl.viewangles[0] ); cl.cmd.angles[1] = ANGLE2SHORT( cl.viewangles[1] ); cl.cmd.angles[2] = ANGLE2SHORT( cl.viewangles[2] ); }
/* ================= CL_CreateCmd ================= */ usercmd_t CL_CreateCmd( void ) { usercmd_t cmd; vec3_t oldAngles; VectorCopy( cl.viewangles, oldAngles ); // keyboard angle adjustment CL_AdjustAngles(); memset( &cmd, 0, sizeof( cmd ) ); CL_CmdButtons( &cmd ); // get basic movement from keyboard CL_KeyMove( &cmd ); // get basic movement from mouse CL_MouseMove( &cmd ); // get basic movement from joystick or controller if ( cl_xbox360ControllerAvailable->integer ) { CL_Xbox360ControllerMove( &cmd ); } else { CL_JoystickMove( &cmd ); } // check to make sure the angles haven't wrapped if ( cl.viewangles[ PITCH ] - oldAngles[ PITCH ] > 90 ) { cl.viewangles[ PITCH ] = oldAngles[ PITCH ] + 90; } else if ( oldAngles[ PITCH ] - cl.viewangles[ PITCH ] > 90 ) { cl.viewangles[ PITCH ] = oldAngles[ PITCH ] - 90; } // store out the final values CL_FinishMove( &cmd ); // draw debug graphs of turning for mouse testing if ( cl_debugMove->integer ) { if ( cl_debugMove->integer == 1 ) { SCR_DebugGraph( abs( cl.viewangles[ YAW ] - oldAngles[ YAW ] ), 0 ); } if ( cl_debugMove->integer == 2 ) { SCR_DebugGraph( abs( cl.viewangles[ PITCH ] - oldAngles[ PITCH ] ), 0 ); } } return cmd; }
/* ================ CL_BaseMove Send the intended movement message to the server ================ */ void CL_BaseMove (usercmd_t *cmd) { if (cl.v.cameramode) // stuck in a different camera so don't move { memset (cmd, 0, sizeof(*cmd)); return; } CL_AdjustAngles (); memset (cmd, 0, sizeof(*cmd)); VectorCopy (cl.viewangles, cmd->angles); if (in_strafe.state & 1) { // cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_right); // cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_left); cmd->sidemove += 225 * CL_KeyState (&in_right); cmd->sidemove -= 225 * CL_KeyState (&in_left); } // cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_moveright); // cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_moveleft); cmd->sidemove += 225 * CL_KeyState (&in_moveright); cmd->sidemove -= 225 * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed.value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed.value * CL_KeyState (&in_down); if (! (in_klook.state & 1)) { // cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward); cmd->forwardmove += 200 * CL_KeyState (&in_forward); // cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back); cmd->forwardmove -= 200 * CL_KeyState (&in_back); } // adjust for speed key, but not if "always run" has been chosen // speed key now acts as slow key when always run is chosen - OS // if ( ( (cl_forwardspeed.value > 200) ||(in_speed.state & 1) || cl.spectator) if ( (((cl_forwardspeed.value > 200) ^ (in_speed.state & 1)) || cl.spectator) && (cl.v.hasted <= 1) ) { cmd->forwardmove *= cl_movespeedkey.value; cmd->sidemove *= cl_movespeedkey.value; cmd->upmove *= cl_movespeedkey.value; } // Hasted player? if (cl.v.hasted) { cmd->forwardmove = cmd->forwardmove * cl.v.hasted; cmd->sidemove = cmd->sidemove * cl.v.hasted; cmd->upmove = cmd->upmove * cl.v.hasted; } cmd->light_level = cl.light_level; }
/* ================ CL_BaseMove Send the intended movement message to the server ================ */ void CL_BaseMove (usercmd_t *cmd) { CL_AdjustAngles (); memset (cmd, 0, sizeof(*cmd)); if (cl.v.cameramode) // Stuck in a different camera so don't move { return; } VectorCopy (cl.viewangles, cmd->angles); if (in_strafe.state & 1) { // cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_right); // cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_left); cmd->sidemove += 225 * CL_KeyState (&in_right); cmd->sidemove -= 225 * CL_KeyState (&in_left); } // cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_moveright); // cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_moveleft); cmd->sidemove += 225 * CL_KeyState (&in_moveright); cmd->sidemove -= 225 * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed.value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed.value * CL_KeyState (&in_down); if (! (in_klook.state & 1) ) { // cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward); // cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back); cmd->forwardmove += 200 * CL_KeyState (&in_forward); cmd->forwardmove -= 200 * CL_KeyState (&in_back); } // // adjust for speed key // if ((cl.spectator || cl_forwardspeed.value > 200 || in_speed.state & 1) && cl.v.hasted <= 1) { cmd->forwardmove *= cl_movespeedkey.value; cmd->sidemove *= cl_movespeedkey.value; cmd->upmove *= cl_movespeedkey.value; } // Hasted player? if (cl.v.hasted) { cmd->forwardmove = cmd->forwardmove * cl.v.hasted; cmd->sidemove = cmd->sidemove * cl.v.hasted; cmd->upmove = cmd->upmove * cl.v.hasted; } cmd->light_level = cl.light_level; }
/* ================= CL_CreateCmd ================= */ usercmd_t CL_CreateCmd( void ) { usercmd_t cmd; vec3_t oldAngles; float recoilAdd; VectorCopy( cl.viewangles, oldAngles ); // keyboard angle adjustment CL_AdjustAngles(); memset( &cmd, 0, sizeof( cmd ) ); CL_CmdButtons( &cmd ); // get basic movement from keyboard CL_KeyMove( &cmd ); // get basic movement from mouse CL_MouseMove( &cmd ); // get basic movement from joystick CL_JoystickMove( &cmd ); // check to make sure the angles haven't wrapped if ( cl.viewangles[PITCH] - oldAngles[PITCH] > 90 ) { cl.viewangles[PITCH] = oldAngles[PITCH] + 90; } else if ( oldAngles[PITCH] - cl.viewangles[PITCH] > 90 ) { cl.viewangles[PITCH] = oldAngles[PITCH] - 90; } // RF, set the kickAngles so aiming is effected recoilAdd = cl_recoilPitch->value; if ( fabs( cl.viewangles[PITCH] + recoilAdd ) < 40 ) { cl.viewangles[PITCH] += recoilAdd; } // the recoilPitch has been used, so clear it out cl_recoilPitch->value = 0; // store out the final values CL_FinishMove( &cmd ); // draw debug graphs of turning for mouse testing if ( cl_debugMove->integer ) { if ( cl_debugMove->integer == 1 ) { SCR_DebugGraph( abs(cl.viewangles[YAW] - oldAngles[YAW]) ); } if ( cl_debugMove->integer == 2 ) { SCR_DebugGraph( abs(cl.viewangles[PITCH] - oldAngles[PITCH]) ); } } cmd.cld = cl.cgameCld; // NERVE - SMF return cmd; }
usercmd_t CL_CreateCmd( void ) { usercmd_t cmd; vec3_t oldAngles; VectorCopy( cl.viewangles, oldAngles ); // keyboard angle adjustment CL_AdjustAngles (); memset( &cmd, 0, sizeof( cmd ) ); CL_CmdButtons( &cmd ); // get basic movement from keyboard CL_KeyMove (&cmd); // get basic movement from mouse CL_MouseMove( &cmd ); // get basic movement from joystick CL_JoystickMove( &cmd ); // check to make sure the angles haven't wrapped if ( cl.viewangles[PITCH] - oldAngles[PITCH] > 90 ) { cl.viewangles[PITCH] = oldAngles[PITCH] + 90; } else if ( oldAngles[PITCH] - cl.viewangles[PITCH] > 90 ) { cl.viewangles[PITCH] = oldAngles[PITCH] - 90; } if ( cl_overrideAngles ) { VectorCopy( cl_overriddenAngles, cl.viewangles ); cl_overrideAngles = qfalse; } // store out the final values CL_FinishMove( &cmd ); // draw debug graphs of turning for mouse testing #ifndef _XBOX if ( cl_debugMove->integer ) { if ( cl_debugMove->integer == 1 ) { SCR_DebugGraph( abs(cl.viewangles[YAW] - oldAngles[YAW]), 0 ); } if ( cl_debugMove->integer == 2 ) { SCR_DebugGraph( abs(cl.viewangles[PITCH] - oldAngles[PITCH]), 0 ); } } #endif return cmd; }
usercmd_t CL_CreateCmd( void ) { usercmd_t cmd; vec3_t oldAngles; VectorCopy( cl.viewangles, oldAngles ); // keyboard angle adjustment CL_AdjustAngles (); Com_Memset( &cmd, 0, sizeof( cmd ) ); CL_CmdButtons( &cmd ); // get basic movement from keyboard CL_KeyMove( &cmd ); // get basic movement from mouse CL_MouseMove( &cmd ); // get basic movement from joystick CL_JoystickMove( &cmd ); // mert akengin cvar_t *in_haptics = Cvar_Get("in_haptic","1",CVAR_ARCHIVE); cvar_t *in_haptics_move = Cvar_Get("in_haptic_move","0",CVAR_ARCHIVE); cvar_t *haptic_cvars[AXES] = { in_haptics, in_haptics_move, cl_sensitivity }; haptic_dealwith(haptic_cvars,&cmd,cl.viewangles,in_buttons); // check to make sure the angles haven't wrapped if ( cl.viewangles[PITCH] - oldAngles[PITCH] > 90 ) { cl.viewangles[PITCH] = oldAngles[PITCH] + 90; } else if ( oldAngles[PITCH] - cl.viewangles[PITCH] > 90 ) { cl.viewangles[PITCH] = oldAngles[PITCH] - 90; } // store out the final values CL_FinishMove( &cmd ); // draw debug graphs of turning for mouse testing if ( cl_debugMove->integer ) { if ( cl_debugMove->integer == 1 ) { SCR_DebugGraph( fabs(cl.viewangles[YAW] - oldAngles[YAW]) ); } if ( cl_debugMove->integer == 2 ) { SCR_DebugGraph( fabs(cl.viewangles[PITCH] - oldAngles[PITCH]) ); } } return cmd; }
void CL_BaseMove (usercmd_t *cmd) { if (cls.signon != SIGNONS) return; if (deathcam_active) CL_AdjustAnglesWhenYoureDead (); else CL_AdjustAngles (); Q_memset (cmd, 0, sizeof(*cmd)); if (in_strafe.state & 1) { cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_right); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_left); } cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed->value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed->value * CL_KeyState (&in_down); if (! (in_klook.state & 1) ) { cmd->forwardmove += cl_forwardspeed->value * CL_KeyState (&in_forward); cmd->forwardmove -= cl_backspeed->value * CL_KeyState (&in_back); } // adjust for speed key if (in_speed.state & 1) { cmd->forwardmove *= cl_movespeedkey->value; cmd->sidemove *= cl_movespeedkey->value; cmd->upmove *= cl_movespeedkey->value; } // react to onground state changes (for gun bob) if (cl.onground) { if (!cl.oldonground) cl.hitgroundtime = cl.time; cl.lastongroundtime = cl.time; } cl.oldonground = cl.onground; }
usercmd_t CL_CreateCmd( void ) { usercmd_t cmd; vector3 oldAngles; VectorCopy( &cl.viewangles, &oldAngles ); // keyboard angle adjustment CL_AdjustAngles(); memset( &cmd, 0, sizeof( cmd ) ); CL_CmdButtons( &cmd ); // get basic movement from keyboard CL_KeyMove( &cmd ); // get basic movement from mouse CL_MouseMove( &cmd ); // get basic movement from joystick CL_JoystickMove( &cmd ); // check to make sure the angles haven't wrapped if ( cl.viewangles.pitch - oldAngles.pitch > 90 ) { cl.viewangles.pitch = oldAngles.pitch + 90; } else if ( oldAngles.pitch - cl.viewangles.pitch > 90 ) { cl.viewangles.pitch = oldAngles.pitch - 90; } // store out the final values CL_FinishMove( &cmd ); // draw debug graphs of turning for mouse testing if ( cl_debugMove->integer ) { if ( cl_debugMove->integer == 1 ) { SCR_DebugGraph( fabsf(cl.viewangles.yaw - oldAngles.yaw) ); } if ( cl_debugMove->integer == 2 ) { SCR_DebugGraph( fabsf(cl.viewangles.pitch - oldAngles.pitch) ); } } return cmd; }
/* ================ CL_BaseMove Send the intended movement message to the server ================ */ void CL_BaseMove (usercmd_t *cmd) { if (cls.signon != SIGNONS) return; CL_AdjustAngles (); Q_memset (cmd, 0, sizeof(*cmd)); if (in_strafe.state & 1) { cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_right); cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_left); } cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed.value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed.value * CL_KeyState (&in_down); if (! (in_klook.state & 1) ) { cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward); cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back); } // // adjust for speed key // if (in_speed.state & 1) { cmd->forwardmove *= cl_movespeedkey.value; cmd->sidemove *= cl_movespeedkey.value; cmd->upmove *= cl_movespeedkey.value; } #ifdef QUAKE2 cmd->lightlevel = cl.light_level; #endif }
// Send the intended movement message to the server. void CL_BaseMove (usercmd_t *cmd) { CL_AdjustAngles (); memset (cmd, 0, sizeof(*cmd)); VectorCopy (cl.viewangles, cmd->angles); if (cl_iDrive.integer) { float s1, s2; if (in_strafe.state & 1) { s1 = CL_KeyState (&in_right, false); s2 = CL_KeyState (&in_left, false); if (s1 && s2) { if (in_right.downtime > in_left.downtime) s2 = 0; if (in_right.downtime < in_left.downtime) s1 = 0; } cmd->sidemove += cl_sidespeed.value * s1; cmd->sidemove -= cl_sidespeed.value * s2; } s1 = CL_KeyState (&in_moveright, false); s2 = CL_KeyState (&in_moveleft, false); if (s1 && s2) { if (in_moveright.downtime > in_moveleft.downtime) s2 = 0; if (in_moveright.downtime < in_moveleft.downtime) s1 = 0; } cmd->sidemove += cl_sidespeed.value * s1; cmd->sidemove -= cl_sidespeed.value * s2; s1 = CL_KeyState (&in_up, false); s2 = CL_KeyState (&in_down, false); if (s1 && s2) { if (in_up.downtime > in_down.downtime) s2 = 0; if (in_up.downtime < in_down.downtime) s1 = 0; } cmd->upmove += cl_upspeed.value * s1; cmd->upmove -= cl_upspeed.value * s2; if (!(in_klook.state & 1)) { s1 = CL_KeyState (&in_forward, false); s2 = CL_KeyState (&in_back, false); if (s1 && s2) { if (in_forward.downtime > in_back.downtime) s2 = 0; if (in_forward.downtime < in_back.downtime) s1 = 0; } cmd->forwardmove += cl_forwardspeed.value * s1; cmd->forwardmove -= cl_backspeed.value * s2; } } else { if (in_strafe.state & 1) { cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_right, false); cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_left, false); } cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_moveright, false); cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_moveleft, false); cmd->upmove += cl_upspeed.value * CL_KeyState (&in_up, false); cmd->upmove -= cl_upspeed.value * CL_KeyState (&in_down, false); if (!(in_klook.state & 1)) { cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward, false); cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back, false); } } // adjust for speed key if (in_speed.state & 1) { cmd->forwardmove *= cl_movespeedkey.value; cmd->sidemove *= cl_movespeedkey.value; cmd->upmove *= cl_movespeedkey.value; } #ifdef JSS_CAM { static float zoomspeed = 0; if ((cls.demoplayback || cl.spectator) && Cvar_Value("cam_thirdperson") && !Cvar_Value("cam_lockpos")) { zoomspeed -= CL_KeyState(&in_forward, false) * cls.trueframetime * cam_zoomaccel.value; zoomspeed += CL_KeyState(&in_back, false) * cls.trueframetime * cam_zoomaccel.value; if (!CL_KeyState(&in_forward, false) && !CL_KeyState(&in_back, false)) { if (zoomspeed > 0) { zoomspeed -= cls.trueframetime * cam_zoomaccel.value; if (zoomspeed < 0) zoomspeed = 0; } else if (zoomspeed < 0) { zoomspeed += cls.trueframetime * cam_zoomaccel.value; if (zoomspeed > 0) zoomspeed = 0; } } zoomspeed = bound (-cam_zoomspeed.value, zoomspeed, cam_zoomspeed.value); if (zoomspeed) { float dist = Cvar_Value("cam_dist"); dist += cls.trueframetime * zoomspeed; if (dist < 0) dist = 0; Cvar_SetValue (Cvar_Find("cam_dist"), dist); } } } #endif // JSS_CAM }
================ */ void DLLEXPORT CL_CreateMove ( float frametime, struct usercmd_s *cmd, int active ) { float spd; vec3_t viewangles; static vec3_t oldangles; if ( active ) { //memset( viewangles, 0, sizeof( vec3_t ) ); //viewangles[ 0 ] = viewangles[ 1 ] = viewangles[ 2 ] = 0.0; gEngfuncs.GetViewAngles( (float *)viewangles ); if( !gHUD.m_iPlayerFrozen ) CL_AdjustAngles ( frametime, viewangles ); memset (cmd, 0, sizeof(*cmd)); gEngfuncs.SetViewAngles( (float *)viewangles ); if ( in_strafe.state & 1 ) { cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_right); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_left); } cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed->value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed->value * CL_KeyState (&in_down); if ( !(in_klook.state & 1 ) ) { cmd->forwardmove += cl_forwardspeed->value * CL_KeyState (&in_forward); cmd->forwardmove -= cl_backspeed->value * CL_KeyState (&in_back); } // adjust for speed key if ( in_speed.state & 1 ) { cmd->forwardmove *= cl_movespeedkey->value; cmd->sidemove *= cl_movespeedkey->value; cmd->upmove *= cl_movespeedkey->value; } // clip to maxspeed spd = gEngfuncs.GetClientMaxspeed(); if ( spd != 0.0 ) { // scale the 3 speeds so that the total velocity is not > cl.maxspeed float fmov = sqrt( (cmd->forwardmove*cmd->forwardmove) + (cmd->sidemove*cmd->sidemove) + (cmd->upmove*cmd->upmove) ); if ( fmov > spd ) { float fratio = spd / fmov; cmd->forwardmove *= fratio; cmd->sidemove *= fratio; cmd->upmove *= fratio; } } // Allow mice and other controllers to add their inputs if( !gHUD.m_iPlayerFrozen ) IN_Move ( frametime, cmd ); } cmd->impulse = in_impulse; in_impulse = 0; cmd->weaponselect = g_weaponselect; g_weaponselect = 0; // // set button and flag bits // cmd->buttons = CL_ButtonBits( 1 ); // If they're in a modal dialog, ignore the attack button. // if(GetClientVoiceMgr()->IsInSquelchMode()) // cmd->buttons &= ~IN_ATTACK; // Using joystick? if ( in_joystick->value ) { if ( cmd->forwardmove > 0 ) { cmd->buttons |= IN_FORWARD; } else if ( cmd->forwardmove < 0 ) { cmd->buttons |= IN_BACK; } } gEngfuncs.GetViewAngles( (float *)viewangles ); // Set current view angles. if ( g_iAlive && !gHUD.m_iPlayerFrozen ) { VectorCopy( viewangles, cmd->viewangles ); VectorCopy( viewangles, oldangles ); } else { VectorCopy( oldangles, cmd->viewangles ); } // buz: in spec tank mode check for bounds if (gHUD.m_SpecTank_on) { // check yaw float ofs = viewangles[YAW] - gHUD.m_SpecTank_defYaw; if (ofs > 180) ofs -= 360; else if (ofs < -180) ofs += 360; if (ofs < -gHUD.m_SpecTank_coneHor) viewangles[YAW] = gHUD.m_SpecTank_defYaw - gHUD.m_SpecTank_coneHor; else if (ofs > gHUD.m_SpecTank_coneHor) viewangles[YAW] = gHUD.m_SpecTank_defYaw + gHUD.m_SpecTank_coneHor; // check pitch if (viewangles[PITCH] > gHUD.m_SpecTank_coneVer) viewangles[PITCH] = gHUD.m_SpecTank_coneVer; else if (viewangles[PITCH] < -gHUD.m_SpecTank_coneVer) viewangles[PITCH] = -gHUD.m_SpecTank_coneVer; // всем спасибо, все свободны gEngfuncs.SetViewAngles( (float *)viewangles );
/* ================ CL_CreateMove Send the intended movement message to the server if active == 1 then we are 1) not playing back demos ( where our commands are ignored ) and 2 ) we have finished signing on to server ================ */ void DLLEXPORT CL_CreateMove ( float frametime, struct usercmd_s *cmd, int active ) { float spd; vec3_t viewangles; static vec3_t oldangles; if ( active ) { //memset( viewangles, 0, sizeof( vec3_t ) ); //viewangles[ 0 ] = viewangles[ 1 ] = viewangles[ 2 ] = 0.0; gEngfuncs.GetViewAngles( (float *)viewangles ); CL_AdjustAngles ( frametime, viewangles ); memset (cmd, 0, sizeof(*cmd)); gEngfuncs.SetViewAngles( (float *)viewangles ); if ( in_strafe.state & 1 ) { cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_right); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_left); } cmd->sidemove += cl_sidespeed->value * CL_KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed->value * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed->value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed->value * CL_KeyState (&in_down); if ( !(in_klook.state & 1 ) ) { cmd->forwardmove += cl_forwardspeed->value * CL_KeyState (&in_forward); cmd->forwardmove -= cl_backspeed->value * CL_KeyState (&in_back); } // adjust for speed key if ( in_speed.state & 1 ) { cmd->forwardmove *= cl_movespeedkey->value; cmd->sidemove *= cl_movespeedkey->value; cmd->upmove *= cl_movespeedkey->value; } // clip to maxspeed spd = gEngfuncs.GetClientMaxspeed(); if ( spd != 0.0 ) { // scale the 3 speeds so that the total velocity is not > cl.maxspeed float fmov = sqrt( (cmd->forwardmove*cmd->forwardmove) + (cmd->sidemove*cmd->sidemove) + (cmd->upmove*cmd->upmove) ); if ( fmov > spd ) { float fratio = spd / fmov; cmd->forwardmove *= fratio; cmd->sidemove *= fratio; cmd->upmove *= fratio; } } // Allow mice and other controllers to add their inputs IN_Move ( frametime, cmd ); } cmd->impulse = in_impulse; in_impulse = 0; cmd->weaponselect = g_weaponselect; g_weaponselect = 0; // // set button and flag bits // cmd->buttons = CL_ButtonBits( 1 ); // If they're in a modal dialog, ignore the attack button. if(GetClientVoiceMgr()->IsInSquelchMode()) cmd->buttons &= ~IN_ATTACK; // Using joystick? if ( in_joystick->value ) { if ( cmd->forwardmove > 0 ) { cmd->buttons |= IN_FORWARD; } else if ( cmd->forwardmove < 0 ) { cmd->buttons |= IN_BACK; } } gEngfuncs.GetViewAngles( (float *)viewangles ); // Set current view angles. if ( g_iAlive ) { VectorCopy( viewangles, cmd->viewangles ); VectorCopy( viewangles, oldangles ); } else { VectorCopy( oldangles, cmd->viewangles ); } }
/* ================ CL_CreateMove Send the intended movement message to the server if active == 1 then we are 1) not playing back demos ( where our commands are ignored ) and 2 ) we have finished signing on to server ================ */ void CL_CreateMove( float frametime, usercmd_t *cmd, int active ) { float spd; Vector viewangles; static Vector oldangles; if( active ) { gEngfuncs.GetViewAngles( viewangles ); CL_AdjustAngles( frametime, viewangles ); memset( cmd, 0, sizeof( *cmd )); float rgfl[3]; viewangles.CopyToArray( rgfl ); gEngfuncs.SetViewAngles( rgfl ); if( in_strafe.state & BUTTON_DOWN ) { cmd->sidemove += cl_sidespeed->value * CL_KeyState( &in_right ); cmd->sidemove -= cl_sidespeed->value * CL_KeyState( &in_left ); } cmd->sidemove += cl_sidespeed->value * CL_KeyState( &in_moveright ); cmd->sidemove -= cl_sidespeed->value * CL_KeyState( &in_moveleft ); cmd->upmove += cl_upspeed->value * CL_KeyState( &in_up ); cmd->upmove -= cl_upspeed->value * CL_KeyState( &in_down ); if(!( in_klook.state & BUTTON_DOWN )) { cmd->forwardmove += cl_forwardspeed->value * CL_KeyState( &in_forward ); cmd->forwardmove -= cl_backspeed->value * CL_KeyState( &in_back ); } // adjust for speed key if( in_speed.state & BUTTON_DOWN ) { cmd->forwardmove *= cl_movespeedkey->value; cmd->sidemove *= cl_movespeedkey->value; cmd->upmove *= cl_movespeedkey->value; } // clip to maxspeed spd = gEngfuncs.GetClientMaxspeed(); if( spd != 0.0f ) { // scale the 3 speeds so that the total velocity is not > cl.maxspeed float fmov = sqrt(( cmd->forwardmove * cmd->forwardmove) + (cmd->sidemove * cmd->sidemove) + (cmd->upmove * cmd->upmove)); if( fmov > spd ) { float fratio = spd / fmov; cmd->forwardmove *= fratio; cmd->sidemove *= fratio; cmd->upmove *= fratio; } } // allow mice and other controllers to add their inputs if( !CL_IsDead( )) IN_Move( frametime, cmd ); } cmd->impulse = in_impulse; in_impulse = 0; cmd->weaponselect = g_weaponselect; g_weaponselect = 0; // set button and flag bits cmd->buttons = CL_ButtonBits( 1 ); gEngfuncs.GetViewAngles( viewangles ); // Set current view angles. if( CL_IsDead( )) { cmd->viewangles = oldangles; } else { cmd->viewangles = viewangles; oldangles = viewangles; } }
/* ================ CL_BaseMove Send the intended movement message to the server ================ */ void CL_BaseMove (usercmd_t *cmd) { if (cls.signon != SIGNONS) return; if (cl.v.cameramode) // Stuck in a different camera so don't move { memset (cmd, 0, sizeof(*cmd)); return; } CL_AdjustAngles (); memset (cmd, 0, sizeof(*cmd)); if (in_strafe.state & 1) { // cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_right); // cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_left); cmd->sidemove += 225 * CL_KeyState (&in_right); cmd->sidemove -= 225 * CL_KeyState (&in_left); } // cmd->sidemove += cl_sidespeed.value * CL_KeyState (&in_moveright); // cmd->sidemove -= cl_sidespeed.value * CL_KeyState (&in_moveleft); cmd->sidemove += 225 * CL_KeyState (&in_moveright); cmd->sidemove -= 225 * CL_KeyState (&in_moveleft); cmd->upmove += cl_upspeed.value * CL_KeyState (&in_up); cmd->upmove -= cl_upspeed.value * CL_KeyState (&in_down); if (! (in_klook.state & 1) ) { // cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward); cmd->forwardmove += 200 * CL_KeyState (&in_forward); // cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back); cmd->forwardmove -= 200 * CL_KeyState (&in_back); } // // adjust for speed key (but not if always runs has been chosen) // if ((cl_forwardspeed.value > 200 || in_speed.state & 1) && cl.v.hasted <= 1) { cmd->forwardmove *= cl_movespeedkey.value; cmd->sidemove *= cl_movespeedkey.value; cmd->upmove *= cl_movespeedkey.value; } // Hasted player? if (cl.v.hasted) { cmd->forwardmove = cmd->forwardmove * cl.v.hasted; cmd->sidemove = cmd->sidemove * cl.v.hasted; cmd->upmove = cmd->upmove * cl.v.hasted; } #ifdef QUAKE2RJ cmd->lightlevel = cl.light_level; #endif }