/* ============ Cvar_Toggle_f Toggles a cvar for easy single key binding, optionally through a list of given values ============ */ void Cvar_Toggle_f( void ) { int i, c = Cmd_Argc(); char *curval; if(c < 2) { Com_Printf("usage: toggle <variable> [value1, value2, ...]\n"); return; } if(c == 2) { Cvar_User_Set(Cmd_Argv(1), va("%d", !Cvar_VariableValue(Cmd_Argv(1)))); return; } if(c == 3) { Com_Printf("toggle: nothing to toggle to\n"); return; } curval = Cvar_VariableString(Cmd_Argv(1)); // don't bother checking the last arg for a match since the desired // behaviour is the same as no match (set to the first argument) for(i = 2; i + 1 < c; i++) { if(strcmp(curval, Cmd_Argv(i)) == 0) { Cvar_User_Set(Cmd_Argv(1), Cmd_Argv(i + 1)); return; } } // fallback Cvar_User_Set(Cmd_Argv(1), Cmd_Argv(2)); }
/* ============ Cvar_Command Handles variable inspection and changing from the console ============ */ qboolean Cvar_Command( void ) { cvar_t *v; // check variables v = Cvar_FindVar (Cmd_Argv(0)); if (!v) { return qfalse; } // perform a variable print or set if ( Cmd_Argc() == 1 ) { Cvar_Print( v ); return qtrue; } // toggle if( !strcmp( Cmd_Argv(1), "!" ) ) { // Swap the value if our command has ! in it (bind p "cg_thirdPeson !") Cvar_User_SetValue( v->name, !v->value ); return qtrue; } // set the value if forcing isn't required Cvar_User_Set (v->name, Cmd_Args()); return qtrue; }
/* ============ Cvar_User_SetValue ============ */ void Cvar_User_SetValue( const char *var_name, float value) { char val[32]; if( Q_isintegral( value ) ) Com_sprintf (val, sizeof(val), "%i", (int)value); else Com_sprintf (val, sizeof(val), "%f", value); Cvar_User_Set (var_name, val); }
/* ============ Cvar_Command Handles variable inspection and changing from the console ============ */ qboolean Cvar_Command( void ) { cvar_t *v; // check variables v = Cvar_FindVar (Cmd_Argv(0)); if (!v) { return qfalse; } // perform a variable print or set if ( Cmd_Argc() == 1 ) { Cvar_Print( v ); return qtrue; } // set the value if forcing isn't required Cvar_User_Set (v->name, Cmd_Args()); return qtrue; }
/* ============ Cvar_Set_f Allows setting and defining of arbitrary cvars from console, even if they weren't declared in C code. ============ */ void Cvar_Set_f( void ) { int c; char *cmd; cvar_t *v; c = Cmd_Argc(); cmd = Cmd_Argv(0); if ( c < 2 ) { Com_Printf ("usage: %s <variable> <value>\n", cmd); return; } if ( c == 2 ) { Cvar_Print_f(); return; } v = Cvar_User_Set (Cmd_Argv(1), Cmd_ArgsFrom(2)); if( !v ) { return; } switch( cmd[3] ) { case 'a': if( !( v->flags & CVAR_ARCHIVE ) ) { v->flags |= CVAR_ARCHIVE; cvar_modifiedFlags |= CVAR_ARCHIVE; } break; case 'u': if( !( v->flags & CVAR_USERINFO ) ) { v->flags |= CVAR_USERINFO; cvar_modifiedFlags |= CVAR_USERINFO; } break; case 's': if( !( v->flags & CVAR_SERVERINFO ) ) { v->flags |= CVAR_SERVERINFO; cvar_modifiedFlags |= CVAR_SERVERINFO; } break; } }