|
@@ -115,6 +115,9 @@ if(!isObject( OptionsMenuActionMap ) )
|
|
|
|
|
|
OptionsMenuActionMap.bind( keyboard, R, OptionsMenuReset );
|
|
|
OptionsMenuActionMap.bind( gamepad, btn_x, OptionsMenuReset );
|
|
|
+
|
|
|
+ OptionsMenuActionMap.bind( keyboard, Enter, OptionsMenuActivateOption );
|
|
|
+ OptionsMenuActionMap.bind( gamepad, btn_a, OptionsMenuActivateOption );
|
|
|
}
|
|
|
|
|
|
function OptionsMenuList::syncGui(%this)
|
|
@@ -178,6 +181,49 @@ function OptionsMenuList::syncGui(%this)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+function OptionsMenuList::checkForUnappliedChanges(%this)
|
|
|
+{
|
|
|
+ %unappliedChanges = false;
|
|
|
+
|
|
|
+ foreach(%option in %this)
|
|
|
+ {
|
|
|
+ if(%option.class $= "OptionsListEntry")
|
|
|
+ {
|
|
|
+ if(%option.currentOptionIndex >= 0 && %option.currentOptionIndex < %option.optionsObject.getCount())
|
|
|
+ {
|
|
|
+ %targetOptionLevel = %option.optionsObject.getObject(%option.currentOptionIndex);
|
|
|
+
|
|
|
+ if(!%targetOptionLevel.isCurrent())
|
|
|
+ %unappliedChanges = true;
|
|
|
+
|
|
|
+ if(%option.optionsObject.requiresRestart)
|
|
|
+ $optionsChangeRequiresRestart = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return %unappliedChanges;
|
|
|
+}
|
|
|
+
|
|
|
+function OptionsMenuList::applyChanges(%this)
|
|
|
+{
|
|
|
+ foreach(%option in %this)
|
|
|
+ {
|
|
|
+ if(%option.class $= "OptionsListEntry")
|
|
|
+ {
|
|
|
+ //If it's custom or nonsensical index, there's some kind of external factor going on, so we're
|
|
|
+ //just going to skip applying it because we don't know what we'd be applying
|
|
|
+ if(%option.currentOptionIndex >= 0 && %option.currentOptionIndex < %option.optionsObject.getCount())
|
|
|
+ {
|
|
|
+ %targetOptionLevel = %option.optionsObject.getObject(%option.currentOptionIndex);
|
|
|
+
|
|
|
+ if(!%targetOptionLevel.isCurrent())
|
|
|
+ %targetOptionLevel.apply();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
function OptionsMenu::openOptionsCategory(%this, %categoryName)
|
|
|
{
|
|
|
VideoSettingsList.setVisible(%categoryName $= "Video");
|
|
@@ -343,7 +389,7 @@ function OptionMenuPrevSetting(%val)
|
|
|
|
|
|
%newOptionLevel = %optionObject.getObject(%option.currentOptionIndex);
|
|
|
|
|
|
- echo("Changed option: " @ %optionObject.optionName @ " from level: " @ %currentOptionLevel.displayName @ " to level: " @ %newOptionLevel.displayName);
|
|
|
+ //echo("Changed option: " @ %optionObject.optionName @ " from level: " @ %currentOptionLevel.displayName @ " to level: " @ %newOptionLevel.displayName);
|
|
|
}
|
|
|
|
|
|
$MenuList.syncGUI();
|
|
@@ -368,7 +414,7 @@ function OptionMenuNextSetting(%val)
|
|
|
|
|
|
%newOptionLevel = %optionObject.getObject(%option.currentOptionIndex);
|
|
|
|
|
|
- echo("Changed option: " @ %optionObject.optionName @ " from level: " @ %currentOptionLevel.displayName @ " to level: " @ %newOptionLevel.displayName);
|
|
|
+ //echo("Changed option: " @ %optionObject.optionName @ " from level: " @ %currentOptionLevel.displayName @ " to level: " @ %newOptionLevel.displayName);
|
|
|
}
|
|
|
|
|
|
$MenuList.syncGUI();
|
|
@@ -379,6 +425,23 @@ function OptionMenuStickChangeSetting(%val)
|
|
|
|
|
|
}
|
|
|
|
|
|
+function OptionsMenuActivateOption(%val)
|
|
|
+{
|
|
|
+ if(!%val)
|
|
|
+ return;
|
|
|
+
|
|
|
+ %option = $MenuList.getObject($MenuList.listPosition);
|
|
|
+
|
|
|
+ if(!isObject(%option))
|
|
|
+ return;
|
|
|
+
|
|
|
+ echo(%option.class);
|
|
|
+
|
|
|
+ if(%option.class $= "OptionsKeybindEntry")
|
|
|
+ {
|
|
|
+ eval(%option-->button.altCommand);
|
|
|
+ }
|
|
|
+}
|
|
|
//
|
|
|
//
|
|
|
//
|
|
@@ -584,53 +647,12 @@ function tryCloseOptionsMenu(%val)
|
|
|
if(!%val)
|
|
|
return;
|
|
|
|
|
|
- //scan through all our options and see if any are any unapplied changes. If
|
|
|
- //so we need to prompt to apply or discard them
|
|
|
- %unappliedChanges = false;
|
|
|
+ $optionsChangeRequiresRestart = false;
|
|
|
|
|
|
- foreach(%option in VideoSettingsList)
|
|
|
- {
|
|
|
- if(%option.class $= "OptionsListEntry")
|
|
|
- {
|
|
|
- if(%option.currentOptionIndex >= 0 && %option.currentOptionIndex < %option.optionsObject.getCount())
|
|
|
- {
|
|
|
- %targetOptionLevel = %option.optionsObject.getObject(%option.currentOptionIndex);
|
|
|
-
|
|
|
- echo("tryCloseOptionsMenu() - testing option: " @ %option.optionsObject.optionName @ " target level of: " @ %targetOptionLevel.displayName);
|
|
|
-
|
|
|
- if(!%targetOptionLevel.isCurrent())
|
|
|
- {
|
|
|
- %unappliedChanges = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ %unappliedVideoChanges = VideoSettingsList.checkForUnappliedChanges();
|
|
|
+ %unappliedAudioChanges = AudioSettingsList.checkForUnappliedChanges();
|
|
|
|
|
|
- //check if we already have unapplied changes, so we can skip further iterating
|
|
|
- if(!%unappliedChanges)
|
|
|
- {
|
|
|
- foreach(%option in AudioSettingsList)
|
|
|
- {
|
|
|
- if(%option.class $= "OptionsListEntry")
|
|
|
- {
|
|
|
- if(%option.currentOptionIndex >= 0 && %option.currentOptionIndex < %option.optionsObject.getCount())
|
|
|
- {
|
|
|
- %targetOptionLevel = %option.optionsObject.getObject(%option.currentOptionIndex);
|
|
|
-
|
|
|
- echo("tryCloseOptionsMenu() - testing option: " @ %option.optionsObject.optionName @ " target level of: " @ %targetOptionLevel.displayName);
|
|
|
-
|
|
|
- if(!%targetOptionLevel.isCurrent())
|
|
|
- {
|
|
|
- %unappliedChanges = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(%unappliedChanges)
|
|
|
+ if(%unappliedVideoChanges || %unappliedAudioChanges)
|
|
|
{
|
|
|
MessageBoxOKCancel("Discard Changes?", "You have unapplied changes to your settings, do you wish to apply or discard them?",
|
|
|
"OptionsMenu.applyChangedOptions();", "Canvas.popDialog(OptionsMenu);",
|
|
@@ -640,53 +662,27 @@ function tryCloseOptionsMenu(%val)
|
|
|
{
|
|
|
Canvas.popDialog(OptionsMenu);
|
|
|
}
|
|
|
-}
|
|
|
+}
|
|
|
|
|
|
function OptionsMenu::applyChangedOptions(%this)
|
|
|
{
|
|
|
- foreach(%option in VideoSettingsList)
|
|
|
- {
|
|
|
- if(%option.class $= "OptionsListEntry")
|
|
|
- {
|
|
|
- //If it's custom or nonsensical index, there's some kind of external factor going on, so we're
|
|
|
- //just going to skip applying it because we don't know what we'd be applying
|
|
|
- if(%option.currentOptionIndex >= 0 && %option.currentOptionIndex < %option.optionsObject.getCount())
|
|
|
- {
|
|
|
- %targetOptionLevel = %option.optionsObject.getObject(%option.currentOptionIndex);
|
|
|
-
|
|
|
- if(!%targetOptionLevel.isCurrent())
|
|
|
- {
|
|
|
- echo("Applying setting of " @ %option.optionsObject.optionName);
|
|
|
- %targetOptionLevel.apply();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ VideoSettingsList.applyChanges();
|
|
|
+ AudioSettingsList.applyChanges();
|
|
|
|
|
|
- foreach(%option in AudioSettingsList)
|
|
|
- {
|
|
|
- if(%option.class $= "OptionsListEntry")
|
|
|
- {
|
|
|
- //If it's custom or nonsensical index, there's some kind of external factor going on, so we're
|
|
|
- //just going to skip applying it because we don't know what we'd be applying
|
|
|
- if(%option.currentOptionIndex >= 0 && %option.currentOptionIndex < %option.optionsObject.getCount())
|
|
|
- {
|
|
|
- %targetOptionLevel = %option.optionsObject.getObject(%option.currentOptionIndex);
|
|
|
-
|
|
|
- if(!%targetOptionLevel.isCurrent())
|
|
|
- {
|
|
|
- echo("Applying setting of " @ %option.optionsObject.optionName);
|
|
|
- %targetOptionLevel.apply();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //$pref::SFX::masterVolume = OptionsMenuSettingsList.getValue(2);
|
|
|
+ sfxSetMasterVolume( $pref::SFX::masterVolume );
|
|
|
+ sfxSetChannelVolume( $GuiAudioType, $pref::SFX::channelVolume[ $GuiAudioType ] );
|
|
|
+ sfxSetChannelVolume( $SimAudioType, $pref::SFX::channelVolume[ $SimAudioType ] );
|
|
|
+ sfxSetChannelVolume( $MusicAudioType, $pref::SFX::channelVolume[ $MusicAudioType ] );
|
|
|
|
|
|
//Finally, write our prefs to file
|
|
|
%prefPath = getPrefpath();
|
|
|
export("$pref::*", %prefPath @ "/clientPrefs." @ $TorqueScriptFileExtension, false);
|
|
|
|
|
|
Canvas.popDialog(OptionsMenu);
|
|
|
+
|
|
|
+ if($optionsChangeRequiresRestart)
|
|
|
+ MessageBoxOK("Restart Required", "Some of your changes require the game to be restarted.");
|
|
|
}
|
|
|
|
|
|
function doKeyRemap( %optionEntry )
|
|
@@ -841,442 +837,11 @@ function OptionsMenu::apply(%this)
|
|
|
OptionsMenu.unappliedChanges.empty();
|
|
|
}
|
|
|
|
|
|
-function OptionsMenu::resetToDefaults(%this)
|
|
|
+function OptionsMenu::resetSettings(%this)
|
|
|
{
|
|
|
MessageBoxOKCancel("", "This will set the graphical settings back to the auto-detected defaults. Do you wish to continue?", "AutodetectGraphics();", "");
|
|
|
}
|
|
|
|
|
|
-//
|
|
|
-// old ones
|
|
|
-//
|
|
|
-function populateDisplaySettingsList()
|
|
|
-{
|
|
|
- OptionsMenuSettingsList.clear();
|
|
|
-
|
|
|
- OptionsMenu.currentCategory = "Display";
|
|
|
-
|
|
|
- if(isObject(OptionName))
|
|
|
- OptionName.setText("");
|
|
|
- if(isObject(OptionDescription))
|
|
|
- OptionDescription.setText("");
|
|
|
-
|
|
|
- %apiList = "";
|
|
|
- %apiCount = GFXInit::getAdapterCount();
|
|
|
- %apiIdx = 0;
|
|
|
- for(%i=0; %i < %apiCount; %i++)
|
|
|
- {
|
|
|
- %api = GFXInit::getAdapterType(%i);
|
|
|
-
|
|
|
- if(%api !$= "NullDevice")
|
|
|
- {
|
|
|
- if(%apiIdx==0)
|
|
|
- %apiList = %api;
|
|
|
- else
|
|
|
- %apiList = %apiList TAB %api;
|
|
|
-
|
|
|
- %apiIdx++;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- trim(%apiList);
|
|
|
-
|
|
|
- %displayDevice = OptionsMenu.getOptionVariableValue("$pref::Video::displayDevice");
|
|
|
- if(%displayDevice $= "")
|
|
|
- %displayDevice = getDisplayDeviceType();
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionRow("Display API", "$pref::Video::displayDevice", %apiList, false, "", true, "The display API used for rendering.", %displayDevice);
|
|
|
-
|
|
|
- %numDevices = Canvas.getMonitorCount();
|
|
|
-
|
|
|
- %devicesList = getDisplayDeviceList();
|
|
|
-
|
|
|
- if($pref::Video::displayDeviceId $= "")
|
|
|
- $pref::Video::displayDeviceId = getField(%devicesList, $pref::Video::deviceId);
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionRow("Display Device", "$pref::Video::displayDeviceId", %devicesList, false, "", true, "The display devices the window should be on.");
|
|
|
-
|
|
|
- if (%numDevices > 1)
|
|
|
- OptionsMenuSettingsList.setRowEnabled(1, true);
|
|
|
- else
|
|
|
- OptionsMenuSettingsList.setRowEnabled(1, false);
|
|
|
-
|
|
|
- %mode = OptionsMenu.getOptionVariableValue("$pref::Video::deviceMode");
|
|
|
- if(isInt(%mode))
|
|
|
- %mode = getField($Video::ModeTags, $pref::Video::deviceMode);
|
|
|
- OptionsMenuSettingsList.addOptionRow("Window Mode", "$pref::Video::deviceMode", $Video::ModeTags, false, "", true, "", %mode);
|
|
|
-
|
|
|
- if(%mode !$= "Borderless")
|
|
|
- {
|
|
|
- %resolutionList = getScreenResolutionList($pref::Video::deviceId, $Video::Mode[%mode]);
|
|
|
- %resolution = OptionsMenu.getOptionVariableValue("$pref::Video::Resolution");
|
|
|
- if(%resolution $= "")
|
|
|
- %resolution = $pref::Video::mode;
|
|
|
-
|
|
|
- %resolution = _makePrettyResString(%resolution);
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionRow("Resolution", "$pref::Video::Resolution", %resolutionList, false, "", true, "Resolution of the game window", %resolution);
|
|
|
-
|
|
|
- // If the requested resolution could not be set, mark the control and pref as changed.
|
|
|
- %resControl = OptionsMenuSettingsList.getObject(OptionsMenuSettingsList.getCount()-1);
|
|
|
- if (%resControl.getCurrentOption() !$= %resolution)
|
|
|
- %resControl.onChange();
|
|
|
- }
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("VSync", "$pref::Video::enableVerticalSync", $YesNoList, false, "", true, "", "");
|
|
|
-
|
|
|
-
|
|
|
- %refreshList = getScreenRefreshList($pref::Video::mode);
|
|
|
- OptionsMenuSettingsList.addOptionRow("Refresh Rate", "$pref::Video::RefreshRate", %refreshList, false, "", true, "", OptionsMenu.getOptionVariableValue("$pref::Video::RefreshRate"));
|
|
|
-
|
|
|
- //move to gameplay tab
|
|
|
- //OptionsMenuSettingsList.addSliderRow("Field of View", "", 75, 5, "65 100", "");
|
|
|
-
|
|
|
- //OptionsMenuSettingsList.addSliderRow("Brightness", "", 0.5, 0.1, "0 1", "");
|
|
|
- //OptionsMenuSettingsList.addSliderRow("Contrast", "", 0.5, 0.1, "0 1", "");
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-function populateGraphicsSettingsList()
|
|
|
-{
|
|
|
- OptionsMenuSettingsList.clear();
|
|
|
-
|
|
|
- OptionsMenu.currentCategory = "Graphics";
|
|
|
-
|
|
|
- if(isObject(OptionName))
|
|
|
- OptionName.setText("");
|
|
|
- if(isObject(OptionDescription))
|
|
|
- OptionDescription.setText("");
|
|
|
-
|
|
|
- %yesNoList = "No\tYes";
|
|
|
- %onOffList = "Off\tOn";
|
|
|
- %anisoFilter = "Off\t4\t8\t16";
|
|
|
- %aaTypeFilter = "None\tFXAA\tSMAA\tSMAA High";
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Lighting Quality", "$pref::Graphics::LightingQuality",
|
|
|
- LightingQualityList, false, "", true, "Amount and drawdistance of local lights");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Shadow Quality", "$pref::Graphics::ShadowQuality",
|
|
|
- ShadowQualityList, false, "", true, "Shadow revolution quality");
|
|
|
-
|
|
|
- %shadowQuality = OptionsMenu.getOptionVariableValue("$pref::Graphics::ShadowQuality");
|
|
|
- if(%shadowQuality !$= "None")
|
|
|
- {
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Soft Shadow Quality", "$pref::Graphics::SoftShadowQuality",
|
|
|
- SoftShadowList, false, "", true, "Amount of softening applied to shadowmaps");
|
|
|
- }
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Mesh Quality", "$pref::Graphics::MeshQuality",
|
|
|
- MeshQualityGroup, false, "", true, "Fidelity of rendering of mesh objects");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Object Draw Distance", "$pref::Graphics::ObjectDrawDistance",
|
|
|
- MeshDrawDistQualityGroup, false, "", true, "Dictates if and when static objects fade out in the distance");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Texture Quality", "$pref::Graphics::TextureQuality",
|
|
|
- TextureQualityGroup, false, "", true, "Fidelity of textures");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Terrain Quality", "$pref::Graphics::TerrainQuality",
|
|
|
- TerrainQualityGroup, false, "", true, "Quality level of terrain objects");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Decal Lifetime", "$pref::Graphics::DecalLifetime",
|
|
|
- DecalLifetimeGroup, false, "", true, "How long decals are rendered");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Ground Cover Density", "$pref::Graphics::GroundCoverDensity",
|
|
|
- GroundCoverDensityGroup, false, "", true, "Density of ground cover items, such as grass");
|
|
|
- OptionsMenuSettingsList.addOptionQualityLevelRow("Shader Quality", "$pref::Graphics::ShaderQuality",
|
|
|
- ShaderQualityGroup, false, "", true, "Dictates the overall shader quality level, adjusting what features are enabled.");
|
|
|
- OptionsMenuSettingsList.addOptionRow("Anisotropic Filtering", "$pref::Video::defaultAnisotropy", %anisoFilter, false, "", true, "Amount of Anisotropic Filtering on textures, which dictates their sharpness at a distance");
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionRow("Anti-Aliasing Type", "$pref::Video::AAMode", %aaTypeFilter, false, "", true, "The Anti-Aliasing Method applied to rendering");
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("Parallax", "$pref::Video::enableParallaxMapping", %onOffList, false, "", true, "Whether the surface parallax shader effect is enabled", "");
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("Water Reflections", "$pref::Water::enableTrueReflections", %onOffList, false, "", true, "Whether water reflections are enabled", "");
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("SSAO", "$pref::PostFX::EnableSSAO", %onOffList, false, "", true, "Whether Screen-Space Ambient Occlusion is enabled");
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("Depth of Field", "$pref::PostFX::EnableDOF", %onOffList, false, "", true, "Whether the Depth of Field effect is enabled");
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("Vignette", "$pref::PostFX::EnableVignette", %onOffList, false, "", true, "Whether the vignette effect is enabled");
|
|
|
- OptionsMenuSettingsList.addOptionBoolRow("Light Rays", "$pref::PostFX::EnableLightRays", %onOffList, false, "", true, "Whether the light rays effect is enabled");
|
|
|
-}
|
|
|
-
|
|
|
-function updateGraphicsSettings()
|
|
|
-{
|
|
|
- if($pref::Graphics::LightingQuality !$= getCurrentQualityLevel(LightingQualityList))
|
|
|
- LightingQualityList.applySetting($pref::Graphics::LightingQuality);
|
|
|
- if($pref::Graphics::ShadowQuality !$= getCurrentQualityLevel(ShadowQualityList))
|
|
|
- ShadowQualityList.applySetting($pref::Graphics::ShadowQuality);
|
|
|
- if($pref::Graphics::SoftShadowQuality !$= getCurrentQualityLevel(SoftShadowList))
|
|
|
- SoftShadowList.applySetting($pref::Graphics::SoftShadowQuality);
|
|
|
-
|
|
|
- if($pref::Graphics::MeshQuality !$= getCurrentQualityLevel(MeshQualityGroup))
|
|
|
- MeshQualityGroup.applySetting($pref::Graphics::MeshQuality);
|
|
|
- if($pref::Graphics::ObjectDrawDistance !$= getCurrentQualityLevel(MeshDrawDistQualityGroup))
|
|
|
- MeshDrawDistQualityGroup.applySetting($pref::Graphics::ObjectDrawDistance);
|
|
|
- if($pref::Graphics::TextureQuality !$= getCurrentQualityLevel(TextureQualityGroup))
|
|
|
- {
|
|
|
- TextureQualityGroup.applySetting($pref::Graphics::TextureQuality);
|
|
|
-
|
|
|
- reloadTextures();
|
|
|
- }
|
|
|
- if($pref::Graphics::TerrainQuality !$= getCurrentQualityLevel(TerrainQualityGroup))
|
|
|
- TerrainQualityGroup.applySetting($pref::Graphics::TerrainQuality);
|
|
|
- if($pref::Graphics::DecalLifetime !$= getCurrentQualityLevel(DecalLifetimeGroup))
|
|
|
- DecalLifetimeGroup.applySetting($pref::Graphics::DecalLifetime);
|
|
|
- if($pref::Graphics::GroundCoverDensity !$= getCurrentQualityLevel(GroundCoverDensityGroup))
|
|
|
- GroundCoverDensityGroup.applySetting($pref::Graphics::GroundCoverDensity);
|
|
|
- if($pref::Graphics::ShaderQuality !$= getCurrentQualityLevel(ShaderQualityGroup))
|
|
|
- {
|
|
|
- ShaderQualityGroup.applySetting($pref::Graphics::ShaderQuality);
|
|
|
- //this has ties into postFX behaviors, so we'll force an update to it here
|
|
|
- updatePostFXSettings();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*function updateDisplaySettings()
|
|
|
-{
|
|
|
- //Update the display settings now
|
|
|
- %deviceName = getDisplayDeviceName();
|
|
|
- %newDeviceID = getWord(%deviceName, 0) - 1;
|
|
|
-
|
|
|
- if(!isInt($pref::Video::deviceMode))
|
|
|
- {
|
|
|
- //probably saved out as the mode name, so just translate it back
|
|
|
- for(%i=0; %i < getFieldCount($Video::ModeTags); %i++)
|
|
|
- {
|
|
|
- if(getField($Video::ModeTags, %i) $= $pref::Video::deviceMode)
|
|
|
- {
|
|
|
- $pref::Video::deviceMode = %i;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- %deviceModeName = getField($Video::ModeTags, $pref::Video::deviceMode);
|
|
|
- %newDeviceMode = 0;
|
|
|
- foreach$(%modeName in $Video::ModeTags)
|
|
|
- {
|
|
|
- if (%deviceModeName $= %modeName)
|
|
|
- break;
|
|
|
- else
|
|
|
- %newDeviceMode++;
|
|
|
- }
|
|
|
-
|
|
|
- if($pref::Video::deviceMode == $Video::ModeBorderless)
|
|
|
- {
|
|
|
- //if we're changing to borderless, we swap to the full resolution of the desktop
|
|
|
- $pref::Video::mode = Canvas.getBestCanvasRes($pref::Video::deviceId, $pref::Video::deviceMode);
|
|
|
-
|
|
|
- $pref::Video::Resolution = $pref::Video::mode.x SPC $pref::Video::mode.y;
|
|
|
- }
|
|
|
-
|
|
|
- %newRes = $pref::Video::Resolution;
|
|
|
- %newBpp = 32; // ... its not 1997 anymore.
|
|
|
- %newFullScreen = %deviceModeName $= "Fullscreen" ? true : false;
|
|
|
- %newRefresh = $pref::Video::RefreshRate;
|
|
|
- %newVsync = $pref::Video::enableVerticalSync;
|
|
|
- %newAA = $pref::Video::AA;
|
|
|
-
|
|
|
- // Build the final mode string.
|
|
|
- %newMode = $pref::Video::Resolution SPC %newFullScreen SPC %newBpp SPC %newRefresh SPC %newAA;
|
|
|
-
|
|
|
- // Change the video mode.
|
|
|
- if ( %newMode !$= $pref::Video::mode || %newDeviceID != $pref::Video::deviceId ||
|
|
|
- %newVsync != $pref::Video::enableVerticalSync || %newDeviceMode != $pref::Video::deviceMode)
|
|
|
- {
|
|
|
- //****Edge Case Hack
|
|
|
- // If we're in fullscreen mode and switching to a different monitor at the
|
|
|
- // same resolution and maintaining fullscreen, GFX...WindowTarget::resetMode()
|
|
|
- // will early-out because there is no "mode change" and the monitor change
|
|
|
- // will not get applied. Instead of modifying platform code, we're going to
|
|
|
- // move onto the new monitor in borderless and immediately switch to FS.
|
|
|
- if (%newFullScreen && $pref::Video::FullScreen &&
|
|
|
- ($pref::Video::Resolution $= %newRes) && ($pref::Video::deviceId != %newDeviceID))
|
|
|
- {
|
|
|
- $pref::Video::deviceId = %newDeviceID;
|
|
|
- $pref::Video::deviceMode = $Video::ModeBorderless;
|
|
|
- %tmpModeStr = Canvas.getMonitorMode(%newDeviceID, 0);
|
|
|
- Canvas.setVideoMode(%tmpModeStr.x, %tmpModeStr.y, false, 32, getWord(%tmpModeStr, $WORD::REFRESH), %newAA);
|
|
|
- }
|
|
|
-
|
|
|
- $pref::Video::mode = %newMode;
|
|
|
- $pref::Video::enableVerticalSync = %newVsync;
|
|
|
- $pref::Video::deviceId = %newDeviceID;
|
|
|
- $pref::Video::deviceMode = %newDeviceMode;
|
|
|
- $pref::Video::Resolution = %newRes;
|
|
|
- $pref::Video::FullScreen = %newFullScreen;
|
|
|
- $pref::Video::RefreshRate = %newRefresh;
|
|
|
- $pref::Video::AA = %newAA;
|
|
|
- configureCanvas();
|
|
|
- }
|
|
|
-}*/
|
|
|
-
|
|
|
-function updatePostFXSettings()
|
|
|
-{
|
|
|
- PostFXManager.settingsEffectSetEnabled(SSAOPostFx, $pref::PostFX::EnableSSAO);
|
|
|
- PostFXManager.settingsEffectSetEnabled(DepthOfFieldPostFX, $pref::PostFX::EnableDOF);
|
|
|
- PostFXManager.settingsEffectSetEnabled(LightRayPostFX, $pref::PostFX::EnableLightRays);
|
|
|
- PostFXManager.settingsEffectSetEnabled(vignettePostFX, $pref::PostFX::EnableVignette);
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-function populateAudioSettingsList()
|
|
|
-{
|
|
|
- OptionsMenuSettingsList.clear();
|
|
|
-
|
|
|
- OptionsMenu.currentCategory = "Audio";
|
|
|
-
|
|
|
- if(isObject(OptionName))
|
|
|
- OptionName.setText("");
|
|
|
- if(isObject(OptionDescription))
|
|
|
- OptionDescription.setText("");
|
|
|
-
|
|
|
- %buffer = sfxGetAvailableDevices();
|
|
|
- %count = getRecordCount( %buffer );
|
|
|
- %audioDriverList = "";
|
|
|
- %audioProviderList = "";
|
|
|
- %audioDeviceList = "";
|
|
|
-
|
|
|
- $currentAudioProvider = $currentAudioProvider $= "" ? $pref::SFX::provider : $currentAudioProvider;
|
|
|
-
|
|
|
- for(%i = 0; %i < %count; %i++)
|
|
|
- {
|
|
|
- %record = getRecord(%buffer, %i);
|
|
|
- %provider = getField(%record, 0);
|
|
|
- %device = getField(%record, 1);
|
|
|
-
|
|
|
- //When the client is actually running, we don't care about null audo devices
|
|
|
- if(%provider $= "null")
|
|
|
- continue;
|
|
|
-
|
|
|
- if(%audioProviderList $= "")
|
|
|
- %audioProviderList = %provider;
|
|
|
- else
|
|
|
- %audioProviderList = %audioProviderList @ "\t" @ %provider;
|
|
|
-
|
|
|
- if(%provider $= $currentAudioProvider)
|
|
|
- {
|
|
|
- if(%audioDeviceList $= "")
|
|
|
- %audioDeviceList = %device;
|
|
|
- else
|
|
|
- %audioDeviceList = %audioDeviceList @ "\t" @ %device;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addOptionRow("Audio Provider", "$pref::SFX::provider", %audioProviderList, false, "audioProviderChanged", true, "");
|
|
|
- OptionsMenuSettingsList.addOptionRow("Audio Device", "$pref::SFX::device", %audioDeviceList, false, "", true);
|
|
|
-
|
|
|
- OptionsMenuSettingsList.addSliderRow("Master Volume", "$pref::SFX::masterVolume", 0.1, "0 1", "");
|
|
|
- OptionsMenuSettingsList.addSliderRow("GUI Volume", "$pref::SFX::channelVolume[" @ $GuiAudioType @ "]", 0.1, "0 1", "");
|
|
|
- OptionsMenuSettingsList.addSliderRow("Effects Volume", "$pref::SFX::channelVolume[" @ $SimAudioType @ "]", 0.1, "0 1", "");
|
|
|
- OptionsMenuSettingsList.addSliderRow("Music Volume", "$pref::SFX::channelVolume[" @ $MusicAudioType @ "]", 0.1, "0 1", "");
|
|
|
-}
|
|
|
-
|
|
|
-function audioProviderChanged()
|
|
|
-{
|
|
|
- //Get the option we have set for the provider
|
|
|
- %provider = OptionsMenuSettingsList.getCurrentOption(0);
|
|
|
- $currentAudioProvider = %provider;
|
|
|
-
|
|
|
- //And now refresh the list to get the correct devices
|
|
|
- populateAudioSettingsList();
|
|
|
-}
|
|
|
-
|
|
|
-function updateAudioSettings()
|
|
|
-{
|
|
|
- //$pref::SFX::masterVolume = OptionsMenuSettingsList.getValue(2);
|
|
|
- sfxSetMasterVolume( $pref::SFX::masterVolume );
|
|
|
-
|
|
|
- //$pref::SFX::channelVolume[ $GuiAudioType ] = OptionsMenuSettingsList.getValue(3);
|
|
|
- //$pref::SFX::channelVolume[ $SimAudioType ] = OptionsMenuSettingsList.getValue(4);
|
|
|
- //$pref::SFX::channelVolume[ $MusicAudioType ] = OptionsMenuSettingsList.getValue(5);
|
|
|
-
|
|
|
- sfxSetChannelVolume( $GuiAudioType, $pref::SFX::channelVolume[ $GuiAudioType ] );
|
|
|
- sfxSetChannelVolume( $SimAudioType, $pref::SFX::channelVolume[ $SimAudioType ] );
|
|
|
- sfxSetChannelVolume( $MusicAudioType, $pref::SFX::channelVolume[ $MusicAudioType ] );
|
|
|
-
|
|
|
- //$pref::SFX::provider = OptionsMenuSettingsList.getCurrentOption(0);
|
|
|
- //$pref::SFX::device = OptionsMenuSettingsList.getCurrentOption(1);
|
|
|
-
|
|
|
- if ( !sfxCreateDevice( $pref::SFX::provider,
|
|
|
- $pref::SFX::device,
|
|
|
- $pref::SFX::useHardware,
|
|
|
- -1 ) )
|
|
|
- error( "Unable to create SFX device: " @ $pref::SFX::provider
|
|
|
- SPC $pref::SFX::device
|
|
|
- SPC $pref::SFX::useHardware );
|
|
|
-
|
|
|
- if( !isObject( $AudioTestHandle ) )
|
|
|
- {
|
|
|
- sfxPlay(menuButtonPressed);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-function MenuOptionsButton::onChange(%this)
|
|
|
-{
|
|
|
- %optionMode = %this.getMode();
|
|
|
- %optionName = %this.getLabel();
|
|
|
- %tooltipText = %this.getTooltip();
|
|
|
-
|
|
|
- %targetVar = %this.targetPrefVar;
|
|
|
-
|
|
|
- OptionName.setText(%optionName);
|
|
|
- OptionDescription.setText(%tooltipText);
|
|
|
-
|
|
|
- if(%optionMode == 0)
|
|
|
- {
|
|
|
- %currentValue = %this.getCurrentOption();
|
|
|
- if(%currentValue !$= "")
|
|
|
- {
|
|
|
- if(%currentValue $= "yes" || %currentValue $= "on")
|
|
|
- %saveReadyValue = 1;
|
|
|
- else if(%currentValue $= "no" || %currentValue $= "off")
|
|
|
- %saveReadyValue = 0;
|
|
|
- else
|
|
|
- %saveReadyValue = %currentValue;
|
|
|
-
|
|
|
- %prefIndex = OptionsMenu.unappliedChanges.getIndexFromKey(%targetVar);
|
|
|
- if(%prefIndex == -1)
|
|
|
- {
|
|
|
- echo("Setting UnappliedChanges via add: key:" @ %targetVar @", value: " @ %saveReadyValue);
|
|
|
- OptionsMenu.unappliedChanges.add(%targetVar, "\"" @ %saveReadyValue @ "\"" );
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- echo("Setting UnappliedChanges via modify: key:" @ %targetVar @", value: " @ %saveReadyValue);
|
|
|
- OptionsMenu.unappliedChanges.setValue("\"" @ %saveReadyValue @ "\"", %prefIndex);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else if(%optionMode == 1)
|
|
|
- {
|
|
|
- %currentValue = %this.getValue();
|
|
|
-
|
|
|
- %prefIndex = OptionsMenu.unappliedChanges.getIndexFromKey(%targetVar);
|
|
|
- if(%prefIndex == -1)
|
|
|
- {
|
|
|
- echo("Setting UnappliedChanges via add: key:" @ %targetVar @", value: " @ %currentValue);
|
|
|
- OptionsMenu.unappliedChanges.add(%targetVar, "\"" @ %currentValue @ "\"" );
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- OptionsMenu.unappliedChanges.setValue("\"" @ %currentValue @ "\"", %prefIndex);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //Update the UI in case there's responsive logic
|
|
|
- OptionsMenu.schedule(32, "refresh");
|
|
|
-}
|
|
|
-
|
|
|
-function OptionsMenu::onKeybindChanged(%this, %actionMap, %keybind)
|
|
|
-{
|
|
|
- %prefIndex = OptionsMenu.unappliedChanges.getIndexFromKey(%actionMap);
|
|
|
- if(%prefIndex == -1)
|
|
|
- OptionsMenu.unappliedChanges.add(%actionMap, %keybind);
|
|
|
- else
|
|
|
- OptionsMenu.unappliedChanges.setValue(%keybind, %prefIndex);
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-// new
|
|
|
-//
|
|
|
function addOptionGroup(%displayName)
|
|
|
{
|
|
|
%group = new GuiTextCtrl() {
|