/* ============ CL_ResetButtonBits ============ */ void CL_ResetButtonBits( int bits ) { int bitsNew = CL_ButtonBits( 0 ) ^ bits; // Has the attack button been changed if ( bitsNew & IN_ATTACK ) { // Was it pressed? or let go? if ( bits & IN_ATTACK ) { KeyDown( &in_attack ); } else { // totally clear state in_attack.state &= ~7; } } }
int CHud::UpdateClientData(client_data_t *cdata, float time) { memcpy(m_vecOrigin, cdata->origin, sizeof(vec3_t)); memcpy(m_vecAngles, cdata->viewangles, sizeof(vec3_t)); m_iKeyBits = CL_ButtonBits( 0 ); m_iWeaponBits = cdata->iWeaponBits; in_fov = cdata->fov; Think(); cdata->fov = m_iFOV; CL_ResetButtonBits( m_iKeyBits ); // return 1 if in anything in the client_data struct has been changed, 0 otherwise return 1; }
================ */ 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; } }