etqw-sdk/base/guis/mainmenu/dialogs/settings.include
2008-05-29 00:00:00 +00:00

1188 lines
42 KiB
Text

// ================================================================================
// Settings Dialog
// ================================================================================
_dialog( Settings, localize( "guis/mainmenu/settings" ), PADDING, 44, ( gui.desktop.rect.w * 0.585 ) - $evalfloat( PADDING * 2 ), _fill_to_bottom_of( desktop ) - BUTTON_HEIGHT, "noMove", "noDim" )
#define SETTINGS_SIMPLE 1
#define SETTINGS_ADVANCED 2
#define SETTINGS_VOICE 3
#define RESET_COUNTDOWN_MSEC 18000
#define ADVANCED_DROPDOWN_LABEL_WIDTH 130
#define SS_SLIDER_WIDTH 80
_closable_subdialog
_single_dialog( settings )
properties {
float reloadSounds = false;
float execMachineSpec = false;
float reloadImages = false;
float restartSounds = false;
float restartEngine = false;
float machineSpec = -1;
float vidRestart = false;
string currentPage;
}
events {
onNamedEvent "onShow" {
callSuper();
execMachineSpec = false;
reloadImages = false;
reloadSounds = false;
vidRestart = false;
machineSpec = -1;
// once we require a restartEngine, we'll always require one, don't reset
gui.broadcastEventToDescendants( name, "update" );
}
}
_button( Settings_Reset, _right( dlgSettings ), _bottom( dlgSettings ), BUTTON_WIDTH, BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/defaults" );
}
_button_action(
_setup_confirmation_yesno( "guis/mainmenu/resetsettingsforengine", name, "onYes", "onNo" )
_show_popup( confirmation )
gui.focusedWindow = "btnConfirmationNo";
)
events {
onNamedEvent "onYes" {
gui.desktop.allowEvents = false;
gui.desktop.allowChildEvents = false;
gui.flags = immediate( gui.flags ) & ~GUI_SHOWCURSOR;
timeline.reloadEngine.active = true;
timeline.reloadEngine.resetTime( 0 );
}
onNamedEvent "onNo" {
_close_popup
}
}
timeline reloadEngine {
properties {
float active = false;
}
onTime 0 {
gui.fadeIn.changeZOrder( ZO_BACK );
gui.fadeIn.overlayColor.a = transition( 0, 1, 800 );
gui.fadeSoundClass( 1, -60, 700 );
}
onTime 1000 {
gui.stopMusic();
gui.consoleCommand( "reloadEngine resetConfigs menu" + _newline );
}
}
_end_button
_button( Settings_Apply, _to_left_of( btnSettings_Reset ) - 3, _bottom( dlgSettings ), BUTTON_WIDTH, BUTTON_HEIGHT )
properties {
wstring countdown;
float baseTime;
float lastRMode;
float lastRAspect;
float lastRFullscreen;
}
events {
onNamedEvent "applySettings" {
gui.dlgSettings.vidRestart = false;
gui.dlgSettings.vidRestart = _cvar_cached_bool_changed( chkSettings_Video_Fullscreen, "r_fullScreen" );
gui.dlgSettings.vidRestart = immediate( gui.dlgSettings.vidRestart ) | _cvar_cached_int_changed( lstSettings_VideoMode, "r_mode" );
gui.dlgSettings.vidRestart = immediate( gui.dlgSettings.vidRestart ) | _cvar_cached_int_changed( lstSettings_VideoAspect, "r_aspectRatio" );
if( gui.dlgSettings.execMachineSpec ) {
gui.consoleCommandImmediate( "setMachineSpec " + toString( gui.dlgSettings.machineSpec, 0 ) + _newline );
}
gui.broadcastEventToDescendants( gui.getParentName( name ), "onApply" );
// require a restart if the user tries to change sound settings while in-game
// otherwise looping ambient sounds won't be restarted after the s_restart
if( gui.dlgSettings.restartSounds ) {
if( globals.game.isRunning == false ) {
gui.consoleCommand( "s_restart" + _newline );
gui.desktop.timeline.music.resetTime( 0 ); // ensure we get the music back
} else {
gui.dlgSettings.restartEngine = true;
}
}
if( gui.dlgSettings.vidRestart == true ) {
postNamedEvent( "promptVidRestart" );
} else {
postNamedEvent( "promptEngineRestart" );
}
gui.broadcastEventToDescendants( gui.getParentName( name ), "update" );
// ensure that everything is properly resized in the case of resolution/aspect ratio changes
gui.desktop.requestLayout();
}
onNamedEvent "promptEngineRestart" {
if( gui.dlgSettings.restartEngine || gui.dlgSettings.execMachineSpec || gui.dlgSettings.reloadImages || gui.dlgSettings.reloadSounds ) {
_setup_confirmation_yesno( "guis/mainmenu/restart_required", name, "onYes", "onNo" )
_show_popup( confirmation )
gui.focusedWindow = "btnConfirmationNo";
}
gui.dlgSettings.reloadImages = false;
gui.dlgSettings.execMachineSpec = false;
gui.dlgSettings.reloadSounds = false;
gui.dlgSettings.restartSounds = false;
gui.dlgSettings.vidRestart = false;
}
onNamedEvent "onRestoreYes" {
timeline.restoreSettings.active = false;
_close_popup
// start the delayed prompt timeline
timeline.delayedRestartPrompt.active = true;
timeline.delayedRestartPrompt.resetTime( 0 );
}
onNamedEvent "onRestoreNo" {
timeline.restoreSettings.active = true;
timeline.restoreSettings.resetTime( RESET_COUNTDOWN_MSEC );
}
onNamedEvent "promptVidRestart" {
// apply
gui.consoleCommand( "vid_restart" + _newline );
// show prompt
_setup_confirmation_yesno_literal( localizeArgs( "guis/mainmenu/displaymodeprompt", gui.btnSettings_Apply.countdown ), name, "onRestoreYes", "onRestoreNo" )
_show_popup( Confirmation )
gui.focusedWindow = "btnConfirmationNo";
// start the reset timeline
timeline.restoreSettings.active = true;
timeline.restoreSettings.resetTime( 0 );
// countdown display
baseTime = immediate( gui.time );
gui.btnSettings_Apply.countdown = toWString( abs( RESET_COUNTDOWN_MSEC - ( gui.time - baseTime ) ) / 1000, 0 );
gui.dlgSettings.vidRestart = false;
}
}
timeline delayedRestartPrompt {
properties {
float active = false;
}
onTime 50 {
// ensure that everything is properly resized in the case of resolution/aspect ratio changes
gui.desktop.requestLayout();
}
onTime 500 {
active = false;
postNamedEvent( "promptEngineRestart" );
}
}
// HACK
timeline clearGlyphCache {
properties {
float active = timeline.restoreSettings.active;
}
onTime 1000 {
gui.consoleCommand( "clearGlyphCache" + _newline );
resetTime( 0 );
}
}
// END HACK
timeline restoreSettings {
properties {
float active = false;
}
onTime RESET_COUNTDOWN_MSEC {
_close_popup
// restore
gui.setCVarInt( "r_mode", lastRMode );
gui.setCVarInt( "r_aspectRatio", lastRAspect );
gui.setCVarInt( "r_fullscreen", lastRFullscreen );
gui.consoleCommand( "vid_restart" + _newline );
// kill the countdown
gui.btnSettings_Apply.countdown = gui.blankWStr;
// update UI
gui.broadcastEventToDescendants( "dlgSettings", "update" );
active = false;
// show reload engine prompt, if needed
timeline.delayedRestartPrompt.active = true;
timeline.delayedRestartPrompt.resetTime( 0 );
}
}
_button_action(
lastRMode = gui.getCVarInt( "r_mode" );
lastRAspect = gui.getCVarInt( "r_aspectRatio" );
lastRFullscreen = gui.getCVarBool( "r_fullscreen" );
postNamedEvent( "applySettings" );
)
events {
onNamedEvent "onYes" {
gui.desktop.allowEvents = false;
gui.desktop.allowChildEvents = false;
gui.flags = immediate( gui.flags ) & ~GUI_SHOWCURSOR;
timeline.reloadEngine.active = true;
timeline.reloadEngine.resetTime( 0 );
}
onNamedEvent "onNo" {
_close_popup
}
}
timeline reloadEngine {
properties {
float active = false;
}
onTime 0 {
gui.fadeIn.changeZOrder( ZO_BACK );
gui.fadeIn.overlayColor.a = transition( 0, 1, 800 );
gui.fadeSoundClass( 1, -60, 700 );
}
onTime 1000 {
gui.stopMusic();
gui.consoleCommand( "reloadEngine menu" + _newline );
}
}
properties {
handle localizedText = localize( "guis/mainmenu/apply" );
}
_end_button
_tab_container( Settings_Video, SETTINGS_SIMPLE, PADDING, _top( dlgSettings ), _fill_to_right_of( dlgSettings ), _fill_to_bottom_of( dlgSettings ) - ( BUTTON_HEIGHT + 3 ) )
properties {
float fixedWidth = ( gui.dlgGameSettings.rect.w - $evalfloat( 2 * PADDING + 4 ) ) / 3;
}
_tab_page( SettingsVideo_Simple, localize( "guis/mainmenu/simple" ), Settings_Video, SETTINGS_SIMPLE, 2, 0 )
events {
onPropertyChanged "visible" {
callSuper();
if( visible ) {
gui.dlgSettings.currentPage = name;
}
}
}
windowDef lytSettingsVideo_Simple {
type layoutVertical;
properties {
rect rect = 0, 0, gui.tabpSettingsVideo_SimpleContent.rect.w, gui.tabpSettingsVideo_SimpleContent.rect.h;
vec4 margins = PADDING, PADDING, PADDING, PADDING;
float flags = VLF_DRAW_REVERSED;
}
_label_localized( Settings_Audio, localize( "guis/mainmenu/audio" ), 0, 0, 100, BUTTON_HEIGHT, COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
// ================================================================================
// Audio Options
// ================================================================================
_slider( settings_Audio_Volume, localize( "guis/mainmenu/volume" ), PADDING, 0, -60, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( s_volume_DB )
properties {
float lastPlayedTime = 0;
}
events {
onPropertyChanged "position" {
callSuper();
if( gui.time > lastPlayedTime + 100 && isVisible() ) {
gui.playSound( "volumesound" );
lastPlayedTime = immediate( gui.time );
}
}
}
_end_slider
_slider( settings_Audio_MusicVolume, localize( "guis/mainmenu/music_volume" ), PADDING, 0, -60, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( s_volumeMusic_dB )
events {
onPropertyChanged "position" {
callSuper();
gui.fadeSoundClass( 1, gui.getCVarFloat( "s_volumeMusic_dB" ), 0 );
}
}
_end_slider
_cvar_cache_bool( s_useAdpcmCompression )
_check( Settings_Audio_Compression, localize( "guis/mainmenu/compressedsounds" ), PADDING, 4, 100 )
_cvar_set_cached_bool( s_useAdpcmCompression )
events {
onPropertyChanged "checked" {
callSuper();
gui.dlgSettings.reloadSounds = gui.getCVarBool( "s_useAdpcmCompression" ) != checked;
}
}
_end_check
_dropdown( Settings_NumSpeakers, localize( "guis/mainmenu/speakersetup" ), PADDING, 4, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
float index;
float numSpeakers = gui.getCVarInt( "s_numberOfSpeakers" );
}
events {
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 );
}
onNamedEvent "onShow" {
postNamedEvent( "update" );
}
onNamedEvent "update" {
clearItems();
index = insertItem( toWStr( "<loc = 'guis/mainmenu/2'>" ), -1, 0 );
setItemDataInt( 2, index, 0 );
if( gui.querySpeakers( 4 ) ) {
index = insertItem( toWStr( "<loc = 'guis/mainmenu/quadraphonic'>" ), -1, 0 );
setItemDataInt( 4, index, 0 );
}
if( gui.querySpeakers( 6 ) ) {
index = insertItem( toWStr( "<loc = 'guis/mainmenu/5_1'>" ), -1, 0 );
setItemDataInt( 6, index, 0 );
}
if( gui.querySpeakers( 8 ) ) {
index = insertItem( toWStr( "<loc = 'guis/mainmenu/7_1'>" ), -1, 0 );
setItemDataInt( 8, index, 0 );
}
currentSelection = findItemDataInt( gui.getCVarInt( "s_numberOfSpeakers" ), 0 );
}
onCVarChanged "s_numberOfSpeakers" {
postNamedEvent( "update" );
}
onNamedEvent "onSelected" {
callSuper();
numSpeakers = getItemDataInt( currentSelection, 0, 0 );
gui.dlgSettings.restartSounds = numSpeakers != gui.getCVarInt( "s_numberOfSpeakers" );
}
onNamedEvent "onApply" {
gui.setCVarInt( "s_numberOfSpeakers", numSpeakers );
}
}
_end_dropdown
_button( Settings_Simple_Detect, PADDING, PADDING, BUTTON_WIDTH, BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/detectdevices" );
}
_button_action(
gui.lstSettings_NumSpeakers.postNamedEvent( "update" );
timeline.default.active = true;
timeline.default.resetTime( 0 );
)
// user feedback: give some feedback that something is happening,
// even though it's almost instant
timeline {
properties {
float active = false;
}
onTime 0 {
_show_popup( sdNetProgress )
}
onTime 500 {
_close_popup
}
}
_end_button
_label_localized( Settings_Video, localize( "guis/mainmenu/video" ), 0, PADDING, 100, $evalfloat( BUTTON_HEIGHT + PADDING ), COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
// ================================================================================
// Video Options
// ================================================================================
_slider( Settings_Video_Brightness, localize( "guis/mainmenu/brightness" ), PADDING, 0, 0.5, 2, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( r_brightness )
properties {
float pageStep = 0.1;
}
_end_slider
_slider( Settings_Video_Gamma, localize( "guis/mainmenu/gamma" ), PADDING, 0, 0.5, 2, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( r_gamma )
properties {
float pageStep = 0.1;
}
_end_slider
_cvar_cache_bool( r_fullscreen )
_check( Settings_Video_Fullscreen, localize( "guis/mainmenu/fullscreen" ), PADDING, 0, 100 )
_cvar_set_cached_bool( r_fullscreen )
_end_check
_dropdown( Settings_VideoAspect, localize( "guis/mainmenu/aspectratio" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
events {
onNamedEvent "update" {
currentSelection = gui.getCVarInt( "r_aspectRatio" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), rect.w, 0 ); // Mode
insertItem( toWStr( "<loc = 'guis/mainmenu/4_3'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/16_9'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/16_10'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/5_4'>" ), -1, 0 );
}
onCVarChanged "r_aspectRatio" {
callSuper();
currentSelection = gui.getCVarInt( "r_aspectRatio" );
}
onNamedEvent "onSelected" {
callSuper();
if( currentSelection >= 0 ) {
gui.setPropertyFromString( "gui." + gui.getParentName( name ) + ".r_aspectRatioCached", toString( currentSelection, 0 ) );
}
}
}
_end_dropdown_list
_cvar_cache_int( r_aspectRatio )
_end_dropdown_layout
_dropdown( Settings_VideoMode, localize( "guis/mainmenu/resolution" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 7 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
wstring lastSelection;
}
events {
onNamedEvent "update" {
//gui.scriptPushFloat( gui.lstSettings_VideoAspect.currentSelection );
gui.scriptPushFloat( -1 ); // allow all aspects
gui.scriptPushFloat( gui.chkSettings_Video_Fullscreen.checked );
fillFromEnumerator( "videoModeList" );
}
onPropertyChanged /*"gui.lstSettings_VideoAspect.currentSelection"*/
"gui.chkSettings_Video_Fullscreen.checked" {
if( gui.lstSettings_VideoAspect.currentSelection >= 0 ) {
//gui.scriptPushFloat( gui.lstSettings_VideoAspect.currentSelection );
gui.scriptPushFloat( -1 ); // allow all aspects
gui.scriptPushFloat( gui.chkSettings_Video_Fullscreen.checked );
fillFromEnumerator( "videoModeList" );
if( currentSelection == -1 ) {
currentSelection = 0;
}
}
}
onCVarChanged "r_mode" {
callSuper();
currentSelection = findItem( toWString( gui.getCVarInt( "r_mode" ), 0 ), 1 );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), rect.w, 0 ); // Mode
insertColumn( gui.blankWStr, 0, 1 ); // Data;
}
onPropertyChanged "currentSelection" {
callSuper();
if( currentSelection >= 0 ) {
gui.setPropertyFromString( "gui." + gui.getParentName( name ) + ".r_modeCached", toStr( getItemText( currentSelection, 1 ) ) );
}
}
}
_end_dropdown_list
_cvar_cache_int( r_mode )
_end_dropdown_layout
_dropdown( Settings_Video_MachineSpec, localize( "guis/mainmenu/quality" ), PADDING, 4, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_machineSpec" );
if( gui.dlgSettings.execMachineSpec == true ) {
return;
}
if( currentSelection == 0 ) {
if( gui.checkCVarsAgainstCFG( "specs", ".dat", "minspec" ) == false ) {
currentSelection = 3;
}
return;
}
if( currentSelection == 1 ) {
if( gui.checkCVarsAgainstCFG( "specs", ".dat", "recspec" ) == false ) {
currentSelection = 3;
}
return;
}
if( currentSelection == 2 ) {
if( gui.checkCVarsAgainstCFG( "specs", ".dat", "highspec" ) == false ) {
currentSelection = 3;
}
return;
}
}
onCVarChanged "com_machineSpec" {
callSuper();
postNamedEvent( "update" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Mode
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/custom'>" ), -1, 0 );
}
onNamedEvent "onSelected" {
callSuper();
if( currentSelection >= 0 && currentSelection < 3 ) {
gui.dlgSettings.machineSpec = immediate( currentSelection );
gui.dlgSettings.execMachineSpec = true;
}
}
}
_end_dropdown_list
_cvar_cache_int( com_machineSpec )
_end_dropdown_layout
_button( settings_Video_ChooseMachineSpec, PADDING, PADDING, BUTTON_WIDTH, BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/autodetect" );
}
_button_action(
gui.consoleCommandImmediate( "setMachineSpec -1 detect" + _newline );
gui.dlgSettings.execMachineSpec = true;
gui.lstSettings_Video_MachineSpec.postNamedEvent( "update" );
gui.lstSettings_Video_MachineSpec.postNamedEvent( "onSelected" );
timeline.default.active = true;
timeline.default.resetTime( 0 );
)
// user feedback: give some feedback that something is happening,
// even though it's almost instant
timeline {
properties {
float active = false;
}
onTime 0 {
_show_popup( sdNetProgress )
}
onTime 500 {
_close_popup
}
}
_end_button
}
_end_tab_page
_tab_page( Settings_Voice, localize( "guis/mainmenu/voice" ), Settings_Video, SETTINGS_VOICE, _to_right_of( tabpSettingsVideo_Simple ), 0 )
events {
onPropertyChanged "visible" {
callSuper();
if( visible ) {
gui.dlgSettings.currentPage = name;
}
}
}
windowDef lytSettingsVoice {
type layoutVertical;
properties {
rect rect = 0, 0, gui.tabpSettings_VoiceContent.rect.w, gui.tabpSettings_VoiceContent.rect.h;
vec4 margins = PADDING, PADDING, PADDING, PADDING;
float flags = VLF_DRAW_REVERSED;
}
_label_localized( Settings_Voice, localize( "guis/mainmenu/voice" ), 0, 0, 100, BUTTON_HEIGHT, COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
_slider( settings_Audio_Volume_VOIP_In, localize( "guis/mainmenu/volume_voip_in" ), PADDING, 0, -60, 10, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( s_volume_VoIPIn_dB )
_end_slider
_slider( Settings_Audio_Volume_VOIP_Out, localize( "guis/mainmenu/volume_voip_out" ), PADDING, 0, -60, 10, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( s_volume_VoIPOut_dB )
_end_slider
_slider( Settings_Audio_Volume_VoIP_Scale, localize( "guis/mainmenu/voice/audiofade" ), PADDING, 0, 0, 1, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_slider( s_volume_VoIPScale )
properties {
float pageStep = 0.1;
}
events {
onQueryTooltip {
toolTipText = localizeArgs( "guis/mainmenu/voice/audiofade_tip" );
}
}
_end_slider
_check( Settings_ReceiveGlobal, localize( "guis/mainmenu/voice/global" ), PADDING, 4, 100 )
_cvar_bool( ui_voipReceiveGlobal )
_end_check
_check( Settings_ReceiveTeam, localize( "guis/mainmenu/voice/team" ), PADDING, 4, 100 )
_cvar_bool( ui_voipReceiveTeam )
_end_check
_check( Settings_ReceiveFireTeam, localize( "guis/mainmenu/voice/fireteam" ), PADDING, 4, 100 )
_cvar_bool( ui_voipReceiveFireTeam )
_end_check
_dropdown( Settings_PrimarySound, localize( "guis/mainmenu/sound/primary" ), PADDING, 4, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 8 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT | WF_TRUNCATE_TEXT;
float index;
string device = gui.getCVar( "s_primaryDevice" );
}
events {
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // name
insertColumn( gui.blankWStr, 0, 1 ); // hash
}
onNamedEvent "onShow" {
clearItems();
fillFromEnumerator( "soundOutput" );
postNamedEvent( "update" );
}
onNamedEvent "update" {
currentSelection = findItem( toWStr( gui.getCVar( "s_primaryDevice" ) ), 1 );
}
onNamedEvent "onSelected" {
callSuper();
device = toStr( getItemText( currentSelection, 1 ) );
gui.dlgSettings.restartSounds = icompare( device, gui.getCVar( "s_primaryDevice" ) ) != true;
}
onNamedEvent "onApply" {
gui.setCVar( "s_primaryDevice", device );
}
}
_end_dropdown
_dropdown( Settings_VoiceSound, localize( "guis/mainmenu/sound/voice" ), PADDING, 4, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 8 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT | WF_TRUNCATE_TEXT;
float index;
string device = gui.getCVar( "s_voiceDevice" );
}
events {
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // name
insertColumn( gui.blankWStr, 0, 1 ); // hash
}
onNamedEvent "onShow" {
clearItems();
fillFromEnumerator( "soundOutput" );
postNamedEvent( "update" );
}
onNamedEvent "update" {
currentSelection = findItem( toWStr( gui.getCVar( "s_voiceDevice" ) ), 1 );
}
onNamedEvent "onSelected" {
callSuper();
device = toStr( getItemText( currentSelection, 1 ) );
gui.dlgSettings.restartSounds = icompare( device, gui.getCVar( "s_voiceDevice" ) ) != true;
}
onNamedEvent "onApply" {
gui.setCVar( "s_voiceDevice", device );
}
}
_end_dropdown
_dropdown( Settings_MicSound, localize( "guis/mainmenu/sound/microphone" ), PADDING, 4, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Simple ), $evalfloat( BUTTON_HEIGHT * 8 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT | WF_TRUNCATE_TEXT;
float index;
string device = gui.getCVar( "s_micDevice" );
}
events {
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // name
insertColumn( gui.blankWStr, 0, 1 ); // hash
}
onNamedEvent "onShow" {
clearItems();
fillFromEnumerator( "soundInput" );
postNamedEvent( "update" );
}
onNamedEvent "update" {
currentSelection = findItem( toWStr( gui.getCVar( "s_micDevice" ) ), 1 );
}
onNamedEvent "onSelected" {
callSuper();
device = toStr( getItemText( currentSelection, 1 ) );
gui.dlgSettings.restartSounds = icompare( device, gui.getCVar( "s_micDevice" ) ) != true;
}
onNamedEvent "onApply" {
gui.setCVar( "s_micDevice", device );
}
}
_end_dropdown
_button( Settings_Voice_Detect, PADDING, PADDING, BUTTON_WIDTH, BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/detectdevices" );
}
_button_action(
gui.refreshSoundDevices();
gui.lstSettings_PrimarySound.postNamedEvent( "onShow" );
gui.lstSettings_VoiceSound.postNamedEvent( "onShow" );
gui.lstSettings_MicSound.postNamedEvent( "onShow" );
timeline.default.active = true;
timeline.default.resetTime( 0 );
)
// user feedback: give some feedback that something is happening,
// even though it's almost instant
timeline {
properties {
float active = false;
}
onTime 0 {
_show_popup( sdNetProgress )
}
onTime 500 {
_close_popup
}
}
_end_button
_button( Settings_Voice_Test, PADDING, PADDING, BUTTON_WIDTH, BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/voice/testaudio" );
float allowInput = true;
float percent = 0.0f;
rect progressRect = absoluteRect.x + 4, ( absoluteRect.y + absoluteRect.h + 4 ), ( absoluteRect.w - 8 ) * percent, 2;
float playingBack = false;
}
_button_disable_if( "allowInput", allowInput != true )
#define SOUND_TEST_DURATION 5000
#define SOUND_TEST_TOTAL_DURATION 10000
_button_action(
gui.soundTest( STC_START, SOUND_TEST_DURATION );
timeline.soundTest.active = true;
timeline.soundTest.resetTime( 0 );
)
timeline soundTest {
properties {
float active = false;
}
onTime 0 {
localizedText = localize( "guis/mainmenu/voice/recording" );
allowInput = false;
playingBack = false;
}
onTime SOUND_TEST_DURATION {
localizedText = localize( "guis/mainmenu/voice/playingback" );
}
onTime SOUND_TEST_TOTAL_DURATION {
localizedText = localize( "guis/mainmenu/voice/testaudio" );
allowInput = true;
}
}
events {
onPostDraw {
callSuper();
if( allowInput == false ) {
if( gui.soundTest( STC_STATUS_RECORDING, 0.0f ) ) {
percent = gui.soundTest( STC_STATUS_PERCENT, 0.0f );
}
if( gui.soundTest( STC_STATUS_PLAYBACK, 0.0f ) && playingBack == false ) {
percent = transition( 0, 1, SOUND_TEST_DURATION );
playingBack = true;
}
if( percent > 0.0f ) {
drawCachedMaterial( gui.whiteMaterial, progressRect, "1.0, 1.0, 1.0, 0.75" );
}
}
}
}
_end_button
}
_end_tab_page
_tab_page( SettingsVideo_Advanced, localize( "guis/mainmenu/advanced" ), Settings_Video, SETTINGS_ADVANCED, _to_right_of( tabpSettings_Voice ), 0 )
events {
onPropertyChanged "visible" {
callSuper();
if( visible ) {
gui.dlgSettings.currentPage = name;
}
}
}
windowDef lytSettingsVideo_Advanced {
type layoutVertical;
properties {
rect rect = 0, 0, gui.tabpSettingsVideo_SimpleContent.rect.w, gui.tabpSettingsVideo_SimpleContent.rect.h;
vec4 margins = PADDING, PADDING, PADDING, PADDING;
float flags = VLF_DRAW_REVERSED;
}
/*
_label_localized( Settings_AdvAudio, localize( "guis/mainmenu/audio" ), 0, 0, 100, BUTTON_HEIGHT, COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
// ================================================================================
// Audio Options
// ================================================================================
_cvar_cache_string( s_driver )
_radio( settings_Audio_Driver_DSound, localize( "guis/mainmenu/dsound" ), PADDING, 0, _fill_to_right_of( lytSettingsVideo_Advanced ) )
_cvar_set_string( s_driver, "dsound" )
_end_radio
_radio( settings_Audio_Driver_OpenAL, localize( "guis/mainmenu/openal" ), PADDING, 0, _fill_to_right_of( lytSettingsVideo_Advanced ) )
_cvar_set_string( s_driver, "openal" )
_button_disable_if( "", true )
_end_radio
_label_localized( Settings_AdvVideo, localize( "guis/mainmenu/video" ), 0, 0, 100, $evalfloat( BUTTON_HEIGHT + PADDING ), COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
*/
// ================================================================================
// Video Options
// ================================================================================
_label_localized( Settings_Video_Advanced_TextureQuality, localize( "guis/mainmenu/texturequality" ), 0, 0, 100, BUTTON_HEIGHT, COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
_cvar_cache_int( image_diffusePicMip )
_slider( Settings_Video_DiffusePicmip, localize( "guis/mainmenu/diffuse" ), PADDING, 0, -2, 2, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_cache_slider_int( image_diffusePicMip )
events {
onPropertyChanged "position" {
callSuper();
gui.dlgSettings.reloadImages = gui.dlgSettings.reloadImages || position != gui.getCVarInt( "image_diffusePicMip" );
}
}
_end_slider
_cvar_cache_int( image_bumpPicMip )
_slider( Settings_Video_BumpPicmip, localize( "guis/mainmenu/bump" ), PADDING, 0, -2, 2, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_cache_slider_int( image_bumpPicMip )
events {
onPropertyChanged "position" {
callSuper();
gui.dlgSettings.reloadImages = gui.dlgSettings.reloadImages || position != gui.getCVarInt( "image_bumpPicMip" );
}
}
_end_slider
_cvar_cache_int( image_specularPicMip )
_slider( Settings_Video_SpecularPicmip, localize( "guis/mainmenu/specular" ), PADDING, 0, -2, 2, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_cache_slider_int( image_specularPicMip )
events {
onPropertyChanged "position" {
callSuper();
gui.dlgSettings.reloadImages = gui.dlgSettings.reloadImages || position != gui.getCVarInt( "image_specularPicMip" );
}
}
_end_slider
_cvar_cache_int( image_anisotropy )
_slider( Settings_Video_Anisotropy, localize( "guis/mainmenu/anisotropy" ), PADDING, 0, 0, 16, ADVANCED_DROPDOWN_LABEL_WIDTH, SS_SLIDER_WIDTH )
_cvar_cache_slider_int( image_anisotropy )
events {
onPostDraw {
callSuper();
drawText( toWString( position, 0 ), "absoluteRect.x + absoluteRect.w - 8, absoluteRect.y, 24, absoluteRect.h", COLOR_WHITE, 12, DTF_SINGLELINE | DTF_RIGHT | DTF_VCENTER );
}
}
_end_slider
_label_localized( Settings_Video_Advanced_VisualQuality, localize( "guis/mainmenu/visualquality" ), 0, 4, 100, BUTTON_HEIGHT, COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
$template __setup_spec( Command )
properties {
string config;
}
events {
onNamedEvent "update" {
config = "";
}
onNamedEvent( "onSelected" ) {
callSuper();
if( currentSelection == 0 ) {
config = "min";
return;
}
if( currentSelection == 1 ) {
config = "rec";
return;
}
if( currentSelection == 2 ) {
config = "high";
return;
}
config = "";
}
onNamedEvent "onApply" {
if( compare( config, "" ) ) {
return;
}
gui.consoleCommandImmediate( "exec specs/" + config + "spec_" ## Command + ".dat"+ _newline );
config = "";
}
}
$endtemplate
_dropdown( Settings_Video_DrawQuality, localize( "guis/mainmenu/drawquality" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 7 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
float value;
}
events {
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
postNamedEvent( "update" );
}
onCVarChanged "r_megaDrawMethod" {
postNamedEvent( "update" );
}
onNamedEvent "update" {
callSuper();
value = gui.getCVarInt( "r_megaDrawMethod" );
if( value == 0 ) {
currentSelection = 1;
} else {
currentSelection = 0;
}
}
onNamedEvent( "onSelected" ) {
callSuper();
if( currentSelection == 0 ) {
gui.setPropertyFromString( "gui." + gui.getParentName( name ) + ".r_megaDrawMethodCached", "3" );
return;
}
gui.setPropertyFromString( "gui." + gui.getParentName( name ) + ".r_megaDrawMethodCached", "0" );
}
}
_end_dropdown_list
_cvar_cache_int( r_megaDrawMethod )
_end_dropdown_layout
_dropdown( Settings_Video_Foliage, localize( "guis/mainmenu/foliage" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
__setup_spec( "foliage" )
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_lastFoliageLevel" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
}
}
_end_dropdown
_dropdown( Settings_Video_CPULevel, localize( "guis/mainmenu/cpulevel" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
__setup_spec( "cpu" )
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_lastCPULevel" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
}
}
_end_dropdown
_dropdown( Settings_Video_CPUDetailLevel, localize( "guis/mainmenu/cpudetaillevel" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
__setup_spec( "gamedetail" )
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_lastCPUDetailLevel" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
}
}
_end_dropdown
_dropdown( Settings_Video_GraphicsLevel, localize( "guis/mainmenu/graphicslevel" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
__setup_spec( "gpu" )
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_lastGraphicsLevel" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
}
}
_end_dropdown
_dropdown( Settings_Video_GraphicsDetailLevel, localize( "guis/mainmenu/graphicsdetaillevel" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
__setup_spec( "gpudetail" )
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_lastGraphicsDetailLevel" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/normal'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
}
}
_end_dropdown
_dropdown( Settings_Video_GPUSpec, localize( "guis/mainmenu/shaderspec" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 5 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
}
events {
onNamedEvent "update" {
callSuper();
currentSelection = gui.getCVarInt( "com_gpuSpec" );
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); // Spec
insertItem( toWStr( "<loc = 'guis/mainmenu/low'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/medium'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/high'>" ), -1, 0 );
insertItem( toWStr( "<loc = 'guis/mainmenu/ultra'>" ), -1, 0 );
}
onNamedEvent( "onSelected" ) {
callSuper();
if( currentSelection >= 0 ) {
gui.setPropertyFromString( "gui." + gui.getParentName( name ) + ".com_gpuSpecCached", toString( currentSelection, 0 ) );
}
}
}
_end_dropdown_list
_cvar_cache_int( com_gpuSpec )
_end_dropdown_layout
_dropdown( Settings_Video_Multisamples, localize( "guis/mainmenu/multisamples" ), PADDING, 0, ADVANCED_DROPDOWN_LABEL_WIDTH, _fill_to_right_of( lytSettingsVideo_Advanced ), $evalfloat( BUTTON_HEIGHT * 7 ), "right" )
properties {
float flags = immediate( flags ) | WF_AUTO_SIZE_HEIGHT;
float index;
float value;
}
events {
onNamedEvent "update" {
callSuper();
value = gui.getCVarInt( "r_multisamples" );
if( value == 0 ) {
currentSelection = 0;
} else {
currentSelection = findItem( toWStr( toString( value, 0 ) + "x" ), 0 );
}
}
onCreate {
insertColumn( toWStr( "<width = 100%>" ), 0, 0 ); //spec
index = insertItem( toWStr( "<loc = 'guis/mainmenu/disabled'>" ), -1, 0 );
setItemDataInt( 0, index, 0 );
fillFromEnumerator( "availableMSAA" );
}
onNamedEvent( "onSelected" ) {
callSuper();
if( currentSelection >= 0 ) {
gui.setPropertyFromString( "gui." + gui.getParentName( name ) + ".r_multisamplesCached", toString( getItemDataInt( currentSelection, 0, 0 ), 0 ) );
gui.dlgSettings.restartEngine = getItemDataInt( currentSelection, 0, 0 ) != gui.getCVarInt( "r_multisamples" );
}
}
}
_end_dropdown_list
_cvar_cache_int( r_multisamples )
_end_dropdown_layout
_label_localized( Settings_Video_Advanced_Misc, localize( "guis/mainmenu/misc" ), 0, 4, 100, BUTTON_HEIGHT, COLOR_WHITE )
properties {
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
_end_label
_cvar_cache_bool( r_swapInterval )
_check( Settings_Video_VSync, localize( "guis/mainmenu/vsync" ), PADDING, 0, 100 )
_cvar_set_cached_bool( r_swapInterval )
_end_check
_cvar_cache_bool( r_shadows )
_cvar_cache_bool( g_showPlayerShadow )
_check( Settings_Video_Shadows, localize( "guis/mainmenu/shadows" ), PADDING, 0, 100 )
_cvar_set_cached_bool( r_shadows )
_cvar_set_cached_bool_secondary( g_showPlayerShadow )
_end_check
_cvar_cache_bool( r_softParticles )
_check( Settings_Video_SoftParticles, localize( "guis/mainmenu/softparticles" ), PADDING, 0, 100 )
_cvar_set_cached_bool( r_softParticles )
_cvar_gui_locked( r_softParticles )
_end_check
_cvar_cache_bool( r_useAlphaToCoverage )
_check( Settings_Video_AlphaToCoverage, localize( "guis/mainmenu/alphatocoverage" ), PADDING, 0, 100 )
_cvar_set_cached_bool( r_useAlphaToCoverage )
_cvar_gui_locked( r_useAlphaToCoverage )
_end_check
}
_end_tab_page
_end_tab_container
_end_dialog