/** * @brief Saves the audio stuff. */ static void opt_audioSave( unsigned int wid, char *str ) { (void) str; int f; char *s; /* General. */ f = window_checkboxState( wid, "chkNosound" ); if (conf.nosound != f) { conf.nosound = f; opt_needRestart(); } /* Backend. */ s = toolkit_getList( wid, "lstSound" ); if (conf.sound_backend != NULL) { if (strcmp(s,conf.sound_backend)!=0) { free(conf.sound_backend); conf.sound_backend = strdup(s); opt_needRestart(); } } else { conf.sound_backend = strdup(s); opt_needRestart(); } /* OpenAL. */ f = window_checkboxState( wid, "chkEFX" ); if (conf.al_efx != f) { conf.al_efx = f; opt_needRestart(); } }
/** * @brief GUI override was toggled. * * @param wid Window id. * @param name of widget. */ static void info_toggleGuiOverride( unsigned int wid, char *name ) { player.guiOverride = window_checkboxState( wid, name ); /* Go back to the default one. */ if (player.guiOverride == 0) toolkit_setList( wid, "lstGUI", gui_pick() ); }
/* * @brief Toggles autosave. */ void uniedit_autosave( unsigned int wid_unused, char *unused ) { (void) wid_unused; (void) unused; conf.devautosave = window_checkboxState( wid_unused, "chkEditAutoSave" ); }
/** * @brief Sets the inrange property. */ static void weapons_inrange( unsigned int wid, char *str ) { int state; /* Set state. */ state = window_checkboxState( wid, str ); pilot_weapSetInrange( player.p, info_eq_weaps.weapons, state ); }
/** * @brief Saves the gameplay options. */ static void opt_gameplaySave( unsigned int wid, char *str ) { (void) str; int f; char *inp; /* Checkboxes. */ f = window_checkboxState( wid, "chkAfterburn" ); if (!!conf.afterburn_sens != f) { conf.afterburn_sens = (!!f)*250; } conf.save_compress = window_checkboxState( wid, "chkCompress" ); /* Input boxes. */ inp = window_getInput( wid, "inpMSG" ); conf.mesg_visible = atoi(inp); if (conf.mesg_visible == 0) conf.mesg_visible = 5; }
/** * @brief Saves the gameplay options. */ static void opt_gameplaySave( unsigned int wid, char *str ) { (void) str; int f; char *vmsg, *tmax; /* Checkboxes. */ f = window_checkboxState( wid, "chkAfterburn" ); if (!!conf.afterburn_sens != f) { conf.afterburn_sens = (!!f)*250; } conf.zoom_manual = window_checkboxState( wid, "chkZoomManual" ); conf.mouse_thrust = window_checkboxState(wid, "chkMouseThrust" ); conf.save_compress = window_checkboxState( wid, "chkCompress" ); /* Input boxes. */ vmsg = window_getInput( wid, "inpMSG" ); tmax = window_getInput( wid, "inpTMax" ); conf.mesg_visible = atoi(vmsg); conf.compression_mult = atoi(tmax); if (conf.mesg_visible == 0) conf.mesg_visible = 5; }
/** * @brief Toggles autoweap for the ship. */ static void weapons_autoweap( unsigned int wid, char *str ) { int state, sure; /* Set state. */ state = window_checkboxState( wid, str ); /* Run autoweapons if needed. */ if (state) { sure = dialogue_YesNoRaw( "Enable autoweapons?", "Are you sure you want to enable automatic weapon groups for the " "ship?\n\nThis will overwrite all manually-tweaked weapons groups." ); if (!sure) { window_checkboxSet( wid, str, 0 ); return; } player.p->autoweap = 1; pilot_weaponAuto( player.p ); weapons_genList( wid ); } else player.p->autoweap = 0; }
/** * @brief Sets the fire mode. */ static void weapons_fire( unsigned int wid, char *str ) { int i, state; /* Set state. */ state = window_checkboxState( wid, str ); pilot_weapSetMode( player.p, info_eq_weaps.weapons, state ); /* Check to see if they are all fire groups. */ for (i=0; i<PILOT_WEAPON_SETS; i++) if (!pilot_weapSetModeCheck( player.p, i )) break; /* Not able to set them all to fire groups. */ if (i >= PILOT_WEAPON_SETS) { dialogue_alert( "You can not set all your weapon sets to fire groups!" ); pilot_weapSetMode( player.p, info_eq_weaps.weapons, 0 ); window_checkboxSet( wid, str, 0 ); } /* Set default if needs updating. */ pilot_weaponSetDefault( player.p ); }
/** * @brief Sets the fire mode. */ static void weapons_fire( unsigned int wid, char *str ) { int i, state, t, c; /* Set state. */ state = window_checkboxState( wid, str ); /* See how to handle. */ t = pilot_weapSetTypeCheck( player.p, info_eq_weaps.weapons ); if (t == WEAPSET_TYPE_ACTIVE) return; if (state) c = WEAPSET_TYPE_WEAPON; else c = WEAPSET_TYPE_CHANGE; pilot_weapSetType( player.p, info_eq_weaps.weapons, c ); /* Check to see if they are all fire groups. */ for (i=0; i<PILOT_WEAPON_SETS; i++) if (!pilot_weapSetTypeCheck( player.p, i )) break; /* Not able to set them all to fire groups. */ if (i >= PILOT_WEAPON_SETS) { dialogue_alert( "You can not set all your weapon sets to fire groups!" ); pilot_weapSetType( player.p, info_eq_weaps.weapons, WEAPSET_TYPE_CHANGE ); window_checkboxSet( wid, str, 0 ); } /* Set default if needs updating. */ pilot_weaponSetDefault( player.p ); /* Must regen. */ weapons_genList( wid ); }
/** * @brief Tries to set the key from an event. */ static int opt_setKeyEvent( unsigned int wid, SDL_Event *event ) { unsigned int parent; KeybindType type; int key; SDLMod mod, ev_mod; const char *str; int pos, off; /* See how to handle it. */ switch (event->type) { case SDL_KEYDOWN: key = event->key.keysym.sym; /* If control key make player hit twice. */ if (((key == SDLK_NUMLOCK) || (key == SDLK_CAPSLOCK) || (key == SDLK_SCROLLOCK) || (key == SDLK_RSHIFT) || (key == SDLK_LSHIFT) || (key == SDLK_RCTRL) || (key == SDLK_LCTRL) || (key == SDLK_RALT) || (key == SDLK_LALT) || (key == SDLK_RMETA) || (key == SDLK_LMETA) || (key == SDLK_LSUPER) || (key == SDLK_RSUPER)) && (opt_lastKeyPress != key)) { opt_lastKeyPress = key; return 0; } type = KEYBIND_KEYBOARD; if (window_checkboxState( wid, "chkAny" )) mod = NMOD_ALL; else { ev_mod = event->key.keysym.mod; mod = 0; if (ev_mod & (KMOD_LSHIFT | KMOD_RSHIFT)) mod |= NMOD_SHIFT; if (ev_mod & (KMOD_LCTRL | KMOD_RCTRL)) mod |= NMOD_CTRL; if (ev_mod & (KMOD_LALT | KMOD_RALT)) mod |= NMOD_ALT; if (ev_mod & (KMOD_LMETA | KMOD_RMETA)) mod |= NMOD_META; } /* Set key. */ opt_lastKeyPress = key; break; case SDL_JOYAXISMOTION: if (event->jaxis.value > 0) type = KEYBIND_JAXISPOS; else if (event->jaxis.value < 0) type = KEYBIND_JAXISNEG; else return 0; /* Not handled. */ key = event->jaxis.axis; mod = NMOD_ALL; break; case SDL_JOYBUTTONDOWN: type = KEYBIND_JBUTTON; key = event->jbutton.button; mod = NMOD_ALL; break; /* Not handled. */ default: return 0; } /* Warn if already bound. */ str = input_keyAlreadyBound( type, key, mod ); if ((str != NULL) && strcmp(str, opt_selectedKeybind)) dialogue_alert( "Key '%s' overlaps with key '%s' that was just set. " "You may want to correct this.", str, opt_selectedKeybind ); /* Set keybinding. */ input_setKeybind( opt_selectedKeybind, type, key, mod ); /* Close window. */ window_close( wid, NULL ); /* Update parent window. */ parent = window_getParent( wid ); pos = toolkit_getListPos( parent, "lstKeybinds" ); off = toolkit_getListOffset( parent, "lstKeybinds" ); window_destroyWidget( parent, "lstKeybinds" ); menuKeybinds_genList( parent ); toolkit_setListPos( parent, "lstKeybinds", pos ); toolkit_setListOffset( parent, "lstKeybinds", off ); return 0; }
/** * @brief Saves the video settings. */ static void opt_videoSave( unsigned int wid, char *str ) { (void) str; int i, j, s; char *inp, buf[16], width[16], height[16]; int w, h, f; /* Handle resolution. */ inp = window_getInput( wid, "inpRes" ); memset( width, '\0', sizeof(width) ); memset( height, '\0', sizeof(height) ); j = 0; s = 0; for (i=0; i<16; i++) { if (isdigit(inp[i])) { if (j==0) width[s++] = inp[i]; else height[s++] = inp[i]; } else { j++; s = 0; } } w = atoi(width); h = atoi(height); if ((w==0) || (h==0)) { dialogue_alert( "Height/Width invalid. Should be formatted like 1024x768." ); return; } if ((w != conf.width) || (h != conf.height)) { conf.explicit_dim = 1; conf.width = w; conf.height = h; opt_needRestart(); snprintf( buf, sizeof(buf), "%dx%d", conf.width, conf.height ); window_setInput( wid, "inpRes", buf ); } /* Fullscreen. */ f = window_checkboxState( wid, "chkFullscreen" ); if (conf.fullscreen != f) { conf.fullscreen = f; opt_needRestart(); } /* FPS. */ conf.fps_show = window_checkboxState( wid, "chkFPS" ); inp = window_getInput( wid, "inpFPS" ); conf.fps_max = atoi(inp); /* OpenGL. */ f = window_checkboxState( wid, "chkVSync" ); if (conf.vsync != f) { conf.vsync = f; opt_needRestart(); } f = window_checkboxState( wid, "chkVBO" ); if (conf.vbo != f) { conf.vbo = f; opt_needRestart(); } f = window_checkboxState( wid, "chkMipmaps" ); if (conf.mipmaps != f) { conf.mipmaps = f; opt_needRestart(); } f = window_checkboxState( wid, "chkInterpolate" ); if (conf.interpolate != f) { conf.interpolate = f; opt_needRestart(); } f = window_checkboxState( wid, "chkNPOT" ); if (conf.npot != f) { conf.npot = f; opt_needRestart(); } /* Features. */ f = window_checkboxState( wid, "chkEngineGlow" ); if (conf.engineglow != f) { conf.engineglow = f; opt_needRestart(); } }
/** * @brief Refuel was toggled. */ static void land_toggleRefuel( unsigned int wid, char *name ) { conf.autorefuel = window_checkboxState( wid, name ); }
/** * @brief GUI override was toggled. * * @param wid Window id. * @param name of widget. */ static void info_toggleGuiOverride( unsigned int wid, char *name ) { player.guiOverride = window_checkboxState( wid, name ); }