3530 lines
137 KiB
Ucode
3530 lines
137 KiB
Ucode
//=============================================================================
|
|
// KFGFxOptionsMenu_Graphics
|
|
//=============================================================================
|
|
// This menu will be used to update and display the graphics options for the game
|
|
//=============================================================================
|
|
// Killing Floor 2
|
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
|
// Zane Gholson - 9/29/2014
|
|
//=============================================================================
|
|
|
|
class KFGFxOptionsMenu_Graphics extends KFGFxObject_Menu
|
|
native(UI);
|
|
|
|
//@HSL_MOD_BEGIN - amiller 5/25/2016 - Adding support to save extra data into profile settings
|
|
`include(KFProfileSettings.uci);
|
|
//@HSL_MOD_END
|
|
`define MIN 0
|
|
`define MAX 1
|
|
|
|
enum PerfWarning
|
|
{
|
|
// Little to no performance implications
|
|
PerfWarning_None,
|
|
// May cause performance degradation
|
|
PerfWarning_Normal,
|
|
// May cause severe performance degradation
|
|
PerfWarning_Severe,
|
|
};
|
|
|
|
var bool bIsRevertCoundownActive;
|
|
var byte TimeCount;
|
|
var const byte ExpireTime;
|
|
|
|
var localized string FlexPopUpString;
|
|
|
|
var localized string KeepSettingsPromptString;
|
|
var localized string WarningPromptString;
|
|
var localized string WillExpireString;
|
|
var localized string PerformanceDescString[2];
|
|
var localized string RestartDescString;
|
|
var localized string SingleWarningString;
|
|
var localized string DoubleWarningString;
|
|
var localized string UnsavedChangesString;
|
|
var localized string ContinueString;
|
|
var localized string SaveChangesString;
|
|
|
|
var localized string AdjustGammaDescription;
|
|
var localized string ResetGammaString;
|
|
var localized string SetGammaString;
|
|
|
|
var localized string GraphicsString;
|
|
var localized string BasicString;
|
|
var localized string AdvancedString;
|
|
var localized string EffectsString;
|
|
|
|
var localized string AspectRatioString;
|
|
var localized string ResolutionString;
|
|
var localized string GraphicsQualityString;
|
|
var localized string VSyncString;
|
|
var localized string FullscreenString;
|
|
var localized string VariableFrameRateString;
|
|
var localized string AdjustGammaString;
|
|
var localized string FilmGrainString;
|
|
|
|
var localized string EnvironmentDetailsString;
|
|
var localized string CharacterDetailString;
|
|
var localized string FXString;
|
|
var localized string TextureResolutionString;
|
|
var localized string TextureFilteringString;
|
|
var localized string ShadowsString;
|
|
var localized string RealtimeReflectionsString;
|
|
var localized string AntiAliasingString;
|
|
var localized string BloomString;
|
|
var localized string MotionBlurString;
|
|
var localized string AmbientOcclusionString;
|
|
var localized string DepthOfFieldString;
|
|
|
|
var localized string VolumetricLightingString;
|
|
var localized string lensFlaresString;
|
|
var localized string LightShaftsString;
|
|
var localized string CustomString;
|
|
var localized string IniOverrideString;
|
|
|
|
var localized string OKString;
|
|
var localized string ApplyString;
|
|
var localized string CancelString;
|
|
var localized string DefaultString;
|
|
|
|
var localized string PhysicsLevelString;
|
|
var localized array<string> PhysicsLevelOptionStrings;
|
|
var localized array<string> PhysicsLevelSuggestionStrings;
|
|
|
|
var localized string AspectRatioString_All;
|
|
var localized string StandardAspectRatioString_4_3;
|
|
var localized string StandardAspectRatioString_5_4;
|
|
var localized string StandardAspectRatioString_3_2;
|
|
var localized string WideAspectRatioString_16_9;
|
|
var localized string WideAspectRatioString_16_10;
|
|
var localized string ExtraWideAspectRatioString_2_1;
|
|
var localized string ExtraWideAspectRatioString_21_9;
|
|
var localized string MultiMonitorAspectRatioString;
|
|
var localized array<string> FullScreenStringOptions;
|
|
var localized array<string> GraphicsQualityStringOptions;
|
|
var localized array<string> VSyncStringOptions;
|
|
|
|
var localized array<string> EnvironmentDetailsStringOptions;
|
|
var localized array<string> CharacterDetailStringOptions;
|
|
var localized array<string> FXStringOptions;
|
|
var localized array<string> TextureResolutionStringOptions;
|
|
var localized array<string> TextureFilteringStringOptions;
|
|
var localized array<string> ShadowsStringOptions;
|
|
|
|
var localized array<string> RealtimeReflectionsStringOptions;
|
|
var localized array<string> AntiAliasingStringOptions;
|
|
var localized array<string> BloomStringOptions;
|
|
var localized array<string> MotionBlurStringOptions;
|
|
var localized array<string> AmbientOcclusionStringOptions;
|
|
var localized array<string> DepthOfFieldStringOptions;
|
|
|
|
var localized array<string>OffOnStringOptions;
|
|
|
|
var transient array<string> SupportedResolutionList;
|
|
|
|
var transient string RevertPopupDescriptionString;
|
|
|
|
/** List of supported aspect ratios. All of them might not be available for user. */
|
|
enum SupportedAspectRatio
|
|
{
|
|
KFASPECTRATIO_All,
|
|
KFASPECTRATIO_Standard_4_3,
|
|
KFASPECTRATIO_Standard_5_4,
|
|
KFASPECTRATIO_Standard_3_2,
|
|
KFASPECTRATIO_Wide_16_9,
|
|
KFASPECTRATIO_Wide_16_10,
|
|
KFASPECTRATIO_ExtraWide_2_1,
|
|
KFASPECTRATIO_ExtraWide_21_9,
|
|
KFASPECTRATIO_MultiMonitor,
|
|
KFASPECTRATIO_MAX
|
|
};
|
|
|
|
/** Array containing the list of aspect ratios supported by the user's machine.
|
|
Use the index retured by the UI to access this list to get the actual aspect ratio
|
|
*/
|
|
var transient array<SupportedAspectRatio> AvailableAspectRatioList;
|
|
|
|
//======================================================================================
|
|
// Meta Settings. Abstracted quality setting which contains one or more system settings.
|
|
//======================================================================================
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Resolution Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native ResolutionSetting
|
|
{
|
|
var int ResX;
|
|
var int ResY;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.ResX = ResX;
|
|
OutSettings.ResY = ResY;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
ResX = InSettings.ResX;
|
|
ResY = InSettings.ResY;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Graphics Quality (Basic Setting)
|
|
// -------------------------------------------------------------------------------------
|
|
struct native GraphicsQualitySetting
|
|
{
|
|
var int EnvironmentDetailIndex;
|
|
var int CharacterDetailIndex;
|
|
var int FXQualityIndex;
|
|
var int TextureResolutionIndex;
|
|
var int TextureFilteringIndex;
|
|
var int ShadowQualityIndex;
|
|
var int RealtimeReflectionsIndex;
|
|
var bool LightShafts;
|
|
var bool VolumetricLighting;
|
|
var bool LensFlares;
|
|
var int AntiAliasingIndex;
|
|
var int BloomIndex;
|
|
var int MotionBlurIndex;
|
|
var int AmbientOcclusionIndex;
|
|
var int DOFIndex;
|
|
var int FlexIndex;
|
|
|
|
structcpptext
|
|
{
|
|
#if __TW_WITH_GSA_
|
|
// This should match the number of options in the struct
|
|
#define MAX_OPTIONS 16
|
|
|
|
static int GetGSAOptions(NvGsaNamedOption** OutOptions)
|
|
{
|
|
NvGsaNamedOption *GSAOptions = new NvGsaNamedOption[MAX_OPTIONS];
|
|
|
|
// Environment Detail
|
|
GSAOptions[0].name = TEXT("EnvironmentDetail");
|
|
GSAOptions[0].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[0].value.asInt = 2;
|
|
GSAOptions[0].numRange.maxValue.asInt = 3;
|
|
GSAOptions[0].numRange.minValue.asInt = 0;
|
|
GSAOptions[0].numRange.numSteps = 3;
|
|
|
|
// Character Detail
|
|
GSAOptions[1].name = TEXT("CharacterDetail");
|
|
GSAOptions[1].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[1].value.asInt = 1;
|
|
GSAOptions[1].numRange.maxValue.asInt = 2;
|
|
GSAOptions[1].numRange.minValue.asInt = 0;
|
|
GSAOptions[1].numRange.numSteps = 2;
|
|
|
|
// FX Quality
|
|
GSAOptions[2].name = TEXT("FX");
|
|
GSAOptions[2].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[2].value.asInt = 2;
|
|
GSAOptions[2].numRange.maxValue.asInt = 3;
|
|
GSAOptions[2].numRange.minValue.asInt = 0;
|
|
GSAOptions[2].numRange.numSteps = 3;
|
|
|
|
// Texture Resolution
|
|
GSAOptions[3].name = TEXT("TextureResolution");
|
|
GSAOptions[3].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[3].value.asInt = 2;
|
|
GSAOptions[3].numRange.maxValue.asInt = 3;
|
|
GSAOptions[3].numRange.minValue.asInt = 0;
|
|
GSAOptions[3].numRange.numSteps = 3;
|
|
|
|
// Texture Filtering
|
|
GSAOptions[4].name = TEXT("TextureFiltering");
|
|
GSAOptions[4].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[4].value.asInt = 2;
|
|
GSAOptions[4].numRange.maxValue.asInt = 3;
|
|
GSAOptions[4].numRange.minValue.asInt = 0;
|
|
GSAOptions[4].numRange.numSteps = 3;
|
|
|
|
// Shadows
|
|
GSAOptions[5].name = TEXT("Shadows");
|
|
GSAOptions[5].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[5].value.asInt = 2;
|
|
GSAOptions[5].numRange.maxValue.asInt = 3;
|
|
GSAOptions[5].numRange.minValue.asInt = 0;
|
|
GSAOptions[5].numRange.numSteps = 3;
|
|
|
|
// Realtime Reflections
|
|
GSAOptions[6].name = TEXT("RealtimeReflections");
|
|
GSAOptions[6].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[6].value.asInt = 0;
|
|
GSAOptions[6].numRange.maxValue.asInt = 1;
|
|
GSAOptions[6].numRange.minValue.asInt = 0;
|
|
GSAOptions[6].numRange.numSteps = 1;
|
|
|
|
// Light Shafts
|
|
GSAOptions[7].name = TEXT("LightShafts");
|
|
GSAOptions[7].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[7].value.asInt = 1;
|
|
GSAOptions[7].numRange.maxValue.asInt = 1;
|
|
GSAOptions[7].numRange.minValue.asInt = 0;
|
|
GSAOptions[7].numRange.numSteps = 1;
|
|
|
|
// Volumetric Lighting
|
|
GSAOptions[8].name = TEXT("VolumetricLighting");
|
|
GSAOptions[8].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[8].value.asInt = 1;
|
|
GSAOptions[8].numRange.maxValue.asInt = 1;
|
|
GSAOptions[8].numRange.minValue.asInt = 0;
|
|
GSAOptions[8].numRange.numSteps = 1;
|
|
|
|
// Lens Flares
|
|
GSAOptions[9].name = TEXT("LensFlares");
|
|
GSAOptions[9].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[9].value.asInt = 1;
|
|
GSAOptions[9].numRange.maxValue.asInt = 1;
|
|
GSAOptions[9].numRange.minValue.asInt = 0;
|
|
GSAOptions[9].numRange.numSteps = 1;
|
|
|
|
// AntiAliasing
|
|
GSAOptions[10].name = TEXT("AntiAliasing");
|
|
GSAOptions[10].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[10].value.asInt = 1;
|
|
GSAOptions[10].numRange.maxValue.asInt = 1;
|
|
GSAOptions[10].numRange.minValue.asInt = 0;
|
|
GSAOptions[10].numRange.numSteps = 1;
|
|
|
|
// Bloom
|
|
GSAOptions[11].name = TEXT("Bloom");
|
|
GSAOptions[11].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[11].value.asInt = 2;
|
|
GSAOptions[11].numRange.maxValue.asInt = 2;
|
|
GSAOptions[11].numRange.minValue.asInt = 0;
|
|
GSAOptions[11].numRange.numSteps = 2;
|
|
|
|
// Motion Blur
|
|
GSAOptions[12].name = TEXT("MotionBlur");
|
|
GSAOptions[12].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[12].value.asInt = 0;
|
|
GSAOptions[12].numRange.maxValue.asInt = 1;
|
|
GSAOptions[12].numRange.minValue.asInt = 0;
|
|
GSAOptions[12].numRange.numSteps = 1;
|
|
|
|
// AO
|
|
GSAOptions[13].name = TEXT("AmbientOcclusion");
|
|
GSAOptions[13].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[13].value.asInt = 1;
|
|
GSAOptions[13].numRange.maxValue.asInt = 2;
|
|
GSAOptions[13].numRange.minValue.asInt = 0;
|
|
GSAOptions[13].numRange.numSteps = 2;
|
|
|
|
// DOF
|
|
GSAOptions[14].name = TEXT("DepthOfField");
|
|
GSAOptions[14].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[14].value.asInt = 1;
|
|
GSAOptions[14].numRange.maxValue.asInt = 1;
|
|
GSAOptions[14].numRange.minValue.asInt = 0;
|
|
GSAOptions[14].numRange.numSteps = 1;
|
|
|
|
// Flex
|
|
GSAOptions[15].name = TEXT("Flex");
|
|
GSAOptions[15].value.type = NV_GSA_TYPE_INT;
|
|
GSAOptions[15].value.asInt = 0;
|
|
GSAOptions[15].numRange.maxValue.asInt = 2;
|
|
GSAOptions[15].numRange.minValue.asInt = 0;
|
|
GSAOptions[15].numRange.numSteps = 2;
|
|
|
|
// -----------------------------------------------------------
|
|
// Add new settings here. Remember to increment MAX_OPTIONS
|
|
// -----------------------------------------------------------
|
|
|
|
*OutOptions = GSAOptions;
|
|
|
|
return MAX_OPTIONS;
|
|
}
|
|
|
|
static FGraphicsQualitySetting GetGraphicsQualityFromGSA()
|
|
{
|
|
FGraphicsQualitySetting Out;
|
|
NvGsaVariant Value;
|
|
NvGsaStatus Status;
|
|
|
|
// Environment Detail
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("EnvironmentDetail"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.EnvironmentDetailIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Character Detail
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("CharacterDetail"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.CharacterDetailIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// FX Quality
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("FX"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.FXQualityIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Texture Resolution
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("TextureResolution"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.TextureResolutionIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Texture Filtering
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("TextureFiltering"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.TextureFilteringIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Shadows
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("Shadows"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.ShadowQualityIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Realtime Reflections
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("RealtimeReflections"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.RealtimeReflectionsIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Light Shafts
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("LightShafts"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.LightShafts = Value.asInt > 0;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Volumetric Lighting
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("VolumetricLighting"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.VolumetricLighting = Value.asInt > 0;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Lens Flares
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("LensFlares"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.LensFlares = Value.asInt > 0;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// AntiAliasing
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("AntiAliasing"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.AntiAliasingIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Bloom
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("Bloom"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.BloomIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Motion Blur
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("MotionBlur"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.MotionBlurIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// AO
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("AmbientOcclusion"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.AmbientOcclusionIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// DOF
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("DepthOfField"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.DOFIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
// Flex
|
|
Status = GFSDK_GSA_GetOptionValue(&Value, TEXT("Flex"));
|
|
checkSlow( Status == NV_GSA_STATUS_OK);
|
|
Out.FlexIndex = Value.asInt;
|
|
GFSDK_GSA_ReleaseVariant(&Value);
|
|
|
|
return Out;
|
|
}
|
|
#endif //__TW_WITH_GSA_
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Display Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native DisplaySetting
|
|
{
|
|
var bool Fullscreen;
|
|
var bool BorderlessWindow;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bFullscreen = Fullscreen;
|
|
#if __TW_BORDERLESS_WINDOW_SUPPORT_
|
|
OutSettings.bBorderless = BorderlessWindow;
|
|
#endif
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
Fullscreen = InSettings.bFullscreen;
|
|
#if __TW_BORDERLESS_WINDOW_SUPPORT_
|
|
BorderlessWindow = InSettings.bBorderless;
|
|
#endif
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// VSync Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native VSyncSetting
|
|
{
|
|
var bool VSync;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bUseVSync = VSync;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
VSync = InSettings.bUseVSync;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Variable Framerate Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native VariableFramerateSetting
|
|
{
|
|
var bool VariableFrameRate;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutEngine->bSmoothFrameRate = !VariableFrameRate;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
VariableFrameRate = !InEngine->bSmoothFrameRate;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Film Grain Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native FilmGrainSetting
|
|
{
|
|
var float FilmGrainScale;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.ImageGrainScaler = FilmGrainScale;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
FilmGrainScale = InSettings.ImageGrainScaler;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Flex Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native FlexSetting
|
|
{
|
|
var int FlexLevel;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutEngine->PhysXLevel = FlexLevel;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
FlexLevel = InEngine->PhysXLevel;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Environment Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native EnvironmentDetailSetting
|
|
{
|
|
// Native setting(s)
|
|
var int DetailMode;
|
|
var bool AllowLightFunctions;
|
|
var bool bDisableCanBecomeDynamicWakeup;
|
|
var float MakeDynamicCollisionThreshold;
|
|
|
|
// Script setting(s)
|
|
var float DestructionLifetimeScale;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.DetailMode = DetailMode;
|
|
OutSettings.bAllowLightFunctions = AllowLightFunctions;
|
|
OutSettings.bDisableCanBecomeDynamicWakeup = bDisableCanBecomeDynamicWakeup;
|
|
OutSettings.MakeDynamicCollisionThreshold = MakeDynamicCollisionThreshold;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
DetailMode = InSettings.DetailMode;
|
|
AllowLightFunctions = InSettings.bAllowLightFunctions;
|
|
bDisableCanBecomeDynamicWakeup = InSettings.bDisableCanBecomeDynamicWakeup;
|
|
MakeDynamicCollisionThreshold = InSettings.MakeDynamicCollisionThreshold;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Shadow Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native ShadowQualitySetting
|
|
{
|
|
var bool bAllowWholeSceneDominantShadows;
|
|
var bool bOverrideMapWholeSceneDominantShadowSetting;
|
|
var bool bAllowDynamicShadows;
|
|
var bool bAllowPerObjectShadows;
|
|
var int MaxWholeSceneDominantShadowResolution;
|
|
var int MaxShadowResolution;
|
|
var int ShadowFadeResolution;
|
|
var int MinShadowResolution;
|
|
var float ShadowTexelsPerPixel;
|
|
var float GlobalShadowDistanceScale;
|
|
var bool AllowForegroundPreshadows;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowWholeSceneDominantShadows = bAllowWholeSceneDominantShadows;
|
|
OutSettings.bOverrideMapWholeSceneDominantShadowSetting = bOverrideMapWholeSceneDominantShadowSetting;
|
|
OutSettings.bAllowDynamicShadows = bAllowDynamicShadows;
|
|
OutSettings.bAllowPerObjectShadows = bAllowPerObjectShadows;
|
|
OutSettings.MaxWholeSceneDominantShadowResolution = MaxWholeSceneDominantShadowResolution;
|
|
OutSettings.MaxShadowResolution = MaxShadowResolution;
|
|
OutSettings.ShadowFadeResolution = ShadowFadeResolution;
|
|
OutSettings.MinShadowResolution = MinShadowResolution;
|
|
OutSettings.ShadowTexelsPerPixel = ShadowTexelsPerPixel;
|
|
OutSettings.GlobalShadowDistanceScale = GlobalShadowDistanceScale;
|
|
OutSettings.bAllowForegroundPreshadows = AllowForegroundPreshadows;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
bAllowWholeSceneDominantShadows = InSettings.bAllowWholeSceneDominantShadows;
|
|
bOverrideMapWholeSceneDominantShadowSetting = InSettings.bOverrideMapWholeSceneDominantShadowSetting;
|
|
bAllowDynamicShadows = InSettings.bAllowDynamicShadows;
|
|
bAllowPerObjectShadows = InSettings.bAllowPerObjectShadows;
|
|
MaxWholeSceneDominantShadowResolution = InSettings.MaxWholeSceneDominantShadowResolution;
|
|
MaxShadowResolution = InSettings.MaxShadowResolution;
|
|
ShadowFadeResolution = InSettings.ShadowFadeResolution;
|
|
MinShadowResolution = InSettings.MinShadowResolution;
|
|
ShadowTexelsPerPixel = InSettings.ShadowTexelsPerPixel;
|
|
GlobalShadowDistanceScale = InSettings.GlobalShadowDistanceScale;
|
|
AllowForegroundPreshadows = InSettings.bAllowForegroundPreshadows;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// FX Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native FXQualitySetting
|
|
{
|
|
// Native settings
|
|
var int ParticleLODBias;
|
|
var int DistanceFogQuality;
|
|
var bool Distortion;
|
|
var bool FilteredDistortion;
|
|
var bool DropParticleDistortion;
|
|
var bool AllowSecondaryBloodEffects;
|
|
|
|
// Script settings
|
|
var float EmitterPoolScale;
|
|
var float ShellEjectLifetime;
|
|
var bool AllowExplosionLights;
|
|
var bool AllowSprayActorLights;
|
|
var bool AllowFootstepSounds;
|
|
var bool AllowBloodSplatterDecals;
|
|
var bool AllowRagdollAndGoreOnDeadBodies;
|
|
var bool AllowPilotLights;
|
|
var int MaxImpactEffectDecals;
|
|
var int MaxExplosionDecals;
|
|
var float GoreFXLifetimeMultiplier;
|
|
var int MaxBloodEffects;
|
|
var int MaxGoreEffects;
|
|
var int MaxPersistentSplatsPerFrame;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.ParticleLODBias = ParticleLODBias;
|
|
OutSettings.DistanceFogQuality = DistanceFogQuality;
|
|
OutSettings.bAllowDistortion = Distortion;
|
|
OutSettings.bAllowFilteredDistortion = FilteredDistortion;
|
|
OutSettings.bAllowParticleDistortionDropping = DropParticleDistortion;
|
|
OutSettings.bAllowSecondaryBloodEffects = AllowSecondaryBloodEffects;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
ParticleLODBias = InSettings.ParticleLODBias;
|
|
DistanceFogQuality = InSettings.DistanceFogQuality;
|
|
Distortion = InSettings.bAllowDistortion;
|
|
FilteredDistortion = InSettings.bAllowFilteredDistortion;
|
|
DropParticleDistortion = InSettings.bAllowParticleDistortionDropping;
|
|
AllowSecondaryBloodEffects = InSettings.bAllowSecondaryBloodEffects;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Realtime Reflection Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native RealtimeReflectionsSetting
|
|
{
|
|
var bool bAllowScreenSpaceReflections;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowScreenSpaceReflections = bAllowScreenSpaceReflections;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
bAllowScreenSpaceReflections = InSettings.bAllowScreenSpaceReflections;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Character Detail Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native CharacterDetailSetting
|
|
{
|
|
// System settings
|
|
var int SkeletalMeshLODBias;
|
|
var bool AllowSubsurfaceScattering;
|
|
var float KinematicUpdateDistFactorScale;
|
|
var bool ShouldCorpseCollideWithDead;
|
|
var bool ShouldCorpseCollideWithLiving;
|
|
var bool ShouldCorpseCollideWithDeadAfterSleep;
|
|
|
|
// Script settings
|
|
var int MaxBodyWoundDecals;
|
|
var int MaxDeadBodies;
|
|
var bool bAllowPhysics;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.SkeletalMeshLODBias = SkeletalMeshLODBias;
|
|
OutSettings.bAllowSubsurfaceScattering = AllowSubsurfaceScattering;
|
|
OutSettings.KinematicUpdateDistFactorScale = KinematicUpdateDistFactorScale;
|
|
OutSettings.bShouldCorpseCollideWithDead = ShouldCorpseCollideWithDead;
|
|
OutSettings.bShouldCorpseCollideWithLiving = ShouldCorpseCollideWithLiving;
|
|
OutSettings.bShouldCorpseCollideWithDeadAfterSleep = ShouldCorpseCollideWithDeadAfterSleep;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
SkeletalMeshLODBias = InSettings.SkeletalMeshLODBias;
|
|
AllowSubsurfaceScattering = InSettings.bAllowSubsurfaceScattering;
|
|
KinematicUpdateDistFactorScale = InSettings.KinematicUpdateDistFactorScale;
|
|
ShouldCorpseCollideWithDead = InSettings.bShouldCorpseCollideWithDead;
|
|
ShouldCorpseCollideWithLiving = InSettings.bShouldCorpseCollideWithLiving;
|
|
ShouldCorpseCollideWithDeadAfterSleep = InSettings.bShouldCorpseCollideWithDeadAfterSleep;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Light Shafts Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native LightShaftsSetting
|
|
{
|
|
var bool bAllowLightShafts;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowLightShafts = bAllowLightShafts;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
bAllowLightShafts = InSettings.bAllowLightShafts;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Volumetric Lighting Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native VolumetricLightingSetting
|
|
{
|
|
var bool bAllowLightCones;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowLightCones = bAllowLightCones;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
bAllowLightCones = InSettings.bAllowLightCones;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Lens Flare Setting
|
|
// -------------------------------------------------------------------------------------
|
|
struct native LensFlareSetting
|
|
{
|
|
var bool bAllowLensFlares;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowLensFlares = bAllowLensFlares;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
bAllowLensFlares = InSettings.bAllowLensFlares;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Texture resolution
|
|
// -------------------------------------------------------------------------------------
|
|
struct native TextureResolutionSetting
|
|
{
|
|
var int UIBias;
|
|
var int ShadowmapBias;
|
|
var int CharacterBias;
|
|
var int Weapon1stBias;
|
|
var int Weapon3rdBias;
|
|
var int EnvironmentBias;
|
|
var int FXBias;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UI).LODBias = UIBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UIWithMips).LODBias = UIBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UIStreamable).LODBias = UIBias; //@ TWI - bedwards: UI texture streaming support
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Shadowmap).LODBias = ShadowmapBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Character).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterNormalMap).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterSpecular).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Creature).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureNormalMap).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureSpecular).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Cosmetic).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticNormalMap).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticSpecular).LODBias = CharacterBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon).LODBias = Weapon1stBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponNormalMap).LODBias = Weapon1stBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponSpecular).LODBias = Weapon1stBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rd).LODBias = Weapon3rdBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdNormalMap).LODBias = Weapon3rdBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdSpecular).LODBias = Weapon3rdBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_World).LODBias = EnvironmentBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldNormalMap).LODBias = EnvironmentBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldSpecular).LODBias = EnvironmentBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Effects).LODBias = FXBias;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_EffectsNotFiltered).LODBias = FXBias;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
// UI
|
|
UIBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UI).LODBias;
|
|
|
|
// Shadowmap
|
|
ShadowmapBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Shadowmap).LODBias;
|
|
|
|
CharacterBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Character).LODBias;
|
|
if( CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterNormalMap).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterSpecular).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Creature).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureNormalMap).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureSpecular).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Cosmetic).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticNormalMap).LODBias ||
|
|
CharacterBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticSpecular).LODBias)
|
|
{
|
|
warnf(TEXT("Settings mismatch for Character Texture Resolution"));
|
|
CharacterBias = -1;
|
|
}
|
|
|
|
// First person weapons
|
|
Weapon1stBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon).LODBias;
|
|
if( Weapon1stBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponNormalMap).LODBias ||
|
|
Weapon1stBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponSpecular).LODBias )
|
|
{
|
|
warnf(TEXT("Settings mismatch for 1st Person Weapon Texture Resolution"));
|
|
Weapon1stBias = -1;
|
|
}
|
|
|
|
// Third person weapons
|
|
Weapon3rdBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rd).LODBias;
|
|
if( Weapon3rdBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdNormalMap).LODBias ||
|
|
Weapon3rdBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdSpecular).LODBias )
|
|
{
|
|
warnf(TEXT("Settings mismatch for 3rd Person Weapon Texture Resolution"));
|
|
Weapon3rdBias = -1;
|
|
}
|
|
|
|
// Environment
|
|
EnvironmentBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_World).LODBias;
|
|
if( EnvironmentBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldNormalMap).LODBias ||
|
|
EnvironmentBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldSpecular).LODBias )
|
|
{
|
|
warnf(TEXT("Settings mismatch for Environment Texture Resolution"));
|
|
EnvironmentBias = -1;
|
|
}
|
|
|
|
// FX
|
|
FXBias = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Effects).LODBias;
|
|
if( FXBias != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_EffectsNotFiltered).LODBias )
|
|
{
|
|
warnf(TEXT("Settings mismatch for FX Texture Resolution"));
|
|
FXBias = -1;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Texture Filtering
|
|
// -------------------------------------------------------------------------------------
|
|
struct native TextureFilterSetting
|
|
{
|
|
var name MinMagFilter;
|
|
var name MipFilter;
|
|
var int MaxAnisotropy;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
// Anisotropy setting
|
|
OutSettings.MaxAnisotropy = MaxAnisotropy;
|
|
|
|
// Filter mode
|
|
ESamplerFilter Filter = SF_Trilinear, NoMipFilter = SF_Bilinear;
|
|
if( MinMagFilter == NAME_Linear && MipFilter == NAME_Point )
|
|
{
|
|
Filter = SF_Bilinear;
|
|
NoMipFilter = SF_Bilinear;
|
|
}
|
|
else if( MinMagFilter == NAME_Linear && MipFilter == NAME_Linear )
|
|
{
|
|
Filter = SF_Trilinear;
|
|
NoMipFilter = SF_Bilinear;
|
|
}
|
|
else if( MinMagFilter == NAME_Aniso && MipFilter == NAME_Linear )
|
|
{
|
|
Filter = SF_AnisotropicLinear;
|
|
NoMipFilter = SF_AnisotropicPoint;
|
|
}
|
|
|
|
// Assign to texture groups
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Shadowmap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Character).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterNormalMap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterSpecular).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Creature).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureNormalMap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureSpecular).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Cosmetic).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticNormalMap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticSpecular).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponNormalMap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponSpecular).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rd).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdNormalMap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdSpecular).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_World).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldNormalMap).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldSpecular).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Effects).Filter = Filter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UIWithMips).Filter = Filter;
|
|
|
|
// Special texture groups /wo mip filtering
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UIStreamable).Filter = NoMipFilter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UI).Filter = NoMipFilter;
|
|
OutSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_EffectsNotFiltered).Filter = NoMipFilter;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
// Anisotropy setting
|
|
MaxAnisotropy = InSettings.MaxAnisotropy;
|
|
|
|
ESamplerFilter Filter;
|
|
Filter = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_World).Filter;
|
|
if( Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Shadowmap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Character).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterNormalMap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CharacterSpecular).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Creature).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureNormalMap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CreatureSpecular).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Cosmetic).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticNormalMap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_CosmeticSpecular).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponNormalMap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WeaponSpecular).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rd).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdNormalMap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Weapon3rdSpecular).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldNormalMap).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_WorldSpecular).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_Effects).Filter ||
|
|
Filter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UIWithMips).Filter )
|
|
{
|
|
warnf(TEXT("Settings mismatch for Texture Filter"));
|
|
}
|
|
|
|
ESamplerFilter NoMipFilter;
|
|
NoMipFilter = InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UI).Filter;
|
|
if( NoMipFilter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_EffectsNotFiltered).Filter ||
|
|
NoMipFilter != InSettings.TextureLODSettings.GetTextureLODGroup(TEXTUREGROUP_UIStreamable).Filter ) //@ TWI - bedwards: UI texture streaming support
|
|
{
|
|
warnf(TEXT("Settings mismatch for Texture Filter (No Mips)"));
|
|
}
|
|
|
|
if( Filter == SF_Bilinear && NoMipFilter == SF_Bilinear )
|
|
{
|
|
MinMagFilter = NAME_Linear;
|
|
MipFilter = NAME_Point;
|
|
}
|
|
else if( Filter == SF_Trilinear && NoMipFilter == SF_Bilinear )
|
|
{
|
|
MinMagFilter = NAME_Linear;
|
|
MipFilter = NAME_Linear;
|
|
}
|
|
else if( Filter == SF_AnisotropicLinear && NoMipFilter == SF_AnisotropicPoint )
|
|
{
|
|
MinMagFilter = NAME_Aniso;
|
|
MipFilter = NAME_Linear;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Bloom
|
|
// -------------------------------------------------------------------------------------
|
|
struct native BloomSetting
|
|
{
|
|
var bool Bloom;
|
|
var int BloomQuality;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowBloom = Bloom;
|
|
OutSettings.BloomQuality = BloomQuality;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
Bloom = InSettings.bAllowBloom;
|
|
BloomQuality = InSettings.BloomQuality;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Motion Blur
|
|
// -------------------------------------------------------------------------------------
|
|
struct native MotionBlurSetting
|
|
{
|
|
var bool MotionBlur;
|
|
var int MotionBlurQuality;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowMotionBlur = MotionBlur;
|
|
OutSettings.MotionBlurQuality = MotionBlurQuality;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
MotionBlur = InSettings.bAllowMotionBlur;
|
|
MotionBlurQuality = InSettings.MotionBlurQuality;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Anti Aliasing
|
|
// -------------------------------------------------------------------------------------
|
|
struct native AntiAliasingSetting
|
|
{
|
|
var bool PostProcessAA;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowPostProcessAA = PostProcessAA;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
PostProcessAA = InSettings.bAllowPostProcessAA;
|
|
}
|
|
}
|
|
};
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Ambient Occlusion
|
|
// -------------------------------------------------------------------------------------
|
|
struct native AmbientOcclusionSetting
|
|
{
|
|
var bool AmbientOcclusion;
|
|
var bool HBAO;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowAmbientOcclusion = AmbientOcclusion;
|
|
#if __TW_GAMEWORKS_HBAO_
|
|
OutSettings.bAllowHBAO = HBAO;
|
|
#endif // __TW_GAMEWORKS_HBAO_
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
AmbientOcclusion = InSettings.bAllowAmbientOcclusion;
|
|
#if __TW_GAMEWORKS_HBAO_
|
|
HBAO = InSettings.bAllowHBAO;
|
|
#endif // __TW_GAMEWORKS_HBAO_
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Depth Of Field
|
|
// -------------------------------------------------------------------------------------
|
|
struct native DOFSetting
|
|
{
|
|
var bool DepthOfField;
|
|
var int DepthOfFieldQuality;
|
|
|
|
structcpptext
|
|
{
|
|
void CopyToNativeSettings(FSystemSettings& OutSettings, UEngine* OutEngine)
|
|
{
|
|
OutSettings.bAllowDepthOfField = DepthOfField;
|
|
OutSettings.DepthOfFieldQuality = DepthOfFieldQuality;
|
|
}
|
|
|
|
void CopyFromNativeSettings(FSystemSettings& InSettings, UEngine* InEngine)
|
|
{
|
|
DepthOfField = InSettings.bAllowDepthOfField;
|
|
DepthOfFieldQuality = InSettings.DepthOfFieldQuality;
|
|
}
|
|
}
|
|
};
|
|
|
|
//======================================================================================
|
|
// Setting Presets. Contains the values that make up the quality preset.
|
|
//======================================================================================
|
|
var array<GraphicsQualitySetting> GraphicsQualityPresets;
|
|
var array<DisplaySetting> DisplayPresets;
|
|
var array<VSyncSetting> VSyncPresets;
|
|
var array<VariableFramerateSetting> VariableFrameratePresets;
|
|
var array<FilmGrainSetting> FilmGrainMinMaxPreset;
|
|
var array<FlexSetting> FlexPresets;
|
|
var array<EnvironmentDetailSetting> EnvironmentDetailPresets;
|
|
var array<ShadowQualitySetting> ShadowQualityPresets;
|
|
var array<FXQualitySetting> FXQualityPresets;
|
|
var array<RealtimeReflectionsSetting> RealtimeReflectionsPresets;
|
|
var array<CharacterDetailSetting> CharacterDetailPresets;
|
|
var array<LightShaftsSetting> LightShaftsPresets;
|
|
var array<VolumetricLightingSetting> VolumetricLightingPresets;
|
|
var array<LensFlareSetting> LensFlarePresets;
|
|
var array<TextureResolutionSetting> TextureResolutionPresets;
|
|
var array<TextureFilterSetting> TextureFilterPresets;
|
|
var array<BloomSetting> BloomPresets;
|
|
var array<MotionBlurSetting> MotionBlurPresets;
|
|
var array<AntiAliasingSetting> AntiAliasingPresets;
|
|
var array<AmbientOcclusionSetting> AmbientOcclusionPresets;
|
|
var array<DOFSetting> DOFPresets;
|
|
//======================================================================================
|
|
|
|
enum GraphicsLevelPreset
|
|
{
|
|
GRAPHICS_LOW,
|
|
GRAPHICS_MEDIUM,
|
|
GRAPHICS_HIGH,
|
|
GRAPHICS_ULTRA,
|
|
GRAPHICS_CUSTOM,
|
|
GRAPHICS_MAX
|
|
};
|
|
|
|
struct native GFXSettings
|
|
{
|
|
//basic
|
|
var ResolutionSetting Resolution;
|
|
var VSyncSetting VSync;
|
|
var DisplaySetting Display;
|
|
var VariableFramerateSetting VariableFPS;
|
|
var FilmGrainSetting FilmGrain;
|
|
var FlexSetting Flex;
|
|
|
|
//advanced
|
|
var EnvironmentDetailSetting EnvironmentDetail;
|
|
var CharacterDetailSetting CharacterDetail;
|
|
var FXQualitySetting FX;
|
|
var TextureResolutionSetting TextureResolution;
|
|
var TextureFilterSetting TextureFiltering;
|
|
var ShadowQualitySetting Shadows;
|
|
var RealtimeReflectionsSetting RealtimeReflections;
|
|
var AntiAliasingSetting AntiAliasing;
|
|
var BloomSetting Bloom;
|
|
var MotionBlurSetting MotionBlur;
|
|
var AmbientOcclusionSetting AmbientOcclusion;
|
|
var DOFSetting DepthOfField;
|
|
var VolumetricLightingSetting VolumetricLighting;
|
|
var LensFlareSetting LensFlares;
|
|
var LightShaftsSetting LightShafts;
|
|
};
|
|
|
|
// The current setting that the user has. Needs to be serialized.
|
|
var transient GFXSettings CurrentGFXSettings;
|
|
//On revert, then these settings will be applied
|
|
var transient GFXSettings RevertedGFXSettings;
|
|
// Changes that the user made but did not apply
|
|
var transient GFXSettings UnsavedGFXSettings;
|
|
// Whether there is a pending restart due to unsaved changes
|
|
var transient bool UnsavedPendingRestart;
|
|
|
|
cpptext
|
|
{
|
|
#if __TW_WITH_GSA_
|
|
// NVIDIA GSA hooks
|
|
static UBOOL InitGSASettings();
|
|
static UBOOL ApplyGSASettings();
|
|
#endif
|
|
}
|
|
|
|
// Update settings for GSA
|
|
// Note: This function definition is not compiled out for platforms
|
|
// that don't support GSA so as to not cause a script native dependency when
|
|
// building for another platform. Instead, it turns into a empty function if
|
|
// not supported.
|
|
native static function UpdateGSASetting(string SettingName, int Index);
|
|
|
|
native static function UpdateGSAResolution(int Width, int Height);
|
|
|
|
// Update the config file
|
|
native static function FlushGSA();
|
|
|
|
/** Get/Set functions for native SystemSettings */
|
|
native static function GetCurrentNativeSettings(out GFXSettings CurrentSettings);
|
|
native static function SetNativeSettings(out GFXSettings NewSettings);
|
|
|
|
/** Returns the compat score assigned by the AppCompat system*/
|
|
native function int GetCompatLevel();
|
|
|
|
/** Queries engine to check whether the aspect ratio is available */
|
|
native function bool IsAspectRatioAvailable(SupportedAspectRatio InAspectRatio);
|
|
|
|
/** Update the resolution options based on given aspect ratio and the
|
|
list of resolutions that are supported by the adapter
|
|
*/
|
|
native function RefreshSupportedResolutions(SupportedAspectRatio InAspectRatio);
|
|
|
|
native function string GetMonitorResolution();
|
|
|
|
/** Returns whether Nvidia FleX is supported or not */
|
|
native function bool IsFleXSupported();
|
|
|
|
/** Keeps the GSA system in sync whenever we change GFXSettings */
|
|
static function UpdateGSA(GFXSettings InSettings)
|
|
{
|
|
// Register settings updates
|
|
UpdateGSASetting("EnvironmentDetail", FindEnvironmentDetailIndex(InSettings.EnvironmentDetail, default.EnvironmentDetailPresets));
|
|
UpdateGSASetting("CharacterDetail", FindCharacterDetailIndex(InSettings.CharacterDetail, default.CharacterDetailPresets));
|
|
UpdateGSASetting("FX", FindFXQualityIndex(InSettings.FX, default.FXQualityPresets));
|
|
UpdateGSASetting("TextureResolution", FindTextureResolutionSettingIndex(InSettings.TextureResolution, default.TextureResolutionPresets));
|
|
UpdateGSASetting("TextureFiltering", FindTextureFilterSettingIndex(InSettings.TextureFiltering, default.TextureFilterPresets));
|
|
UpdateGSASetting("Shadows", FindShadowQualityIndex(InSettings.Shadows, default.ShadowQualityPresets));
|
|
UpdateGSASetting("RealtimeReflections", FindReflectionsSettingIndex(InSettings.RealtimeReflections, default.RealtimeReflectionsPresets));
|
|
UpdateGSASetting("AntiAliasing", FindAntiAliasingSettingIndex(InSettings.AntiAliasing, default.AntiAliasingPresets));
|
|
UpdateGSASetting("Bloom", FindBloomSettingIndex(InSettings.Bloom, default.BloomPresets));
|
|
UpdateGSASetting("MotionBlur", FindMotionBlurSettingIndex(InSettings.MotionBlur, default.MotionBlurPresets));
|
|
UpdateGSASetting("AmbientOcclusion", FindAmbientOcclusionSettingIndex(InSettings.AmbientOcclusion, default.AmbientOcclusionPresets));
|
|
UpdateGSASetting("DepthOfField", FindDOFSettingIndex(InSettings.DepthOfField, default.DOFPresets));
|
|
UpdateGSASetting("VolumetricLighting", FindVolumetricLightingSettingIndex(InSettings.VolumetricLighting, default.VolumetricLightingPresets));
|
|
UpdateGSASetting("LensFlares", FindLensFlareSettingIndex(InSettings.LensFlares, default.LensFlarePresets));
|
|
UpdateGSASetting("LightShafts", FindLightShaftsSettingIndex(InSettings.LightShafts, default.LightShaftsPresets));
|
|
UpdateGSASetting("Flex", FindFlexSettingIndex(InSettings.Flex, default.FlexPresets));
|
|
|
|
// Register resolution updates
|
|
UpdateGSAResolution(InSettings.Resolution.ResX, InSettings.Resolution.ResY);
|
|
|
|
// Save to config file
|
|
FlushGSA();
|
|
}
|
|
|
|
/** Returns the aspect ratio for the given resolution */
|
|
event SupportedAspectRatio GetAspectRatio(int ResX, int ResY)
|
|
{
|
|
local float ComputedAspectRatio;
|
|
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_MultiMonitor) )
|
|
{
|
|
return KFASPECTRATIO_MultiMonitor;
|
|
}
|
|
else
|
|
{
|
|
// Compute the aspect ratio from current resolution
|
|
ComputedAspectRatio = float(ResX)/float(ResY);
|
|
|
|
// Match computed aspect ratio against supported aspect ratios
|
|
if( ComputedAspectRatio ~= 4.f/3.f )
|
|
{
|
|
return KFASPECTRATIO_Standard_4_3;
|
|
}
|
|
else if( ComputedAspectRatio ~= 5.f/4.f )
|
|
{
|
|
return KFASPECTRATIO_Standard_5_4;
|
|
}
|
|
else if( ComputedAspectRatio ~= 3.f/2.f )
|
|
{
|
|
return KFASPECTRATIO_Standard_3_2;
|
|
}
|
|
else if( ComputedAspectRatio ~= 16.f/9.f)
|
|
{
|
|
return KFASPECTRATIO_Wide_16_9;
|
|
}
|
|
else if( ComputedAspectRatio ~= 16.f/10.f )
|
|
{
|
|
return KFASPECTRATIO_Wide_16_10;
|
|
}
|
|
else if( ComputedAspectRatio ~= 2.f/1.f )
|
|
{
|
|
return KFASPECTRATIO_ExtraWide_2_1;
|
|
}
|
|
else if( ComputedAspectRatio ~= 21.f/9.f )
|
|
{
|
|
return KFASPECTRATIO_ExtraWide_21_9;
|
|
}
|
|
}
|
|
|
|
// Default: unsupress all resolutions
|
|
return KFASPECTRATIO_All;
|
|
}
|
|
|
|
/** Function to get current script settings. Should not be called directly.
|
|
Use GetCurrentGFXSettings() instead
|
|
*/
|
|
static function GetCurrentScriptSettings(out GFXSettings CurrentSettings)
|
|
{
|
|
GetScriptDisplaySettings(CurrentSettings.Display);
|
|
GetScriptVSyncSettings(CurrentSettings.VSync);
|
|
GetScriptVariableFramerateSettings(CurrentSettings.VariableFPS);
|
|
GetScriptFilmGrainSettings(CurrentSettings.FilmGrain);
|
|
GetScriptFlexSettings(CurrentSettings.Flex);
|
|
GetScriptEnvironmentDetailSettings(CurrentSettings.EnvironmentDetail);
|
|
GetScriptShadowQualitySettings(CurrentSettings.Shadows);
|
|
GetScriptFXQualitySettings(CurrentSettings.FX);
|
|
GetScriptReflectionSettings(CurrentSettings.RealtimeReflections);
|
|
GetScriptCharacterDetailSettings(CurrentSettings.CharacterDetail);
|
|
GetScriptLightShaftsSettings(CurrentSettings.LightShafts);
|
|
GetScriptVolumetricLightingSettings(CurrentSettings.VolumetricLighting);
|
|
GetScriptLensFlareSettings(CurrentSettings.LensFlares);
|
|
GetScriptTextureResolutionSettings(CurrentSettings.TextureResolution);
|
|
GetScriptTextureFilterSettings(CurrentSettings.TextureFiltering);
|
|
GetScriptBloomSettings(CurrentSettings.Bloom);
|
|
GetScriptMotionBlurSettings(CurrentSettings.MotionBlur);
|
|
GetScriptAntiAliasingSettings(CurrentSettings.AntiAliasing);
|
|
GetScriptAmbientOcclusionSettings(CurrentSettings.AmbientOcclusion);
|
|
GetScriptDOFSettings(CurrentSettings.DepthOfField);
|
|
}
|
|
|
|
/** Function to set script settings. Should not be called directly.
|
|
Use SetGFXSettings() instead
|
|
*/
|
|
static function SetScriptSettings(out GFXSettings NewSettings)
|
|
{
|
|
SetScriptDisplaySettings(NewSettings.Display);
|
|
SetScriptVSyncSettings(NewSettings.VSync);
|
|
SetScriptVariableFramerateSettings(NewSettings.VariableFPS);
|
|
SetScriptFilmGrainSettings(NewSettings.FilmGrain);
|
|
SetScriptFlexSettings(NewSettings.Flex);
|
|
SetScriptEnvironmentDetailSettings(NewSettings.EnvironmentDetail);
|
|
SetScriptShadowQualitySettings(NewSettings.Shadows);
|
|
SetScriptFXQualitySettings(NewSettings.FX);
|
|
SetScriptReflectionSettings(NewSettings.RealtimeReflections);
|
|
SetScriptCharacterDetailSettings(NewSettings.CharacterDetail);
|
|
SetScriptLightShaftsSettings(NewSettings.LightShafts);
|
|
SetScriptVolumetricLightingSettings(NewSettings.VolumetricLighting);
|
|
SetScriptLensFlareSettings(NewSettings.LensFlares);
|
|
SetScriptTextureResolutionSettings(NewSettings.TextureResolution);
|
|
SetScriptTextureFilterSettings(NewSettings.TextureFiltering);
|
|
SetScriptBloomSettings(NewSettings.Bloom);
|
|
SetScriptMotionBlurSettings(NewSettings.MotionBlur);
|
|
SetScriptAntiAliasingSettings(NewSettings.AntiAliasing);
|
|
SetScriptAmbientOcclusionSettings(NewSettings.AmbientOcclusion);
|
|
SetScriptDOFSettings(NewSettings.DepthOfField);
|
|
}
|
|
|
|
//=======================================================================
|
|
// Helper functions for meta settings
|
|
//=======================================================================
|
|
|
|
//
|
|
// Graphics Quality
|
|
//
|
|
function int FindGraphicsQualitySettingIndex(out GFXSettings Ref, out array<GraphicsQualitySetting> SettingsList)
|
|
{
|
|
local int i;
|
|
local GraphicsQualitySetting GraphicsQuality;
|
|
|
|
// Retrieve graphics quality from the advanced settings
|
|
GraphicsQuality.EnvironmentDetailIndex = FindEnvironmentDetailIndex(Ref.EnvironmentDetail, EnvironmentDetailPresets);
|
|
GraphicsQuality.CharacterDetailIndex = FindCharacterDetailIndex(Ref.CharacterDetail, CharacterDetailPresets);
|
|
GraphicsQuality.FXQualityIndex = FindFXQualityIndex(Ref.FX, FXQualityPresets);
|
|
GraphicsQuality.TextureResolutionIndex = FindTextureResolutionSettingIndex(Ref.TextureResolution, TextureResolutionPresets);
|
|
GraphicsQuality.TextureFilteringIndex = FindTextureFilterSettingIndex(Ref.TextureFiltering, TextureFilterPresets);
|
|
GraphicsQuality.ShadowQualityIndex = FindShadowQualityIndex(Ref.Shadows, ShadowQualityPresets);
|
|
GraphicsQuality.RealtimeReflectionsIndex = FindReflectionsSettingIndex(Ref.RealtimeReflections, RealtimeReflectionsPresets);
|
|
GraphicsQuality.LightShafts = FindLightShaftsSettingIndex(Ref.LightShafts, LightShaftsPresets) > 0;
|
|
GraphicsQuality.VolumetricLighting = FindVolumetricLightingSettingIndex(Ref.VolumetricLighting, VolumetricLightingPresets) > 0;
|
|
GraphicsQuality.LensFlares = FindLensFlareSettingIndex(Ref.LensFlares, LensFlarePresets) > 0;
|
|
GraphicsQuality.AntiAliasingIndex = FindAntiAliasingSettingIndex(Ref.AntiAliasing, AntiAliasingPresets);
|
|
GraphicsQuality.BloomIndex = FindBloomSettingIndex(Ref.Bloom, BloomPresets);
|
|
GraphicsQuality.MotionBlurIndex = FindMotionBlurSettingIndex(Ref.MotionBlur, MotionBlurPresets);
|
|
GraphicsQuality.AmbientOcclusionIndex = FindAmbientOcclusionSettingIndex(Ref.AmbientOcclusion, AmbientOcclusionPresets);
|
|
GraphicsQuality.DOFIndex = FindDOFSettingIndex(Ref.DepthOfField, DOFPresets);
|
|
GraphicsQuality.FlexIndex = FindFlexSettingIndex(Ref.Flex, FlexPresets);
|
|
|
|
// Look for a match in the graphics quality presets
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( GraphicsQuality == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
//
|
|
// Display
|
|
//
|
|
function int FindDisplaySettingIndex(out DisplaySetting Ref, out array<DisplaySetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptDisplaySettings(out DisplaySetting Setting){}
|
|
static function SetScriptDisplaySettings(out DisplaySetting Setting){}
|
|
|
|
//
|
|
// VSync
|
|
//
|
|
function int FindVSyncSettingIndex(out VSyncSetting Ref, out array<VSyncSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptVSyncSettings(out VSyncSetting Setting){}
|
|
static function SetScriptVSyncSettings(out VSyncSetting Setting){}
|
|
|
|
//
|
|
// Variable Framerate
|
|
//
|
|
function int FindVariableFPSSettingIndex(out VariableFramerateSetting Ref, out array<VariableFramerateSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptVariableFramerateSettings(out VariableFramerateSetting Setting){}
|
|
static function SetScriptVariableFramerateSettings(out VariableFramerateSetting Setting){}
|
|
|
|
//
|
|
// Film Grain
|
|
//
|
|
function float GetFilmGrainSliderValue(out FilmGrainSetting Ref, out array<FilmGrainSetting> SettingsList)
|
|
{
|
|
// Return normalized [0.0, 1.0] value for the slider
|
|
local float SliderValue;
|
|
SliderValue = (Ref.FilmGrainScale - SettingsList[`MIN].FilmGrainScale) / (SettingsList[`MAX].FilmGrainScale - SettingsList[`MIN].FilmGrainScale);
|
|
return FClamp(SliderValue, 0.0, 1.0);
|
|
}
|
|
|
|
function float GetFilmGrainSettingValue(float SliderValue, out array<FilmGrainSetting> SettingsList)
|
|
{
|
|
// Convert [0.0, 1.0] slider value to actual setting value in the range [MinFilmGrainScale, MaxFilmGrainScale]
|
|
local float FilmGrainScale;
|
|
FilmGrainScale = SliderValue * (SettingsList[`MAX].FilmGrainScale - SettingsList[`MIN].FilmGrainScale) + SettingsList[`MIN].FilmGrainScale;
|
|
return FClamp(FilmGrainScale, SettingsList[`MIN].FilmGrainScale, SettingsList[`MAX].FilmGrainScale);
|
|
}
|
|
|
|
static function GetScriptFilmGrainSettings(out FilmGrainSetting Setting){}
|
|
static function SetScriptFilmGrainSettings(out FilmGrainSetting Setting){}
|
|
|
|
// Overridden comparison operators for float comparisons
|
|
static final operator(24) bool == (FilmGrainSetting A, FilmGrainSetting B)
|
|
{
|
|
return A.FilmGrainScale ~= B.FilmGrainScale;
|
|
}
|
|
|
|
static final operator(26) bool != (FilmGrainSetting A, FilmGrainSetting B)
|
|
{
|
|
return !(A==B);
|
|
}
|
|
|
|
//
|
|
// Environment Detail
|
|
//
|
|
static function int FindEnvironmentDetailIndex(out EnvironmentDetailSetting Ref, array<EnvironmentDetailSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptEnvironmentDetailSettings(out EnvironmentDetailSetting Setting)
|
|
{
|
|
Setting.DestructionLifetimeScale = class'WorldInfo'.default.DestructionLifetimeScale;
|
|
}
|
|
|
|
static function SetScriptEnvironmentDetailSettings(out EnvironmentDetailSetting Setting)
|
|
{
|
|
class'WorldInfo'.default.DestructionLifetimeScale = Setting.DestructionLifetimeScale;
|
|
class'WorldInfo'.static.StaticSaveConfig();
|
|
}
|
|
|
|
//
|
|
// Shadow Quality
|
|
//
|
|
static function int FindShadowQualityIndex(out ShadowQualitySetting Ref, array<ShadowQualitySetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptShadowQualitySettings(out ShadowQualitySetting Setting){}
|
|
static function SetScriptShadowQualitySettings(out ShadowQualitySetting Setting){}
|
|
|
|
//
|
|
// FX Quality
|
|
//
|
|
static function int FindFXQualityIndex(out FXQualitySetting Ref, array<FXQualitySetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptFXQualitySettings(out FXQualitySetting Setting)
|
|
{
|
|
Setting.EmitterPoolScale = class'WorldInfo'.default.EmitterPoolScale;
|
|
Setting.ShellEjectLifetime = class'KFMuzzleFlash'.default.ShellEjectLifetime;
|
|
Setting.AllowExplosionLights = class'WorldInfo'.default.bAllowExplosionLights;
|
|
Setting.AllowSprayActorLights = class'KFSprayActor'.default.bAllowSprayLights;
|
|
Setting.AllowFootstepSounds = class'KFPawn'.default.bAllowFootstepSounds;
|
|
Setting.AllowBloodSplatterDecals = class'KFGoreManager'.default.bAllowBloodSplatterDecals;
|
|
Setting.AllowRagdollAndGoreOnDeadBodies = class'KFPawn'.default.bAllowRagdollAndGoreOnDeadBodies;
|
|
Setting.AllowPilotLights = class'KFWeap_FlameBase'.default.bArePilotLightsAllowed;
|
|
Setting.MaxImpactEffectDecals = class'KFImpactEffectManager'.default.MaxImpactEffectDecals;
|
|
Setting.MaxExplosionDecals = class'WorldInfo'.default.MaxExplosionDecals;
|
|
Setting.GoreFXLifetimeMultiplier = class'KFGoreManager'.default.GoreFXLifetimeMultiplier;
|
|
Setting.MaxBloodEffects = class'KFGoreManager'.default.MaxBloodEffects;
|
|
Setting.MaxGoreEffects = class'KFGoreManager'.default.MaxGoreEffects;
|
|
Setting.MaxPersistentSplatsPerFrame = Class'KFGoreManager'.default.MaxPersistentSplatsPerFrame;
|
|
}
|
|
|
|
static function SetScriptFXQualitySettings(out FXQualitySetting Setting)
|
|
{
|
|
class'WorldInfo'.default.EmitterPoolScale = Setting.EmitterPoolScale;
|
|
class'KFMuzzleFlash'.default.ShellEjectLifetime = Setting.ShellEjectLifetime;
|
|
class'WorldInfo'.default.bAllowExplosionLights = Setting.AllowExplosionLights;
|
|
class'KFSprayActor'.default.bAllowSprayLights = Setting.AllowSprayActorLights;
|
|
class'KFPawn'.default.bAllowFootstepSounds = Setting.AllowFootstepSounds;
|
|
class'KFGoreManager'.default.bAllowBloodSplatterDecals = Setting.AllowBloodSplatterDecals;
|
|
class'KFPawn'.default.bAllowRagdollAndGoreOnDeadBodies = Setting.AllowRagdollAndGoreOnDeadBodies;
|
|
class'KFWeap_FlameBase'.default.bArePilotLightsAllowed = Setting.AllowPilotLights;
|
|
class'KFImpactEffectManager'.default.MaxImpactEffectDecals = Setting.MaxImpactEffectDecals;
|
|
class'WorldInfo'.default.MaxExplosionDecals = Setting.MaxExplosionDecals;
|
|
class'KFGoreManager'.default.GoreFXLifetimeMultiplier = Setting.GoreFXLifetimeMultiplier;
|
|
class'KFGoreManager'.default.MaxBloodEffects = Setting.MaxBloodEffects;
|
|
class'KFGoreManager'.default.MaxGoreEffects = Setting.MaxGoreEffects;
|
|
class'KFGoreManager'.default.MaxPersistentSplatsPerFrame = Setting.MaxPersistentSplatsPerFrame;
|
|
|
|
class'WorldInfo'.static.StaticSaveConfig();
|
|
class'KFMuzzleFlash'.static.StaticSaveConfig();
|
|
class'KFImpactEffectManager'.static.StaticSaveConfig();
|
|
class'KFGoreManager'.static.StaticSaveConfig();
|
|
class'KFSprayActor'.static.StaticSaveConfig();
|
|
class'KFPawn'.static.StaticSaveConfig();
|
|
class'KFWeap_FlameBase'.static.StaticSaveConfig();
|
|
}
|
|
|
|
//
|
|
// Realtime Reflections
|
|
//
|
|
static function int FindReflectionsSettingIndex(out RealtimeReflectionsSetting Ref, array<RealtimeReflectionsSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptReflectionSettings(out RealtimeReflectionsSetting Setting) {}
|
|
static function SetScriptReflectionSettings(out RealtimeReflectionsSetting Setting) {}
|
|
|
|
//
|
|
// Character detail
|
|
//
|
|
static function int FindCharacterDetailIndex(out CharacterDetailSetting Ref, array<CharacterDetailSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptCharacterDetailSettings(out CharacterDetailSetting Setting)
|
|
{
|
|
Setting.MaxBodyWoundDecals = class'KFGoreManager'.default.MaxBodyWoundDecals;
|
|
Setting.MaxDeadBodies = class'KFGoreManager'.default.MaxDeadBodies;
|
|
Setting.bAllowPhysics = class'KFPawn'.default.bAllowAlwaysOnPhysics;
|
|
}
|
|
|
|
static function SetScriptCharacterDetailSettings(out CharacterDetailSetting Setting)
|
|
{
|
|
class'KFGoreManager'.default.MaxBodyWoundDecals = Setting.MaxBodyWoundDecals;
|
|
class'KFGoreManager'.default.MaxDeadBodies = Setting.MaxDeadBodies;
|
|
class'KFPawn'.default.bAllowAlwaysOnPhysics = Setting.bAllowPhysics;
|
|
|
|
class'KFGoreManager'.static.StaticSaveConfig();
|
|
class'KFPawn'.static.StaticSaveConfig();
|
|
}
|
|
|
|
//
|
|
// Light Shafts
|
|
//
|
|
static function int FindLightShaftsSettingIndex(out LightShaftsSetting Ref, array<LightShaftsSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptLightShaftsSettings(out LightShaftsSetting Setting) {}
|
|
static function SetScriptLightShaftsSettings(out LightShaftsSetting Setting) {}
|
|
|
|
//
|
|
// Volumetric Lighting
|
|
//
|
|
static function int FindVolumetricLightingSettingIndex(out VolumetricLightingSetting Ref, array<VolumetricLightingSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptVolumetricLightingSettings(out VolumetricLightingSetting Setting) {}
|
|
static function SetScriptVolumetricLightingSettings(out VolumetricLightingSetting Setting) {}
|
|
|
|
//
|
|
// Lens Flare
|
|
//
|
|
static function int FindLensFlareSettingIndex(out LensFlareSetting Ref, array<LensFlareSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptLensFlareSettings(out LensFlareSetting Setting) {}
|
|
static function SetScriptLensFlareSettings(out LensFlareSetting Setting) {}
|
|
|
|
//
|
|
// Texture Resolution
|
|
//
|
|
static function int FindTextureResolutionSettingIndex(out TextureResolutionSetting Ref, array<TextureResolutionSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptTextureResolutionSettings(out TextureResolutionSetting Setting) {}
|
|
static function SetScriptTextureResolutionSettings(out TextureResolutionSetting Setting) {}
|
|
|
|
//
|
|
// Texture Filtering
|
|
//
|
|
static function int FindTextureFilterSettingIndex(out TextureFilterSetting Ref, array<TextureFilterSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptTextureFilterSettings(out TextureFilterSetting Setting) {}
|
|
static function SetScriptTextureFilterSettings(out TextureFilterSetting Setting) {}
|
|
|
|
//
|
|
// Bloom
|
|
//
|
|
static function int FindBloomSettingIndex(out BloomSetting Ref, array<BloomSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptBloomSettings(out BloomSetting Setting) {}
|
|
static function SetScriptBloomSettings(out BloomSetting Setting) {}
|
|
|
|
//
|
|
// Motion Blur
|
|
//
|
|
static function int FindMotionBlurSettingIndex(out MotionBlurSetting Ref, array<MotionBlurSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptMotionBlurSettings(out MotionBlurSetting Setting) {}
|
|
static function SetScriptMotionBlurSettings(out MotionBlurSetting Setting) {}
|
|
|
|
//
|
|
// Anti Aliasing
|
|
//
|
|
static function int FindAntiAliasingSettingIndex(out AntiAliasingSetting Ref, array<AntiAliasingSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptAntiAliasingSettings(out AntiAliasingSetting Setting) {}
|
|
static function SetScriptAntiAliasingSettings(out AntiAliasingSetting Setting) {}
|
|
|
|
|
|
//
|
|
// Ambient Occlusion
|
|
//
|
|
static function int FindAmbientOcclusionSettingIndex(out AmbientOcclusionSetting Ref, array<AmbientOcclusionSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptAmbientOcclusionSettings(out AmbientOcclusionSetting Setting) {}
|
|
static function SetScriptAmbientOcclusionSettings(out AmbientOcclusionSetting Setting) {}
|
|
|
|
|
|
//
|
|
// Depth Of Field
|
|
//
|
|
static function int FindDOFSettingIndex(out DOFSetting Ref, array<DOFSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptDOFSettings(out DOFSetting Setting) {}
|
|
static function SetScriptDOFSettings(out DOFSetting Setting) {}
|
|
|
|
//
|
|
// Flex
|
|
//
|
|
static function int FindFlexSettingIndex(out FlexSetting Ref, array<FlexSetting> SettingsList)
|
|
{
|
|
local int i;
|
|
for( i=0; i<SettingsList.length; i++ )
|
|
{
|
|
if( Ref == SettingsList[i] )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return INDEX_NONE;
|
|
}
|
|
|
|
static function GetScriptFlexSettings(out FlexSetting Setting) {}
|
|
static function SetScriptFlexSettings(out FlexSetting Setting) {}
|
|
|
|
|
|
/** Init function */
|
|
function InitializeMenu( KFGFxMoviePlayer_Manager InManager )
|
|
{
|
|
super.InitializeMenu(InManager);
|
|
GetCurrentGFXSettings(CurrentGFXSettings);
|
|
LocalizeText();
|
|
InitializeResolution();
|
|
InitValues();
|
|
SetFleXOptionEnabled(IsFleXSupported());
|
|
}
|
|
|
|
function SetFleXOptionEnabled(bool bEnable)
|
|
{
|
|
local GFxObject FlexDropDown;
|
|
FlexDropDown = GetObject("physicsLevelDropDown");
|
|
|
|
FlexDropDown.SetBool("enabled", bEnable);
|
|
}
|
|
|
|
/**
|
|
Functions used to populate the options for each setting.
|
|
Can be overridden in subclass
|
|
*/
|
|
|
|
function SetAspectRatioOptions(out GFxObject LocalizedObject)
|
|
{
|
|
local int i;
|
|
local array<string> SupportedAspectRatioOptions;
|
|
|
|
// Start clean
|
|
i = 0;
|
|
AvailableAspectRatioList.Remove(0, AvailableAspectRatioList.length);
|
|
|
|
// All.
|
|
// No filter option. Unsupress all resolutions.
|
|
SupportedAspectRatioOptions[i++] = AspectRatioString_All;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_All);
|
|
|
|
// 4:3
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_Standard_4_3) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = StandardAspectRatioString_4_3;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_Standard_4_3);
|
|
}
|
|
|
|
// 5:4
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_Standard_5_4) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = StandardAspectRatioString_5_4;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_Standard_5_4);
|
|
}
|
|
|
|
// 3:2
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_Standard_3_2) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = StandardAspectRatioString_3_2;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_Standard_3_2);
|
|
}
|
|
|
|
// 16:9
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_Wide_16_9) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = WideAspectRatioString_16_9;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_Wide_16_9);
|
|
}
|
|
|
|
// 16:10
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_Wide_16_10) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = WideAspectRatioString_16_10;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_Wide_16_10);
|
|
}
|
|
|
|
// 2:1
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_ExtraWide_2_1) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = ExtraWideAspectRatioString_2_1;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_ExtraWide_2_1);
|
|
}
|
|
|
|
// 21:9
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_ExtraWide_21_9) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = ExtraWideAspectRatioString_21_9;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_ExtraWide_21_9);
|
|
}
|
|
|
|
// Multi-monitor
|
|
if( IsAspectRatioAvailable(KFASPECTRATIO_MultiMonitor) )
|
|
{
|
|
SupportedAspectRatioOptions[i++] = MultiMonitorAspectRatioString;
|
|
AvailableAspectRatioList.AddItem(KFASPECTRATIO_MultiMonitor);
|
|
}
|
|
|
|
LocalizedObject.SetObject("aspectRatioOptions", MakeDataProvider(SupportedAspectRatioOptions));
|
|
}
|
|
|
|
function SetFullScreenOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("fullscreenOptions", MakeDataProvider(FullScreenStringOptions));
|
|
}
|
|
function SetGraphicsQualityOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("graphicsOptions", MakeDataProvider(GraphicsQualityStringOptions));
|
|
}
|
|
|
|
function SetVSyncOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("vSyncOptions", MakeDataProvider(VSyncStringOptions));
|
|
}
|
|
|
|
function SetEnvironmentDetailOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("environmentDetailOptions", MakeDataProvider(EnvironmentDetailsStringOptions));
|
|
}
|
|
|
|
function SetCharacterDetailOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("characterDetailOptions", MakeDataProvider(CharacterDetailStringOptions));
|
|
}
|
|
|
|
function SetFXOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("fxOptions", MakeDataProvider(FXStringOptions));
|
|
}
|
|
|
|
function SetTextureResolutionOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("textureResolutionOptions", MakeDataProvider(TextureResolutionStringOptions));
|
|
}
|
|
|
|
function SetTextureFilteringOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("textureFilteringOptions", MakeDataProvider(TextureFilteringStringOptions));
|
|
}
|
|
|
|
function SetShadowOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("shadowsOptions", MakeDataProvider(ShadowsStringOptions));
|
|
}
|
|
|
|
function SetRealtimeReflectionsOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("realtimeReflectionsOptions", MakeDataProvider(RealtimeReflectionsStringOptions));
|
|
}
|
|
|
|
function SetAntiAliasingOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("antiAliasingOptions", MakeDataProvider(AntiAliasingStringOptions));
|
|
}
|
|
|
|
function SetBloomOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("bloomOptions", MakeDataProvider(BloomStringOptions));
|
|
}
|
|
|
|
function SetMotionBlurOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("motionBlurOptions", MakeDataProvider(MotionBlurStringOptions));
|
|
}
|
|
|
|
function SetAmbientOcclusionOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("ambientOcclusionOptions", MakeDataProvider(AmbientOcclusionStringOptions));
|
|
}
|
|
|
|
function SetDepthOfFieldOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("depthOfFieldOptions", MakeDataProvider(DepthOfFieldStringOptions));
|
|
}
|
|
|
|
function SetVolumetricLightingOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("volumetricLightingOptions", MakeDataProvider(OffOnStringOptions));
|
|
}
|
|
|
|
function SetLensFlareOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("lensFlaresOptions", MakeDataProvider(OffOnStringOptions));
|
|
}
|
|
|
|
function SetLightShaftOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("lightShaftsOptions", MakeDataProvider(OffOnStringOptions));
|
|
}
|
|
|
|
function SetPhysicsLevelOptions(out GFxObject LocalizedObject)
|
|
{
|
|
LocalizedObject.SetObject("physicsLevelOptions", MakeDataProvider(PhysicsLevelOptionStrings));
|
|
}
|
|
|
|
// *****************************************************************************************
|
|
|
|
function LocalizeText()
|
|
{
|
|
local GFxObject LocalizedObject;
|
|
|
|
LocalizedObject = CreateObject( "Object" );
|
|
|
|
LocalizedObject.SetString("graphics", Caps(class'KFGFxOptionsMenu_Selection'.default.OptionStrings[OM_Video]));
|
|
LocalizedObject.SetString("basic", Caps(BasicString));
|
|
LocalizedObject.SetString("advanced", Caps(AdvancedString));
|
|
LocalizedObject.SetString("effects", EffectsString);
|
|
|
|
LocalizedObject.SetString("physicsLevel", PhysicsLevelString);
|
|
|
|
LocalizedObject.SetString("aspectRatio", AspectRatioString);
|
|
LocalizedObject.SetString("resolution", ResolutionString);
|
|
LocalizedObject.SetString("graphicsQuality", GraphicsQualityString);
|
|
LocalizedObject.SetString("vSync", VSyncString);
|
|
LocalizedObject.SetString("fullscreen", FullscreenString);
|
|
LocalizedObject.SetString("variableFrameRate", VariableFrameRateString);
|
|
LocalizedObject.SetString("adjustGamma", AdjustGammaString);
|
|
LocalizedObject.SetString("filmGrain", FilmGrainString);
|
|
|
|
LocalizedObject.SetString("environmentDetails", EnvironmentDetailsString);
|
|
LocalizedObject.SetString("characterDetail", CharacterDetailString);
|
|
LocalizedObject.SetString("fx", FXString);
|
|
LocalizedObject.SetString("textureResolution", TextureResolutionString);
|
|
LocalizedObject.SetString("textureFiltering", TextureFilteringString);
|
|
LocalizedObject.SetString("shadows", ShadowsString);
|
|
LocalizedObject.SetString("realtimeReflections", RealtimeReflectionsString);
|
|
LocalizedObject.SetString("antiAliasing", AntiAliasingString);
|
|
LocalizedObject.SetString("bloom", BloomString);
|
|
LocalizedObject.SetString("motionBlur", MotionBlurString);
|
|
LocalizedObject.SetString("ambientOcclusion", AmbientOcclusionString);
|
|
LocalizedObject.SetString("depthOfField", DepthOfFieldString);
|
|
LocalizedObject.SetString("volumetricLighting", VolumetricLightingString);
|
|
LocalizedObject.SetString("lensFlares", LensFlaresString);
|
|
LocalizedObject.SetString("lightShafts", LightShaftsString);
|
|
|
|
LocalizedObject.SetString("customString", CustomString);
|
|
LocalizedObject.SetString("iniOverrideString", IniOverrideString);
|
|
|
|
|
|
LocalizedObject.SetString("apply", ApplyString);
|
|
LocalizedObject.SetString("close", Class'KFCommon_LocalizedStrings'.default.BackString);
|
|
LocalizedObject.SetString("default", DefaultString);
|
|
LocalizedObject.SetObject("physicsSuggestionsArray", MakeDataProvider(PhysicsLevelSuggestionStrings) );
|
|
|
|
// Populate the options.
|
|
SetAspectRatioOptions(LocalizedObject);
|
|
SetFullScreenOptions(LocalizedObject);
|
|
SetGraphicsQualityOptions(LocalizedObject);
|
|
SetVSyncOptions(LocalizedObject);
|
|
SetEnvironmentDetailOptions(LocalizedObject);
|
|
SetCharacterDetailOptions(LocalizedObject);
|
|
SetFXOptions(LocalizedObject);
|
|
SetTextureResolutionOptions(LocalizedObject);
|
|
SetTextureFilteringOptions(LocalizedObject);
|
|
SetShadowOptions(LocalizedObject);
|
|
SetRealTimeReflectionsOptions(LocalizedObject);
|
|
SetAntiAliasingOptions(LocalizedObject);
|
|
SetBloomOptions(LocalizedObject);
|
|
SetMotionBlurOptions(LocalizedObject);
|
|
SetAmbientOcclusionOptions(LocalizedObject);
|
|
SetDepthOfFieldOptions(LocalizedObject);
|
|
SetVolumetricLightingOptions(LocalizedObject);
|
|
SetLensFlareOptions(LocalizedObject);
|
|
SetLightShaftOptions(LocalizedObject);
|
|
SetPhysicsLevelOptions(LocalizedObject);
|
|
|
|
|
|
SetObject("localizedText", LocalizedObject);
|
|
|
|
}
|
|
|
|
//Returns an array for a dataProvider to be read in via GFX
|
|
function GFxObject MakeDataProvider(const out array<string> SourceText)
|
|
{
|
|
local GFxObject DataProvider;
|
|
local byte i;
|
|
|
|
DataProvider = CreateArray();
|
|
|
|
for (i = 0; i < SourceText.Length; i++)
|
|
{
|
|
DataProvider.SetElementString(i, SourceText[i]);
|
|
}
|
|
|
|
return DataProvider;
|
|
}
|
|
|
|
// Maps from compat level to graphics quality setting
|
|
static function int GetGraphicsQualityFromCompat(int CompatLevel)
|
|
{
|
|
switch( CompatLevel)
|
|
{
|
|
case 0:
|
|
// Unsupported.
|
|
// Setting to low settings for now. We may want to catch that earlier
|
|
// and let the user know that he won't be able to run the game
|
|
return 0;
|
|
case 1:
|
|
// Low
|
|
return 0;
|
|
case 2:
|
|
// Medium
|
|
return 1;
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
// 3,4,5 all map to high. Ultra is never assigned by default
|
|
return 2;
|
|
case 6:
|
|
// Ultra setting (forced only)
|
|
return 3;
|
|
case 7:
|
|
// High + Low Flex (forced only)
|
|
return 4;
|
|
case 8:
|
|
// High + High Flex (forced only)
|
|
return 5;
|
|
case 9:
|
|
// Ultra + High Flex (forced only)
|
|
return 6;
|
|
default:
|
|
`log("[AppCompat]" @ CompatLevel @ " is not a valid compat level. Defaulting to medium settings" );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
// Called during engine initialization to set graphics options
|
|
static event SetCompatibilityLevel(int CompatLevel)
|
|
{
|
|
local GraphicsQualitySetting GraphicsQuality;
|
|
local int GraphicsQualityIndex;
|
|
|
|
GraphicsQualityIndex = GetGraphicsQualityFromCompat(CompatLevel);
|
|
|
|
if( GraphicsQualityIndex >= 0 && GraphicsQualityIndex < default.GraphicsQualityPresets.length )
|
|
{
|
|
// Get base graphics quality
|
|
GraphicsQuality = default.GraphicsQualityPresets[GraphicsQualityIndex];
|
|
|
|
// Apply settings
|
|
SetGraphicsQuality(GraphicsQuality, false);
|
|
}
|
|
}
|
|
|
|
// Apply settings for the passed in graphics quality
|
|
static event SetGraphicsQuality(GraphicsQualitySetting GraphicsQuality, bool bPreserveUserOverrides)
|
|
{
|
|
local GFXSettings NewGFXSettings;
|
|
|
|
//
|
|
// Initialize with current settings (for resolution, etc.)
|
|
//
|
|
GetCurrentGFXSettings(NewGFXSettings);
|
|
|
|
//
|
|
// Populate the advanced settings
|
|
// NOTE: If bPreserveUserOverrides is specified, check whether current setting belongs to a preset or not before assigning one of the presets.
|
|
// This done to preserve settings that a user has tweaked manually in the INI. The check will fail in
|
|
// that case, and GSA (or AppCompat) will leave that setting alone (preserging the user override)
|
|
//
|
|
if( !bPreserveUserOverrides || FindEnvironmentDetailIndex(NewGFXSettings.EnvironmentDetail, default.EnvironmentDetailPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.EnvironmentDetail = default.EnvironmentDetailPresets[GraphicsQuality.EnvironmentDetailIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindCharacterDetailIndex(NewGFXSettings.CharacterDetail, default.CharacterDetailPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.CharacterDetail = default.CharacterDetailPresets[GraphicsQuality.CharacterDetailIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindFXQualityIndex(NewGFXSettings.FX, default.FXQualityPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.FX = default.FXQualityPresets[GraphicsQuality.FXQualityIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindTextureResolutionSettingIndex(NewGFXSettings.TextureResolution, default.TextureResolutionPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.TextureResolution = default.TextureResolutionPresets[GraphicsQuality.TextureResolutionIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindTextureFilterSettingIndex(NewGFXSettings.TextureFiltering, default.TextureFilterPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.TextureFiltering = default.TextureFilterPresets[GraphicsQuality.TextureFilteringIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindShadowQualityIndex(NewGFXSettings.Shadows, default.ShadowQualityPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.Shadows = default.ShadowQualityPresets[GraphicsQuality.ShadowQualityIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindReflectionsSettingIndex(NewGFXSettings.RealtimeReflections, default.RealtimeReflectionsPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.RealtimeReflections = default.RealtimeReflectionsPresets[GraphicsQuality.RealtimeReflectionsIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindLightShaftsSettingIndex(NewGFXSettings.LightShafts, default.LightShaftsPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.LightShafts = default.LightShaftsPresets[GraphicsQuality.LightShafts ? 1 : 0];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindVolumetricLightingSettingIndex(NewGFXSettings.VolumetricLighting, default.VolumetricLightingPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.VolumetricLighting = default.VolumetricLightingPresets[GraphicsQuality.VolumetricLighting ? 1 : 0];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindLensFlareSettingIndex(NewGFXSettings.LensFlares, default.LensFlarePresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.LensFlares = default.LensFlarePresets[GraphicsQuality.LensFlares ? 1 : 0];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindAntiAliasingSettingIndex(NewGFXSettings.AntiAliasing, default.AntiAliasingPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.AntiAliasing = default.AntiAliasingPresets[GraphicsQuality.AntiAliasingIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindBloomSettingIndex(NewGFXSettings.Bloom, default.BloomPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.Bloom = default.BloomPresets[GraphicsQuality.BloomIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindMotionBlurSettingIndex(NewGFXSettings.MotionBlur, default.MotionBlurPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.MotionBlur = default.MotionBlurPresets[GraphicsQuality.MotionBlurIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindAmbientOcclusionSettingIndex(NewGFXSettings.AmbientOcclusion, default.AmbientOcclusionPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.AmbientOcclusion = default.AmbientOcclusionPresets[GraphicsQuality.AmbientOcclusionIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindDOFSettingIndex(NewGFXSettings.DepthOfField, default.DOFPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.DepthOfField = default.DOFPresets[GraphicsQuality.DOFIndex];
|
|
}
|
|
|
|
if( !bPreserveUserOverrides || FindFlexSettingIndex(NewGFXSettings.Flex, default.FlexPresets) != INDEX_NONE )
|
|
{
|
|
NewGFXSettings.Flex = default.FlexPresets[GraphicsQuality.FlexIndex];
|
|
}
|
|
|
|
// Apply the new settings
|
|
// Ideally, we should be calling SetGFXSettings() instead of the following
|
|
// but SetGFXSettings() is not a static function. So we have to do this work around.
|
|
SetNativeSettings(NewGFXSettings);
|
|
SetScriptSettings(NewGFXSettings);
|
|
|
|
// Keep GSA in sync
|
|
UpdateGSA(NewGFXSettings);
|
|
}
|
|
|
|
function InitValues()
|
|
{
|
|
local GFxObject ValuesObject;
|
|
|
|
local int GraphicsQualityIndex;
|
|
local int DisplayIndex;
|
|
local int VSyncSettingIndex;
|
|
local int VariableFramerateSettingIndex;
|
|
local int EnvironmentDetailIndex;
|
|
local int ShadowQualityIndex;
|
|
local int FXQualityIndex;
|
|
local int ReflectionsSettingIndex;
|
|
local int CharacterDetailIndex;
|
|
local int LightShaftsSettingIndex;
|
|
local int VolumetricLightingSettingIndex;
|
|
local int LensFlareSettingIndex;
|
|
local int TextureResolutionSettingIndex;
|
|
local int TextureFilterSettingIndex;
|
|
local int BloomSettingIndex;
|
|
local int MotionBlurSettingIndex;
|
|
local int AntiAliasingSettingIndex;
|
|
local int AmbientOcclusionSettingIndex;
|
|
local int DOFSettingIndex;
|
|
local float FilmGrainSliderValue;
|
|
local int FlexSettingIndex;
|
|
|
|
ValuesObject = GetObject("options");
|
|
|
|
// TODO:SAVE - need to find PC Values to be included here
|
|
|
|
//
|
|
// Basic Graphics Quality Setting
|
|
// Passing -1 defaults to "Custom"
|
|
//
|
|
GraphicsQualityIndex = FindGraphicsQualitySettingIndex(CurrentGFXSettings, GraphicsQualityPresets);
|
|
ValuesObject.SetInt("graphics", GraphicsQualityIndex);
|
|
|
|
//
|
|
// Vsync
|
|
//
|
|
VSyncSettingIndex = FindVSyncSettingIndex(CurrentGFXSettings.VSync, VSyncPresets);
|
|
if(VSyncSettingIndex >= 0 && VSyncSettingIndex < VSyncPresets.length)
|
|
{
|
|
ValuesObject.SetInt("vSync", VSyncSettingIndex);
|
|
}
|
|
|
|
//
|
|
// Display
|
|
//
|
|
DisplayIndex = FindDisplaySettingIndex(CurrentGFXSettings.Display, DisplayPresets);
|
|
if(DisplayIndex >= 0 && DisplayIndex < DisplayPresets.length)
|
|
{
|
|
ValuesObject.SetInt("fullScreen", DisplayIndex);
|
|
}
|
|
|
|
//
|
|
// Variable frame rate
|
|
//
|
|
VariableFramerateSettingIndex = FindVariableFPSSettingIndex(CurrentGFXSettings.VariableFPS, VariableFrameratePresets);
|
|
if(VariableFramerateSettingIndex >= 0 && VariableFramerateSettingIndex < VariableFrameratePresets.length)
|
|
{
|
|
ValuesObject.SetBool("variableFrameRate", VariableFramerateSettingIndex > 0);
|
|
}
|
|
|
|
//
|
|
// Film grain
|
|
//
|
|
FilmGrainSliderValue = GetFilmGrainSliderValue(CurrentGFXSettings.FilmGrain, FilmGrainMinMaxPreset);
|
|
ValuesObject.SetFloat("filmGrain", FilmGrainSliderValue);
|
|
|
|
//
|
|
// Advanced Settings
|
|
// Passing -1 defaults to "Custom"
|
|
//
|
|
EnvironmentDetailIndex = FindEnvironmentDetailIndex(CurrentGFXSettings.EnvironmentDetail, EnvironmentDetailPresets);
|
|
ValuesObject.SetInt("environmentDetail", EnvironmentDetailIndex);
|
|
|
|
CharacterDetailIndex = FindCharacterDetailIndex(CurrentGFXSettings.CharacterDetail, CharacterDetailPresets);
|
|
ValuesObject.SetInt("characterDetail", CharacterDetailIndex);
|
|
|
|
FXQualityIndex = FindFXQualityIndex(CurrentGFXSettings.FX, FXQualityPresets);
|
|
ValuesObject.SetInt("fx", FXQualityIndex);
|
|
|
|
TextureResolutionSettingIndex = FindTextureResolutionSettingIndex(CurrentGFXSettings.TextureResolution, TextureResolutionPresets);
|
|
ValuesObject.SetInt("textureResolution", TextureResolutionSettingIndex);
|
|
|
|
TextureFilterSettingIndex = FindTextureFilterSettingIndex(CurrentGFXSettings.TextureFiltering, TextureFilterPresets);
|
|
ValuesObject.SetInt("textureFiltering", TextureFilterSettingIndex);
|
|
|
|
ShadowQualityIndex = FindShadowQualityIndex(CurrentGFXSettings.Shadows, ShadowQualityPresets);
|
|
ValuesObject.SetInt("shadows", ShadowQualityIndex);
|
|
|
|
ReflectionsSettingIndex = FindReflectionsSettingIndex(CurrentGFXSettings.RealtimeReflections, RealtimeReflectionsPresets);
|
|
ValuesObject.SetInt("realtimeReflections", ReflectionsSettingIndex);
|
|
|
|
AntiAliasingSettingIndex = FindAntiAliasingSettingIndex(CurrentGFXSettings.AntiAliasing, AntiAliasingPresets);
|
|
ValuesObject.SetInt("antiAliasing", AntiAliasingSettingIndex);
|
|
|
|
BloomSettingIndex = FindBloomSettingIndex(CurrentGFXSettings.Bloom, BloomPresets);
|
|
ValuesObject.SetInt("bloom", BloomSettingIndex);
|
|
|
|
MotionBlurSettingIndex = FindMotionBlurSettingIndex(CurrentGFXSettings.MotionBlur, MotionBlurPresets);
|
|
ValuesObject.SetInt("motionBlur", MotionBlurSettingIndex);
|
|
|
|
AmbientOcclusionSettingIndex = FindAmbientOcclusionSettingIndex(CurrentGFXSettings.AmbientOcclusion, AmbientOcclusionPresets);
|
|
ValuesObject.SetInt("ambientOcclusion", AmbientOcclusionSettingIndex);
|
|
|
|
DOFSettingIndex = FindDOFSettingIndex(CurrentGFXSettings.DepthOfField, DOFPresets);
|
|
ValuesObject.SetInt("depthOfField", DOFSettingIndex);
|
|
|
|
LightShaftsSettingIndex = FindLightShaftsSettingIndex(CurrentGFXSettings.LightShafts, LightShaftsPresets);
|
|
ValuesObject.SetInt("lightShafts", LightShaftsSettingIndex);
|
|
|
|
VolumetricLightingSettingIndex = FindVolumetricLightingSettingIndex(CurrentGFXSettings.VolumetricLighting, VolumetricLightingPresets);
|
|
ValuesObject.SetInt("volumetricLighting", VolumetricLightingSettingIndex);
|
|
|
|
LensFlareSettingIndex = FindLensFlareSettingIndex(CurrentGFXSettings.LensFlares, LensFlarePresets);
|
|
ValuesObject.SetInt("lensFlares", LensFlareSettingIndex);
|
|
|
|
FlexSettingIndex = FindFlexSettingIndex(CurrentGFXSettings.Flex, FlexPresets);
|
|
ValuesObject.SetInt("physicsLevel", FlexSettingIndex);
|
|
|
|
//
|
|
// Update the UI
|
|
//
|
|
SetObject("options", ValuesObject);
|
|
}
|
|
|
|
/** Function to get current GFX settings. This will grab both native
|
|
and script settings, and is the recommended funtion to use to query
|
|
the current settings.
|
|
*/
|
|
static function GetCurrentGFXSettings(out GFXSettings CurrentSettings)
|
|
{
|
|
GetCurrentNativeSettings(CurrentSettings);
|
|
GetCurrentScriptSettings(CurrentSettings);
|
|
}
|
|
|
|
|
|
/** Wrapper function that updates the native side system settings,
|
|
the script side settings, and also updates the book keeping variables
|
|
*/
|
|
function SetGFXSettings(GFXSettings NewSettings)
|
|
{
|
|
// Store a copy of the current settings to support reverts
|
|
RevertedGFXSettings = CurrentGFXSettings;
|
|
|
|
// Actual update
|
|
SetNativeSettings(NewSettings);
|
|
SetScriptSettings(NewSettings);
|
|
|
|
// Update the current settings
|
|
CurrentGFXSettings = NewSettings;
|
|
|
|
// Keep GSA in sync
|
|
UpdateGSA(NewSettings);
|
|
}
|
|
|
|
function GetModifiedGFXSettings(out GFXSettings NewSettings)
|
|
{
|
|
local array<string> ResolutionStringArr;
|
|
local GFxObject OptionsObj;
|
|
local int ResolutionIndex;
|
|
local int DisplayIndex;
|
|
local int VSyncSettingIndex;
|
|
local int VariableFramerateSettingIndex;
|
|
local int EnvironmentDetailIndex;
|
|
local int ShadowQualityIndex;
|
|
local int FXQualityIndex;
|
|
local int ReflectionsSettingIndex;
|
|
local int CharacterDetailIndex;
|
|
local int LightShaftsSettingIndex;
|
|
local int VolumetricLightingSettingIndex;
|
|
local int LensFlareSettingIndex;
|
|
local int TextureResolutionSettingIndex;
|
|
local int TextureFilterSettingIndex;
|
|
local int BloomSettingIndex;
|
|
local int MotionBlurSettingIndex;
|
|
local int AntiAliasingSettingIndex;
|
|
local int AmbientOcclusionSettingIndex;
|
|
local int DOFSettingIndex;
|
|
local int FlexSettingIndex;
|
|
local float FilmGrainSliderValue;
|
|
|
|
OptionsObj = GetObject("options");
|
|
|
|
ResolutionIndex = OptionsObj.GetInt("resolution");
|
|
ResolutionStringArr = SplitString( SupportedResolutionList[ResolutionIndex], "x", true );
|
|
NewSettings.Resolution.ResX = int(ResolutionStringArr[0]);
|
|
NewSettings.Resolution.ResY = int(ResolutionStringArr[1]);
|
|
|
|
VSyncSettingIndex = OptionsObj.GetInt("vSync");
|
|
if( VSyncSettingIndex >= 0 && VSyncSettingIndex < VSyncPresets.length )
|
|
{
|
|
NewSettings.VSync = VSyncPresets[VSyncSettingIndex];
|
|
}
|
|
|
|
DisplayIndex = OptionsObj.GetInt("fullScreen");
|
|
if( DisplayIndex >= 0 && DisplayIndex < DisplayPresets.length )
|
|
{
|
|
NewSettings.Display = DisplayPresets[DisplayIndex];
|
|
}
|
|
|
|
VariableFramerateSettingIndex = OptionsObj.GetBool("variableFrameRate") ? 1 : 0;
|
|
if( VariableFramerateSettingIndex >= 0 && VariableFramerateSettingIndex < VariableFrameratePresets.length )
|
|
{
|
|
NewSettings.VariableFPS = VariableFrameratePresets[VariableFramerateSettingIndex];
|
|
}
|
|
|
|
FilmGrainSliderValue = OptionsObj.GetFloat("filmGrain");
|
|
NewSettings.FilmGrain.FilmGrainScale = GetFilmGrainSettingValue(FilmGrainSliderValue, FilmGrainMinMaxPreset);
|
|
|
|
FlexSettingIndex = OptionsObj.GetInt("physicsLevel");
|
|
if( FlexSettingIndex >= 0 && FlexSettingIndex < FlexPresets.length )
|
|
{
|
|
NewSettings.Flex = FlexPresets[FlexSettingIndex];
|
|
}
|
|
|
|
EnvironmentDetailIndex = OptionsObj.GetInt("environmentDetail");
|
|
if( EnvironmentDetailIndex >= 0 && EnvironmentDetailIndex < EnvironmentDetailPresets.length )
|
|
{
|
|
NewSettings.EnvironmentDetail = EnvironmentDetailPresets[EnvironmentDetailIndex];
|
|
}
|
|
|
|
CharacterDetailIndex = OptionsObj.GetInt("characterDetail");
|
|
if( CharacterDetailIndex >= 0 && CharacterDetailIndex < CharacterDetailPresets.length )
|
|
{
|
|
NewSettings.CharacterDetail = CharacterDetailPresets[CharacterDetailIndex];
|
|
}
|
|
|
|
FXQualityIndex = OptionsObj.GetInt("fx");
|
|
if( FXQualityIndex >= 0 && FXQualityIndex < FXQualityPresets.length )
|
|
{
|
|
NewSettings.FX = FXQualityPresets[FXQualityIndex];
|
|
}
|
|
|
|
TextureResolutionSettingIndex = OptionsObj.GetInt("textureResolution");
|
|
if( TextureResolutionSettingIndex >= 0 && TextureResolutionSettingIndex < TextureResolutionPresets.length )
|
|
{
|
|
NewSettings.TextureResolution = TextureResolutionPresets[TextureResolutionSettingIndex];
|
|
}
|
|
|
|
TextureFilterSettingIndex = OptionsObj.GetInt("textureFiltering");
|
|
if( TextureFilterSettingIndex >= 0 && TextureFilterSettingIndex < TextureFilterPresets.length )
|
|
{
|
|
NewSettings.TextureFiltering = TextureFilterPresets[TextureFilterSettingIndex];
|
|
}
|
|
|
|
ShadowQualityIndex = OptionsObj.GetInt("shadows");
|
|
if( ShadowQualityIndex >= 0 && ShadowQualityIndex < ShadowQualityPresets.length )
|
|
{
|
|
NewSettings.Shadows = ShadowQualityPresets[ShadowQualityIndex];
|
|
}
|
|
|
|
ReflectionsSettingIndex = OptionsObj.GetInt("realtimeReflections");
|
|
if( ReflectionsSettingIndex >= 0 && ReflectionsSettingIndex < RealtimeReflectionsPresets.length )
|
|
{
|
|
NewSettings.RealtimeReflections = RealtimeReflectionsPresets[ReflectionsSettingIndex];
|
|
}
|
|
|
|
AntiAliasingSettingIndex = OptionsObj.GetInt("antiAliasing");
|
|
if( AntiAliasingSettingIndex >= 0 && AntiAliasingSettingIndex < AntiAliasingPresets.length )
|
|
{
|
|
NewSettings.AntiAliasing = AntiAliasingPresets[AntiAliasingSettingIndex];
|
|
}
|
|
|
|
BloomSettingIndex = OptionsObj.GetInt("bloom");
|
|
if( BloomSettingIndex >= 0 && BloomSettingIndex < BloomPresets.length )
|
|
{
|
|
NewSettings.Bloom = BloomPresets[BloomSettingIndex];
|
|
}
|
|
|
|
MotionBlurSettingIndex = OptionsObj.GetInt("motionBlur");
|
|
if( MotionBlurSettingIndex >= 0 && MotionBlurSettingIndex < MotionBlurPresets.length )
|
|
{
|
|
NewSettings.MotionBlur = MotionBlurPresets[MotionBlurSettingIndex];
|
|
}
|
|
|
|
AmbientOcclusionSettingIndex = OptionsObj.GetInt("ambientOcclusion");
|
|
if( AmbientOcclusionSettingIndex >= 0 && AmbientOcclusionSettingIndex < AmbientOcclusionPresets.length )
|
|
{
|
|
NewSettings.AmbientOcclusion = AmbientOcclusionPresets[AmbientOcclusionSettingIndex];
|
|
}
|
|
|
|
DOFSettingIndex = OptionsObj.GetInt("depthOfField");
|
|
if( DOFSettingIndex >= 0 && DOFSettingIndex < DOFPresets.length )
|
|
{
|
|
NewSettings.DepthOfField = DOFPresets[DOFSettingIndex];
|
|
}
|
|
|
|
LightShaftsSettingIndex = OptionsObj.GetInt("lightShafts");
|
|
if( LightShaftsSettingIndex >= 0 && LightShaftsSettingIndex < LightShaftsPresets.length )
|
|
{
|
|
NewSettings.LightShafts = LightShaftsPresets[LightShaftsSettingIndex];
|
|
}
|
|
|
|
VolumetricLightingSettingIndex = OptionsObj.GetInt("volumetricLighting");
|
|
if( VolumetricLightingSettingIndex >= 0 && VolumetricLightingSettingIndex < VolumetricLightingPresets.length )
|
|
{
|
|
NewSettings.VolumetricLighting = VolumetricLightingPresets[VolumetricLightingSettingIndex];
|
|
}
|
|
|
|
LensFlareSettingIndex = OptionsObj.GetInt("lensFlares");
|
|
if( LensFlareSettingIndex >= 0 && LensFlareSettingIndex < LensFlarePresets.length )
|
|
{
|
|
NewSettings.LensFlares = LensFlarePresets[LensFlareSettingIndex];
|
|
}
|
|
|
|
AdjustModifiedGFXSettings(NewSettings);
|
|
}
|
|
|
|
function AdjustModifiedGFXSettings(out GFXSettings NewSettings)
|
|
{
|
|
local string MonitorResolution;
|
|
local array<string> ResolutionStringArr;
|
|
local array<string> MonitorResolutionStringArr;
|
|
local GFxObject OptionsObj;
|
|
local int ResolutionIndex;
|
|
local int i;
|
|
local bool NewSettingIsBorderless;
|
|
local bool OldSettingIsNotBorderless;
|
|
|
|
NewSettingIsBorderless = NewSettings.Display.BorderlessWindow && !NewSettings.Display.Fullscreen;
|
|
OldSettingIsNotBorderless = !(CurrentGFXSettings.Display.BorderlessWindow && !CurrentGFXSettings.Display.Fullscreen);
|
|
|
|
// Adjust resolution in case we are in changing to borderless mode
|
|
if(NewSettingIsBorderless && OldSettingIsNotBorderless)
|
|
{
|
|
// Get current monitor resolution
|
|
MonitorResolution = GetMonitorResolution();
|
|
if(MonitorResolution != "")
|
|
{
|
|
// Put the biggest resolution just in case
|
|
ResolutionIndex = SupportedResolutionList.length - 1;
|
|
|
|
// Search for the correct resolution among all the possible that the game support
|
|
for( i=0 ; i<SupportedResolutionList.length ; i++ )
|
|
{
|
|
ResolutionStringArr = SplitString( SupportedResolutionList[i], "x", true );
|
|
MonitorResolutionStringArr = SplitString( MonitorResolution, "x", true );
|
|
if(ResolutionStringArr[0] == MonitorResolutionStringArr[0] && ResolutionStringArr[1] == MonitorResolutionStringArr[1])
|
|
{
|
|
ResolutionIndex = i;
|
|
}
|
|
}
|
|
|
|
// Set the new resolution
|
|
ResolutionStringArr = SplitString( SupportedResolutionList[ResolutionIndex], "x", true );
|
|
NewSettings.Resolution.ResX = int(ResolutionStringArr[0]);
|
|
NewSettings.Resolution.ResY = int(ResolutionStringArr[1]);
|
|
|
|
// Update selected resolution display
|
|
OptionsObj = GetObject("options");
|
|
OptionsObj.SetInt("resolution", ResolutionIndex);
|
|
SetObject("options", OptionsObj);
|
|
}
|
|
}
|
|
}
|
|
|
|
function InitializeResolution()
|
|
{
|
|
local SupportedAspectRatio AspectRatio;
|
|
local GFxObject OptionsObj;
|
|
local int CurrentAspectRatioIndex;
|
|
|
|
// Get current aspect ratio
|
|
AspectRatio = GetAspectRatio(CurrentGFXSettings.Resolution.ResX, CurrentGFXSettings.Resolution.ResY);
|
|
|
|
// Update the resolution list for the current aspect ratio
|
|
UpdateResolutionList(AspectRatio);
|
|
|
|
// Update selected aspect ratio display
|
|
CurrentAspectRatioIndex = AvailableAspectRatioList.Find(AspectRatio);
|
|
OptionsObj = GetObject("options");
|
|
OptionsObj.SetInt("aspectRatio", CurrentAspectRatioIndex != INDEX_NONE ? CurrentAspectRatioIndex : 0);
|
|
SetObject("options", OptionsObj);
|
|
}
|
|
|
|
/** Check to see if any settings were modified. Calls callback on modification.
|
|
Set bUpdateSystemSettings to TRUE if SystemSettings need to be updated.
|
|
Set bRestartRequired to TRUE if the change requires you to restart the game
|
|
*/
|
|
function CheckForChangedSettings(out GFXSettings NewSettings, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte NeedsRevertCountdown)
|
|
{
|
|
|
|
if( NewSettings.Resolution != CurrentGFXSettings.Resolution )
|
|
OnResolutionSettingChanged(CurrentGFXSettings.Resolution, NewSettings.Resolution, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.VSync != CurrentGFXSettings.VSync )
|
|
OnVsyncSettingChanged(CurrentGFXSettings.Vsync, NewSettings.VSync, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.Display != CurrentGFXSettings.Display )
|
|
OnDisplaySettingChanged(CurrentGFXSettings.Display, NewSettings.Display, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.VariableFPS != CurrentGFXSettings.VariableFPS )
|
|
OnVariableFramerateSettingChanged(CurrentGFXSettings.VariableFPS, NewSettings.VariableFPS, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.FilmGrain != CurrentGFXSettings.FilmGrain )
|
|
OnFilmGrainSettingChanged(CurrentGFXSettings.FilmGrain, NewSettings.FilmGrain, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.Flex != CurrentGFXSettings.Flex )
|
|
OnFlexSettingChanged(CurrentGFXSettings.Flex, NewSettings.Flex, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.EnvironmentDetail != CurrentGFXSettings.EnvironmentDetail )
|
|
OnEnvironmentDetailSettingChanged(CurrentGFXSettings.EnvironmentDetail, NewSettings.EnvironmentDetail, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.CharacterDetail != CurrentGFXSettings.CharacterDetail )
|
|
OnCharacterDetailSettingChanged(CurrentGFXSettings.CharacterDetail, NewSettings.CharacterDetail, bUpdateSystemSettings, bRequiresRestart, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.FX != CurrentGFXSettings.FX )
|
|
OnFXQualitySettingChanged(CurrentGFXSettings.FX, NewSettings.FX, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.TextureResolution != CurrentGFXSettings.TextureResolution )
|
|
OnTextureResolutionSettingChanged(CurrentGFXSettings.TextureResolution, NewSettings.TextureResolution, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.TextureFiltering != CurrentGFXSettings.TextureFiltering )
|
|
OnTextureFilteringSettingChanged(CurrentGFXSettings.TextureFiltering, NewSettings.TextureFiltering, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.Shadows != CurrentGFXSettings.Shadows )
|
|
OnShadowQualitySettingChanged(CurrentGFXSettings.Shadows, NewSettings.Shadows, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.RealtimeReflections != CurrentGFXSettings.RealtimeReflections )
|
|
OnReflectionSettingChanged(CurrentGFXSettings.RealtimeReflections, NewSettings.RealtimeReflections, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.AntiAliasing != CurrentGFXSettings.AntiAliasing )
|
|
OnAntiAliasingSettingChanged(CurrentGFXSettings.AntiAliasing, NewSettings.AntiAliasing, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.Bloom != CurrentGFXSettings.Bloom )
|
|
OnBloomSettingChanged(CurrentGFXSettings.Bloom, NewSettings.Bloom, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.MotionBlur != CurrentGFXSettings.MotionBlur )
|
|
OnMotionBlurSettingChanged(CurrentGFXSettings.MotionBlur, NewSettings.MotionBlur, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.AmbientOcclusion != CurrentGFXSettings.AmbientOcclusion )
|
|
OnAmbientOcclusionSettingChanged(CurrentGFXSettings.AmbientOcclusion, NewSettings.AmbientOcclusion, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.DepthOfField != CurrentGFXSettings.DepthOfField )
|
|
OnDOFSettingChanged(CurrentGFXSettings.DepthOfField, NewSettings.DepthOfField, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.VolumetricLighting != CurrentGFXSettings.VolumetricLighting )
|
|
OnVolumetricLightingSettingChanged(CurrentGFXSettings.VolumetricLighting, NewSettings.VolumetricLighting, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.LensFlares != CurrentGFXSettings.LensFlares )
|
|
OnLensFlareSettingChanged(CurrentGFXSettings.LensFlares, NewSettings.LensFlares, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
if( NewSettings.LightShafts != CurrentGFXSettings.LightShafts )
|
|
OnLightShaftsSettingChanged(CurrentGFXSettings.LightShafts, NewSettings.LightShafts, bUpdateSystemSettings, bRequiresRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
}
|
|
|
|
// Update advanced settings UI if the user changed the basic graphics quality setting
|
|
function UpdateAdvancedSettingsUI(int GraphicsQualityIndex)
|
|
{
|
|
local GraphicsQualitySetting GraphicsQuality;
|
|
local GFxObject OptionsObj;
|
|
|
|
OptionsObj = GetObject("options");
|
|
|
|
if( GraphicsQualityIndex >= 0 && GraphicsQualityIndex < GraphicsQualityPresets.length )
|
|
{
|
|
GraphicsQuality = GraphicsQualityPresets[GraphicsQualityIndex];
|
|
|
|
OptionsObj.SetInt("environmentDetail", GraphicsQuality.EnvironmentDetailIndex);
|
|
OptionsObj.SetInt("characterDetail", GraphicsQuality.CharacterDetailIndex);
|
|
OptionsObj.SetInt("fx", GraphicsQuality.FXQualityIndex);
|
|
OptionsObj.SetInt("textureResolution", GraphicsQuality.TextureResolutionIndex);
|
|
OptionsObj.SetInt("textureFiltering", GraphicsQuality.TextureFilteringIndex);
|
|
OptionsObj.SetInt("shadows", GraphicsQuality.ShadowQualityIndex);
|
|
OptionsObj.SetInt("realtimeReflections", GraphicsQuality.RealtimeReflectionsIndex);
|
|
OptionsObj.SetBool("lightShafts", GraphicsQuality.LightShafts);
|
|
OptionsObj.SetBool("volumetricLighting", GraphicsQuality.VolumetricLighting);
|
|
OptionsObj.SetBool("lensFlares", GraphicsQuality.LensFlares);
|
|
OptionsObj.SetInt("antiAliasing", GraphicsQuality.AntiAliasingIndex);
|
|
OptionsObj.SetInt("bloom", GraphicsQuality.BloomIndex);
|
|
OptionsObj.SetInt("motionBlur", GraphicsQuality.MotionBlurIndex);
|
|
OptionsObj.SetInt("ambientOcclusion", GraphicsQuality.AmbientOcclusionIndex);
|
|
OptionsObj.SetInt("depthOfField", GraphicsQuality.DOFIndex);
|
|
OptionsObj.SetInt("physicsLevel", GraphicsQuality.FlexIndex);
|
|
|
|
SetObject("options", OptionsObj);
|
|
}
|
|
}
|
|
|
|
function OneSecondLoop()
|
|
{
|
|
local byte TimeLeft;
|
|
local string TempString;
|
|
|
|
if(Manager != none && Manager.CurrentPopUp != none && bIsRevertCoundownActive && IsViewportInFocus())
|
|
{
|
|
if(TimeCount < ExpireTime)
|
|
{
|
|
TimeLeft = ExpireTime - TimeCount;
|
|
TempString = Repl(RevertPopupDescriptionString, "%x%", TimeLeft, true);
|
|
|
|
Manager.CurrentPopUp.UpdateDescritionText(TempString);
|
|
TimeCount++;
|
|
}
|
|
else
|
|
{
|
|
RevertSettings();
|
|
Manager.UnloadCurrentPopup();
|
|
}
|
|
}
|
|
}
|
|
|
|
/** Called when Apply is clicked in the menu */
|
|
function Apply()
|
|
{
|
|
local GFXSettings NewGFXSettings;
|
|
|
|
// These need to by bytes because UnrealScript doesn't support bools as out parameters
|
|
local byte UpdateSystemSettings;
|
|
local byte NeedsRestart;
|
|
local byte PerformanceWarningLevel;
|
|
local byte NeedsRevertCountdown;
|
|
|
|
// Get the current settings
|
|
GetCurrentGFXSettings(CurrentGFXSettings);
|
|
|
|
// Get the modified settings (if any)
|
|
// Initialize with current settings so that we don't have invalid values for INI Overrides
|
|
NewGFXSettings = CurrentGFXSettings;
|
|
GetModifiedGFXSettings(NewGFXSettings);
|
|
|
|
// Check to see if there where any udpates
|
|
UpdateSystemSettings = 0;
|
|
NeedsRestart = 0;
|
|
NeedsRevertCountdown = 0;
|
|
PerformanceWarningLevel=PerfWarning_None;
|
|
CheckForChangedSettings(NewGFXSettings, UpdateSystemSettings, NeedsRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
//Apply changes and show popup if there where any udpates.
|
|
if( UpdateSystemSettings != 0 )
|
|
{
|
|
// Apply changes
|
|
SetGFXSettings(NewGFXSettings);
|
|
|
|
// -----------------------------------------------------------------
|
|
// Popup to revert settings. Show popup only if you need to display
|
|
// a) Performance warning, or
|
|
// b) Restart warning, or
|
|
// c) Revert countdown
|
|
// -----------------------------------------------------------------
|
|
if( PerformanceWarningLevel > PerfWarning_None || NeedsRestart > 0 || NeedsRevertCountdown > 0 )
|
|
{
|
|
ShowRevertPopUp(PerformanceWarningLevel, NeedsRestart > 0, NeedsRevertCountdown > 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
function ResetValues()
|
|
{
|
|
InitializeResolution();
|
|
InitValues();
|
|
}
|
|
|
|
function RevertSettings()
|
|
{
|
|
//REVERT
|
|
SetGFXSettings(RevertedGFXSettings);
|
|
ResetValues();
|
|
bIsRevertCoundownActive = false;
|
|
}
|
|
|
|
function ShowRevertPopUp(byte PerfWarningLevel, bool bNeedsRestart, bool bNeedsRevertCountdown)
|
|
{
|
|
local string TempString;
|
|
local string PromptString;
|
|
|
|
bIsRevertCoundownActive = bNeedsRevertCountdown;
|
|
TimeCount = 0;
|
|
|
|
if( PerfWarningLevel > PerfWarning_None && bNeedsRestart )
|
|
{
|
|
//Popup text
|
|
PromptString = WarningPromptString;
|
|
RevertPopupDescriptionString = Repl(Repl(DoubleWarningString, "%x%", PerformanceDescString[PerfWarningLevel-1], true), "%y%", RestartDescString, true);
|
|
RevertPopupDescriptionString $= ". " $ ContinueString;
|
|
|
|
if( bNeedsRevertCountdown )
|
|
{
|
|
RevertPopupDescriptionString $= "\n\n" $ WillExpireString;
|
|
TempString = Repl(RevertPopupDescriptionString, "%x%", ExpireTime, true);
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc,PromptString, TempString, OKString, CancelString, OnRestartConfirm, OnSettingsRevert);
|
|
}
|
|
else
|
|
{
|
|
Manager.DelayedOpenPopup( EConfirmation,EDPPID_Misc, PromptString, RevertPopupDescriptionString, OKString, CancelString, OnRestartConfirm, OnSettingsRevert);
|
|
}
|
|
}
|
|
else if( PerfWarningLevel > PerfWarning_None )
|
|
{
|
|
//Popup text
|
|
PromptString = WarningPromptString;
|
|
RevertPopupDescriptionString = Repl(SingleWarningString, "%x%", PerformanceDescString[PerfWarningLevel-1], true);
|
|
RevertPopupDescriptionString $= ". " $ ContinueString;
|
|
|
|
if( bNeedsRevertCountdown )
|
|
{
|
|
RevertPopupDescriptionString $= "\n\n" $ WillExpireString;
|
|
TempString = Repl(RevertPopupDescriptionString, "%x%", ExpireTime, true);
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, TempString, OKString, CancelString, OnSettingsConfirm, OnSettingsRevert);
|
|
}
|
|
else
|
|
{
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, RevertPopupDescriptionString, OKString, CancelString, OnSettingsConfirm, OnSettingsRevert);
|
|
}
|
|
}
|
|
else if( bNeedsRestart )
|
|
{
|
|
//Popup text
|
|
PromptString = WarningPromptString;
|
|
RevertPopupDescriptionString = Repl(SingleWarningString, "%x%", RestartDescString, true);
|
|
RevertPopupDescriptionString $= ". " $ ContinueString;
|
|
|
|
if( bNeedsRevertCountdown )
|
|
{
|
|
RevertPopupDescriptionString $= "\n\n" $ WillExpireString;
|
|
TempString = Repl(RevertPopupDescriptionString, "%x%", ExpireTime, true);
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, TempString, OKString, CancelString, OnRestartConfirm, OnSettingsRevert);
|
|
}
|
|
else
|
|
{
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, RevertPopupDescriptionString, OKString, CancelString, OnRestartConfirm, OnSettingsRevert);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//Popup text
|
|
RevertPopupDescriptionString = KeepSettingsPromptString;
|
|
|
|
if( bNeedsRevertCountdown )
|
|
{
|
|
RevertPopupDescriptionString $= "\n\n" $ WillExpireString;
|
|
TempString = Repl(RevertPopupDescriptionString, "%x%", ExpireTime, true);
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, TempString, OKString, CancelString, OnSettingsConfirm, OnSettingsRevert);
|
|
}
|
|
else
|
|
{
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, RevertPopupDescriptionString, OKString, CancelString, OnSettingsConfirm, OnSettingsRevert);
|
|
}
|
|
}
|
|
}
|
|
|
|
function OnGraphicsQualitySet(int Index)
|
|
{
|
|
// Update advanced settings UI
|
|
UpdateAdvancedSettingsUI(Index);
|
|
}
|
|
|
|
/** Update the resolution list for the selected AspectRatio */
|
|
function UpdateResolutionList(SupportedAspectRatio InAspectRatio)
|
|
{
|
|
local int i;
|
|
local int CurrentResolutionIndex;
|
|
local GFxObject ResolutionSlot, DataProvider;
|
|
local GFxObject OptionsObj;
|
|
local string CurrentRes;
|
|
|
|
// Selected value to display in resolution list drop box.
|
|
// Current resolution if in list, otherwise the first entry in the list
|
|
CurrentResolutionIndex = 0;
|
|
|
|
// Resolution string for current resolution
|
|
CurrentRes = CurrentGFXSettings.Resolution.ResX $"x" $CurrentGFXSettings.Resolution.ResY;
|
|
|
|
// Update the resolution options based on given aspect ratio and the
|
|
// list of resolutions that are supported by the adapter
|
|
RefreshSupportedResolutions(InAspectRatio);
|
|
|
|
// Populate the data provider with above list
|
|
DataProvider = CreateArray();
|
|
for( i = 0; i < SupportedResolutionList.Length; i++ )
|
|
{
|
|
ResolutionSlot = CreateObject( "Object" );
|
|
ResolutionSlot.SetString("label", SupportedResolutionList[i]);
|
|
|
|
if ( CurrentRes == SupportedResolutionList[i] )
|
|
{
|
|
CurrentResolutionIndex = i;
|
|
}
|
|
DataProvider.SetElementObject(i, ResolutionSlot);
|
|
}
|
|
|
|
// Update UI
|
|
SetObject("resolutionOptions", DataProvider);
|
|
|
|
// Update selected resolution display
|
|
OptionsObj = GetObject("options");
|
|
OptionsObj.SetInt("resolution", CurrentResolutionIndex);
|
|
SetObject("options", OptionsObj);
|
|
}
|
|
|
|
/** Callback when aspect ratio is changed. Populate the resolution list with
|
|
supported resolutions for selected aspect ratio
|
|
*/
|
|
function OnAspectRatioSet(int Index)
|
|
{
|
|
UpdateResolutionList(AvailableAspectRatioList[Index]);
|
|
}
|
|
|
|
function OnAdvancedOptionChanged()
|
|
{
|
|
//`log("SET TO CUSTOM!");
|
|
}
|
|
|
|
//==============================================================
|
|
// Per setting callbacks
|
|
// NOTE: These can be used to specify settings update or application
|
|
// restart. Additionally you can also use logic here to warn about
|
|
// performance implications.
|
|
//==============================================================
|
|
function OnResolutionSettingChanged(ResolutionSetting OldSetting, ResolutionSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bNeedsRevertCountdown = bNeedsRevertCountdown | 1;
|
|
}
|
|
|
|
function OnVsyncSettingChanged(VSyncSetting OldSetting, VSyncSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnDisplaySettingChanged(DisplaySetting OldSetting, DisplaySetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bNeedsRevertCountdown = bNeedsRevertCountdown | 1;
|
|
}
|
|
|
|
function OnVariableFramerateSettingChanged(VariableFramerateSetting OldSetting, VariableFramerateSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnFilmGrainSettingChanged(FilmGrainSetting OldSetting, FilmGrainSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnEnvironmentDetailSettingChanged(EnvironmentDetailSetting OldSetting, EnvironmentDetailSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
}
|
|
|
|
function OnCharacterDetailSettingChanged(CharacterDetailSetting OldSetting, CharacterDetailSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnFXQualitySettingChanged(FXQualitySetting OldSetting, FXQualitySetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
}
|
|
|
|
function OnTextureResolutionSettingChanged(TextureResolutionSetting OldSetting, TextureResolutionSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnTextureFilteringSettingChanged(TextureFilterSetting OldSetting, TextureFilterSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
}
|
|
|
|
function OnShadowQualitySettingChanged(ShadowQualitySetting OldSetting, ShadowQualitySetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
}
|
|
|
|
function OnReflectionSettingChanged(RealtimeReflectionsSetting OldSetting, RealtimeReflectionsSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
|
|
// Caution about possible performance drop
|
|
if( !OldSetting.bAllowScreenSpaceReflections &&
|
|
NewSetting.bAllowScreenSpaceReflections )
|
|
{
|
|
PerformanceWarningLevel = Max(PerformanceWarningLevel, PerfWarning_Normal);
|
|
}
|
|
}
|
|
|
|
function OnAntiAliasingSettingChanged(AntiAliasingSetting OldSetting, AntiAliasingSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnBloomSettingChanged(BloomSetting OldSetting, BloomSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnMotionBlurSettingChanged(MotionBlurSetting OldSetting, MotionBlurSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnAmbientOcclusionSettingChanged(AmbientOcclusionSetting OldSetting, AmbientOcclusionSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
|
|
// Caution about possible performance drop
|
|
if( NewSetting.HBAO )
|
|
{
|
|
PerformanceWarningLevel = Max(PerformanceWarningLevel, PerfWarning_Normal);
|
|
}
|
|
}
|
|
|
|
function OnDOFSettingChanged(DOFSetting OldSetting, DOFSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
|
|
function OnVolumetricLightingSettingChanged(VolumetricLightingSetting OldSetting, VolumetricLightingSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
}
|
|
|
|
function OnLensFlareSettingChanged(LensFlareSetting OldSetting, LensFlareSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
}
|
|
|
|
function OnLightShaftsSettingChanged(LightShaftsSetting OldSetting, LightShaftsSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
}
|
|
|
|
function OnFlexSettingChanged(FlexSetting OldSetting, FlexSetting NewSetting, out byte bUpdateSystemSettings, out byte bRequiresRestart, out byte PerformanceWarningLevel, out byte bNeedsRevertCountdown)
|
|
{
|
|
bUpdateSystemSettings = bUpdateSystemSettings | 1;
|
|
bRequiresRestart = bRequiresRestart | 1;
|
|
|
|
// Caution about possible performance drop
|
|
if( NewSetting.FlexLevel > OldSetting.FlexLevel &&
|
|
NewSetting.FlexLevel == 1 )
|
|
{
|
|
PerformanceWarningLevel = Max(PerformanceWarningLevel, PerfWarning_Normal);
|
|
}
|
|
|
|
if( NewSetting.FlexLevel > OldSetting.FlexLevel &&
|
|
NewSetting.FlexLevel == 2 )
|
|
{
|
|
PerformanceWarningLevel = Max(PerformanceWarningLevel, PerfWarning_Severe);
|
|
}
|
|
}
|
|
|
|
//==============================================================
|
|
// @name Popup delegates
|
|
//==============================================================
|
|
|
|
function OnSettingsConfirm()
|
|
{
|
|
bIsRevertCoundownActive = false;
|
|
}
|
|
|
|
function OnRestartConfirm()
|
|
{
|
|
bIsRevertCoundownActive = false;
|
|
ConsoleCommand("RESTART");
|
|
}
|
|
|
|
function OnSettingsRevert()
|
|
{
|
|
RevertSettings();
|
|
}
|
|
|
|
function OnSaveConfirm()
|
|
{
|
|
// Save unsaved changes
|
|
SetGFXSettings(UnsavedGFXSettings);
|
|
|
|
// Restart game if required
|
|
if( UnsavedPendingRestart )
|
|
{
|
|
ConsoleCommand("RESTART");
|
|
}
|
|
|
|
Manager.OpenMenu( UI_OptionsSelection );
|
|
}
|
|
|
|
function OnSaveCancel()
|
|
{
|
|
ResetValues();
|
|
Manager.OpenMenu( UI_OptionsSelection );
|
|
}
|
|
|
|
/*********************************************************************************************
|
|
* @name ActionScript Callbacks
|
|
********************************************************************************************* */
|
|
function Callback_CloseMenu()
|
|
{
|
|
local GFXSettings NewGFXSettings;
|
|
local string PromptString;
|
|
local string DescriptionString;
|
|
|
|
// These need to by bytes because UnrealScript doesn't support bools as out parameters
|
|
local byte UpdateSystemSettings;
|
|
local byte NeedsRestart;
|
|
local byte PerformanceWarningLevel;
|
|
local byte NeedsRevertCountdown;
|
|
|
|
// Get the current settings
|
|
GetCurrentGFXSettings(CurrentGFXSettings);
|
|
|
|
// Get the modified settings (if any)
|
|
// Initialize with current settings so that we don't have invalid values for INI Overrides
|
|
NewGFXSettings = CurrentGFXSettings;
|
|
GetModifiedGFXSettings(NewGFXSettings);
|
|
|
|
// Check to see if there where any udpates
|
|
UpdateSystemSettings = 0;
|
|
NeedsRestart = 0;
|
|
NeedsRevertCountdown = 0;
|
|
PerformanceWarningLevel=PerfWarning_None;
|
|
CheckForChangedSettings(NewGFXSettings, UpdateSystemSettings, NeedsRestart, PerformanceWarningLevel, NeedsRevertCountdown);
|
|
|
|
//Apply changes and show popup if there where any udpates.
|
|
if( UpdateSystemSettings != 0 )
|
|
{
|
|
// Cache the new but unsaved settings
|
|
UnsavedGFXSettings = NewGFXSettings;
|
|
UnsavedPendingRestart = NeedsRestart > 0;
|
|
|
|
|
|
if( PerformanceWarningLevel > PerfWarning_None && NeedsRestart > 0 )
|
|
{
|
|
//Popup text
|
|
PromptString = WarningPromptString;
|
|
DescriptionString = UnsavedChangesString $ ". ";
|
|
DescriptionString $= Repl(Repl(DoubleWarningString, "%x%", PerformanceDescString[PerformanceWarningLevel-1], true), "%y%", RestartDescString, true) $ ". ";
|
|
DescriptionString $= "\n\n" $ SaveChangesString;
|
|
}
|
|
else if( PerformanceWarningLevel > PerfWarning_None )
|
|
{
|
|
//Popup text
|
|
PromptString = WarningPromptString;
|
|
DescriptionString = UnsavedChangesString $ ". ";
|
|
DescriptionString $= Repl(SingleWarningString, "%x%", PerformanceDescString[PerformanceWarningLevel-1], true) $ ". ";
|
|
DescriptionString $= "\n\n" $ SaveChangesString;
|
|
}
|
|
else if( NeedsRestart > 0 )
|
|
{
|
|
//Popup text
|
|
PromptString = WarningPromptString;
|
|
DescriptionString = UnsavedChangesString $ ". ";
|
|
DescriptionString $= Repl(SingleWarningString, "%x%", RestartDescString, true) $ ". ";
|
|
DescriptionString $= "\n\n" $ SaveChangesString;
|
|
}
|
|
else
|
|
{
|
|
//Popup text
|
|
PromptString = "";
|
|
DescriptionString = UnsavedChangesString $ ". ";
|
|
DescriptionString $= "\n\n" $ SaveChangesString;
|
|
}
|
|
|
|
Manager.DelayedOpenPopup( EConfirmation, EDPPID_Misc, PromptString, DescriptionString, Class'KFCommon_LocalizedStrings'.default.YesString, Class'KFCommon_LocalizedStrings'.default.NoString, OnSaveConfirm, OnSaveCancel);
|
|
}
|
|
else
|
|
{
|
|
ResetValues();
|
|
Manager.OpenMenu( UI_OptionsSelection );
|
|
}
|
|
}
|
|
|
|
function Callback_FleXOptionChange(bool bShowPopUp)
|
|
{
|
|
if(bShowPopUp)
|
|
{
|
|
Manager.DelayedOpenPopup(ENotification, EDPPID_Misc, WarningPromptString, FlexPopUpString, class'KFCommon_LocalizedStrings'.default.OKString);
|
|
}
|
|
}
|
|
|
|
function Callback_ApplyVideo()
|
|
{
|
|
Apply();
|
|
}
|
|
|
|
function Callback_CancelVideo()
|
|
{
|
|
ResetValues();
|
|
Manager.OpenMenu( UI_OptionsSelection );
|
|
}
|
|
|
|
function Callback_ResetDefaultVideo()
|
|
{
|
|
local GFxObject OptionsObj;
|
|
local int GraphicsQualityIndex;
|
|
local float FilmGrainSliderValue;
|
|
local FilmGrainSetting DefultImageGrain;
|
|
|
|
// Retrieve the current options
|
|
OptionsObj = GetObject("options");
|
|
|
|
// Set graphics preset.
|
|
// @TODO: Query from appcompat system. Defaulting to high for now.
|
|
GraphicsQualityIndex = GetGraphicsQualityFromCompat(GetCompatLevel());
|
|
OptionsObj.SetInt("graphics", GraphicsQualityIndex);
|
|
|
|
// Film grain scale = 1.0
|
|
DefultImageGrain.FilmGrainScale = 1.f;
|
|
FilmGrainSliderValue = GetFilmGrainSliderValue(DefultImageGrain, FilmGrainMinMaxPreset);
|
|
OptionsObj.SetFloat("filmGrain", FilmGrainSliderValue);
|
|
|
|
// Vsync off
|
|
OptionsObj.SetInt("vSync", 0);
|
|
|
|
// Variable framerate off
|
|
OptionsObj.SetBool("variableFrameRate", false);
|
|
|
|
// Update options
|
|
SetObject("options", OptionsObj);
|
|
|
|
// Update the advanced settings options
|
|
OnGraphicsQualitySet(GraphicsQualityIndex);
|
|
}
|
|
|
|
function Callback_OpenGamma()
|
|
{
|
|
Manager.SetVariableBool("bStartUpGamma", false); // Let the manager know if we are gamma for start up so we can block backing out of the popup - HSL
|
|
Manager.DelayedOpenPopup(EGamma, EDPPID_Gamma, "", AdjustGammaDescription, ResetGammaString, SetGammaString);
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
ExpireTime=30
|
|
|
|
//=================================================================================================
|
|
// Preset values
|
|
//=================================================================================================
|
|
|
|
// Graphics Quality (Basic Setting)
|
|
GraphicsQualityPresets(0)={(EnvironmentDetailIndex=0,CharacterDetailIndex=0,FXQualityIndex=0,TextureResolutionIndex=0,TextureFilteringIndex=0,ShadowQualityIndex=0,RealtimeReflectionsIndex=0,LightShafts=False,VolumetricLighting=False,LensFlares=False,AntiAliasingIndex=0,BloomIndex=0,MotionBlurIndex=0,AmbientOcclusionIndex=0,DOFIndex=0,FlexIndex=0)}
|
|
GraphicsQualityPresets(1)={(EnvironmentDetailIndex=1,CharacterDetailIndex=0,FXQualityIndex=1,TextureResolutionIndex=1,TextureFilteringIndex=1,ShadowQualityIndex=1,RealtimeReflectionsIndex=0,LightShafts=False,VolumetricLighting=False,LensFlares=False,AntiAliasingIndex=1,BloomIndex=1,MotionBlurIndex=0,AmbientOcclusionIndex=0,DOFIndex=0,FlexIndex=0)}
|
|
GraphicsQualityPresets(2)={(EnvironmentDetailIndex=2,CharacterDetailIndex=1,FXQualityIndex=2,TextureResolutionIndex=2,TextureFilteringIndex=2,ShadowQualityIndex=2,RealtimeReflectionsIndex=0,LightShafts=True,VolumetricLighting=True,LensFlares=True,AntiAliasingIndex=1,BloomIndex=2,MotionBlurIndex=0,AmbientOcclusionIndex=1,DOFIndex=1,FlexIndex=0)}
|
|
GraphicsQualityPresets(3)={(EnvironmentDetailIndex=3,CharacterDetailIndex=2,FXQualityIndex=3,TextureResolutionIndex=3,TextureFilteringIndex=3,ShadowQualityIndex=3,RealtimeReflectionsIndex=1,LightShafts=True,VolumetricLighting=True,LensFlares=True,AntiAliasingIndex=1,BloomIndex=2,MotionBlurIndex=1,AmbientOcclusionIndex=2,DOFIndex=1,FlexIndex=0)}
|
|
GraphicsQualityPresets(4)={(EnvironmentDetailIndex=2,CharacterDetailIndex=1,FXQualityIndex=2,TextureResolutionIndex=2,TextureFilteringIndex=2,ShadowQualityIndex=2,RealtimeReflectionsIndex=0,LightShafts=True,VolumetricLighting=True,LensFlares=True,AntiAliasingIndex=1,BloomIndex=2,MotionBlurIndex=0,AmbientOcclusionIndex=1,DOFIndex=1,FlexIndex=1)}
|
|
GraphicsQualityPresets(5)={(EnvironmentDetailIndex=2,CharacterDetailIndex=1,FXQualityIndex=2,TextureResolutionIndex=2,TextureFilteringIndex=2,ShadowQualityIndex=2,RealtimeReflectionsIndex=0,LightShafts=True,VolumetricLighting=True,LensFlares=True,AntiAliasingIndex=1,BloomIndex=2,MotionBlurIndex=0,AmbientOcclusionIndex=1,DOFIndex=1,FlexIndex=2)}
|
|
GraphicsQualityPresets(6)={(EnvironmentDetailIndex=3,CharacterDetailIndex=2,FXQualityIndex=3,TextureResolutionIndex=3,TextureFilteringIndex=3,ShadowQualityIndex=3,RealtimeReflectionsIndex=1,LightShafts=True,VolumetricLighting=True,LensFlares=True,AntiAliasingIndex=1,BloomIndex=2,MotionBlurIndex=1,AmbientOcclusionIndex=2,DOFIndex=1,FlexIndex=2)}
|
|
|
|
// Display
|
|
DisplayPresets(0)={(Fullscreen=False, BorderlessWindow=False)}
|
|
DisplayPresets(1)={(Fullscreen=False, BorderlessWindow=True)}
|
|
DisplayPresets(2)={(Fullscreen=True, BorderlessWindow=False)}
|
|
|
|
//VSync
|
|
VSyncPresets(0)={(VSync=False)}
|
|
VSyncPresets(1)={(VSync=True)}
|
|
//VSyncPresets(2)={(VSync=True)}
|
|
|
|
// Variable Framerate
|
|
VariableFrameratePresets(0)={(VariableFramerate=False)}
|
|
VariableFrameratePresets(1)={(VariableFramerate=True)}
|
|
|
|
// Film Grain
|
|
FilmGrainMinMaxPreset(`MIN)={(FilmGrainScale=0.5)}
|
|
FilmGrainMinMaxPreset(`MAX)={(FilmGrainScale=37.5)}
|
|
|
|
// Environment Detail
|
|
EnvironmentDetailPresets(0)={(DetailMode=0, DestructionLifetimeScale=0.25, bDisableCanBecomeDynamicWakeup=True, MakeDynamicCollisionThreshold=200, AllowLightFunctions=False)}
|
|
EnvironmentDetailPresets(1)={(DetailMode=1, DestructionLifetimeScale=0.5, bDisableCanBecomeDynamicWakeup=False, MakeDynamicCollisionThreshold=200, AllowLightFunctions=False)}
|
|
EnvironmentDetailPresets(2)={(DetailMode=2, DestructionLifetimeScale=1.0, bDisableCanBecomeDynamicWakeup=False, MakeDynamicCollisionThreshold=150, AllowLightFunctions=True)}
|
|
EnvironmentDetailPresets(3)={(DetailMode=2, DestructionLifetimeScale=1.2, bDisableCanBecomeDynamicWakeup=False, MakeDynamicCollisionThreshold=150, AllowLightFunctions=True)}
|
|
|
|
// Shadows
|
|
ShadowQualityPresets(0)={(bAllowWholeSceneDominantShadows=FALSE, bOverrideMapWholeSceneDominantShadowSetting=FALSE, bAllowDynamicShadows=TRUE, bAllowPerObjectShadows=FALSE, MaxWholeSceneDominantShadowResolution=1204, MaxShadowResolution=1024, ShadowFadeResolution=256, MinShadowResolution=128, ShadowTexelsPerPixel=0.5, GlobalShadowDistanceScale=0.75, AllowForegroundPreshadows=False)}
|
|
ShadowQualityPresets(1)={(bAllowWholeSceneDominantShadows=TRUE, bOverrideMapWholeSceneDominantShadowSetting=FALSE, bAllowDynamicShadows=TRUE, bAllowPerObjectShadows=TRUE, MaxWholeSceneDominantShadowResolution=1204, MaxShadowResolution=1024, ShadowFadeResolution=128, MinShadowResolution=64, ShadowTexelsPerPixel=1.0, GlobalShadowDistanceScale=0.75, AllowForegroundPreshadows=False)}
|
|
ShadowQualityPresets(2)={(bAllowWholeSceneDominantShadows=TRUE, bOverrideMapWholeSceneDominantShadowSetting=FALSE, bAllowDynamicShadows=TRUE, bAllowPerObjectShadows=TRUE, MaxWholeSceneDominantShadowResolution=1280, MaxShadowResolution=1024, ShadowFadeResolution=128, MinShadowResolution=64, ShadowTexelsPerPixel=1.3, GlobalShadowDistanceScale=1.0, AllowForegroundPreshadows=True)}
|
|
ShadowQualityPresets(3)={(bAllowWholeSceneDominantShadows=TRUE, bOverrideMapWholeSceneDominantShadowSetting=TRUE, bAllowDynamicShadows=TRUE, bAllowPerObjectShadows=TRUE, MaxWholeSceneDominantShadowResolution=2048, MaxShadowResolution=1536, ShadowFadeResolution=64, MinShadowResolution=32, ShadowTexelsPerPixel=2.0, GlobalShadowDistanceScale=1.5, AllowForegroundPreshadows=True)}
|
|
|
|
// FX
|
|
FXQualityPresets(0)={(ParticleLODBias=1, DistanceFogQuality=0, Distortion=False, FilteredDistortion=False, DropParticleDistortion=True, EmitterPoolScale=0.25, ShellEjectLifetime=2, AllowExplosionLights=False, AllowSprayActorLights=False, AllowPilotLights=False, AllowFootstepSounds=False, AllowRagdollAndGoreOnDeadBodies=False, MaxImpactEffectDecals=8, MaxExplosionDecals=8, GoreFXLifetimeMultiplier=0.5, MaxBloodEffects=12, MaxGoreEffects=8, AllowSecondaryBloodEffects=False, AllowBloodSplatterDecals=False,MaxPersistentSplatsPerFrame=25)}
|
|
FXQualityPresets(1)={(ParticleLODBias=0, DistanceFogQuality=0, Distortion=False, FilteredDistortion=False, DropParticleDistortion=True, EmitterPoolScale=0.5, ShellEjectLifetime=5, AllowExplosionLights=True, AllowSprayActorLights=False, AllowPilotLights=True, AllowFootstepSounds=True, AllowRagdollAndGoreOnDeadBodies=True, MaxImpactEffectDecals=15, MaxExplosionDecals=12, GoreFXLifetimeMultiplier=0.75, MaxBloodEffects=15, MaxGoreEffects=8, AllowSecondaryBloodEffects=False, AllowBloodSplatterDecals=False, MaxPersistentSplatsPerFrame=50)}
|
|
FXQualityPresets(2)={(ParticleLODBias=0, DistanceFogQuality=1, Distortion=True, FilteredDistortion=True, DropParticleDistortion=False, EmitterPoolScale=1.0,ShellEjectLifetime=10, AllowExplosionLights=True, AllowSprayActorLights=True, AllowPilotLights=True, AllowFootstepSounds=True, AllowRagdollAndGoreOnDeadBodies=True, MaxImpactEffectDecals=20, MaxExplosionDecals=15, GoreFXLifetimeMultiplier=1.0, MaxBloodEffects=25, MaxGoreEffects=10, AllowSecondaryBloodEffects=True, AllowBloodSplatterDecals=True, MaxPersistentSplatsPerFrame=75)}
|
|
FXQualityPresets(3)={(ParticleLODBias=0, DistanceFogQuality=1, Distortion=True, FilteredDistortion=True, DropParticleDistortion=False, EmitterPoolScale=2.0,ShellEjectLifetime=20, AllowExplosionLights=True, AllowSprayActorLights=True, AllowPilotLights=True, AllowFootstepSounds=True, AllowRagdollAndGoreOnDeadBodies=True, MaxImpactEffectDecals=40, MaxExplosionDecals=20, GoreFXLifetimeMultiplier=1.2, MaxBloodEffects=40, MaxGoreEffects=15, AllowSecondaryBloodEffects=True, AllowBloodSplatterDecals=True, MaxPersistentSplatsPerFrame=100)}
|
|
|
|
// Realtime Reflections
|
|
RealtimeReflectionsPresets(0)={(bAllowScreenSpaceReflections=False)}
|
|
RealtimeReflectionsPresets(1)={(bAllowScreenSpaceReflections=True)}
|
|
|
|
// Character Detail
|
|
CharacterDetailPresets(0)={(SkeletalMeshLODBias=1, AllowSubsurfaceScattering=False, MaxBodyWoundDecals=2, MaxDeadBodies=8, KinematicUpdateDistFactorScale=3.0, ShouldCorpseCollideWithDead=False, ShouldCorpseCollideWithLiving=False, ShouldCorpseCollideWithDeadAfterSleep=False, bAllowPhysics=false)}
|
|
CharacterDetailPresets(1)={(SkeletalMeshLODBias=0, AllowSubsurfaceScattering=False, MaxBodyWoundDecals=5, MaxDeadBodies=12, KinematicUpdateDistFactorScale=1.3, ShouldCorpseCollideWithDead=True, ShouldCorpseCollideWithLiving=True, ShouldCorpseCollideWithDeadAfterSleep=False, bAllowPhysics=true)}
|
|
CharacterDetailPresets(2)={(SkeletalMeshLODBias=0, AllowSubsurfaceScattering=True, MaxBodyWoundDecals=5, MaxDeadBodies=15, KinematicUpdateDistFactorScale=1.0, ShouldCorpseCollideWithDead=True, ShouldCorpseCollideWithLiving=True, ShouldCorpseCollideWithDeadAfterSleep=True, bAllowPhysics=true)}
|
|
|
|
// Light Shafts
|
|
LightShaftsPresets(0)={(bAllowLightShafts=False)}
|
|
LightShaftsPresets(1)={(bAllowLightShafts=True)}
|
|
|
|
// Volumetric Lighting
|
|
VolumetricLightingPresets(0)={(bAllowLightCones=False)}
|
|
VolumetricLightingPresets(1)={(bAllowLightCones=True)}
|
|
|
|
// Lens Flare
|
|
LensFlarePresets(0)={(bAllowLensFlares=False)}
|
|
LensFlarePresets(1)={(bAllowLensFlares=True)}
|
|
|
|
// Texture Resolution
|
|
TextureResolutionPresets(0)={(UIBias=0, ShadowmapBias=1, CharacterBias=3, Weapon1stBias=1, Weapon3rdBias=1, EnvironmentBias=2, FXBias=1)}
|
|
TextureResolutionPresets(1)={(UIBias=0, ShadowmapBias=0, CharacterBias=2, Weapon1stBias=1, Weapon3rdBias=1, EnvironmentBias=2, FXBias=1)}
|
|
TextureResolutionPresets(2)={(UIBias=0, ShadowmapBias=0, CharacterBias=1, Weapon1stBias=0, Weapon3rdBias=0, EnvironmentBias=1, FXBias=0)}
|
|
TextureResolutionPresets(3)={(UIBias=0, ShadowmapBias=0, CharacterBias=0, Weapon1stBias=0, Weapon3rdBias=0, EnvironmentBias=0, FXBias=0)}
|
|
|
|
// Texture Filtering
|
|
TextureFilterPresets(0)={(MinMagFilter=Linear, MipFilter=Point, MaxAnisotropy=1)}
|
|
TextureFilterPresets(1)={(MinMagFilter=Linear, MipFilter=Linear, MaxAnisotropy=1)}
|
|
TextureFilterPresets(2)={(MinMagFilter=Aniso, MipFilter=Linear, MaxAnisotropy=4)}
|
|
TextureFilterPresets(3)={(MinMagFilter=Aniso, MipFilter=Linear, MaxAnisotropy=16)}
|
|
|
|
// Bloom
|
|
BloomPresets(0)={(Bloom=False, BloomQuality=0)}
|
|
BloomPresets(1)={(Bloom=True, BloomQuality=1)}
|
|
BloomPresets(2)={(Bloom=True, BloomQuality=2)}
|
|
|
|
// Motion Blur
|
|
MotionBlurPresets(0)={(MotionBlur=False, MotionBlurQuality=0)}
|
|
MotionBlurPresets(1)={(MotionBlur=True, MotionBlurQuality=1)}
|
|
|
|
// Anti Aliasing
|
|
AntiAliasingPresets(0)={(PostProcessAA=False)}
|
|
AntiAliasingPresets(1)={(PostProcessAA=True)}
|
|
|
|
// Ambient Occlusion
|
|
AmbientOcclusionPresets(0)={(AmbientOcclusion=False, HBAO=False)}
|
|
AmbientOcclusionPresets(1)={(AmbientOcclusion=True, HBAO=False)}
|
|
AmbientOcclusionPresets(2)={(AmbientOcclusion=True, HBAO=True)}
|
|
|
|
// Depth Of Field
|
|
DOFPresets(0)={(DepthOfField=False, DepthOfFieldQuality=0)}
|
|
DOFPresets(1)={(DepthOfField=True, DepthOfFieldQuality=1)}
|
|
DOFPresets(2)={(DepthOfField=True, DepthOfFieldQuality=2)}
|
|
DOFPresets(3)={(DepthOfField=True, DepthOfFieldQuality=3)}
|
|
|
|
// Flex
|
|
FlexPresets(0)={(FlexLevel=0)}
|
|
FlexPresets(1)={(FlexLevel=1)}
|
|
FlexPresets(2)={(FlexLevel=2)}
|
|
}
|