aboutsummaryrefslogtreecommitdiffstats
path: root/code/qcommon
diff options
context:
space:
mode:
Diffstat (limited to 'code/qcommon')
-rw-r--r--code/qcommon/cvar.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/code/qcommon/cvar.c b/code/qcommon/cvar.c
index 278b990..d4809ae 100644
--- a/code/qcommon/cvar.c
+++ b/code/qcommon/cvar.c
@@ -690,21 +690,44 @@ void Cvar_Print_f(void)
============
Cvar_Toggle_f
-Toggles a cvar for easy single key binding
+Toggles a cvar for easy single key binding, optionally through a list of
+given values
============
*/
void Cvar_Toggle_f( void ) {
- int v;
+ int i, c = Cmd_Argc();
+ char *curval;
- if ( Cmd_Argc() != 2 ) {
- Com_Printf ("usage: toggle <variable>\n");
+ if(c < 2) {
+ Com_Printf("usage: toggle <variable> [value1, value2, ...]\n");
+ return;
+ }
+
+ if(c == 2) {
+ Cvar_Set2(Cmd_Argv(1), va("%d",
+ !Cvar_VariableValue(Cmd_Argv(1))),
+ qfalse);
+ return;
+ }
+
+ if(c == 3) {
+ Com_Printf("toggle: nothing to toggle to\n");
return;
}
- v = Cvar_VariableValue( Cmd_Argv( 1 ) );
- v = !v;
+ 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_Set2(Cmd_Argv(1), Cmd_Argv(i + 1), qfalse);
+ return;
+ }
+ }
- Cvar_Set2 (Cmd_Argv(1), va("%i", v), qfalse);
+ // fallback
+ Cvar_Set2(Cmd_Argv(1), Cmd_Argv(2), qfalse);
}
/*