RealtimeStyleTransferRuntime/Source/LyraGame/Settings/CustomSettings/LyraSettingValueDiscrete_Ov...

102 lines
3.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraSettingValueDiscrete_OverallQuality.h"
#include "GameFramework/GameUserSettings.h"
#include "Engine/Engine.h"
#include "Settings/LyraSettingsLocal.h"
#define LOCTEXT_NAMESPACE "LyraSettings"
ULyraSettingValueDiscrete_OverallQuality::ULyraSettingValueDiscrete_OverallQuality()
{
}
void ULyraSettingValueDiscrete_OverallQuality::OnInitialized()
{
Super::OnInitialized();
ULyraSettingsLocal* UserSettings = ULyraSettingsLocal::Get();
const int32 MaxQualityLevel = UserSettings->GetMaxSupportedOverallQualityLevel();
auto AddOptionIfPossible = [&](int Index, FText&& Value) { if ((MaxQualityLevel < 0) || (Index <= MaxQualityLevel)) { Options.Add(Value); }};
AddOptionIfPossible(0, LOCTEXT("VideoQualityOverall_Low", "Low"));
AddOptionIfPossible(1, LOCTEXT("VideoQualityOverall_Medium", "Medium"));
AddOptionIfPossible(2, LOCTEXT("VideoQualityOverall_High", "High"));
AddOptionIfPossible(3, LOCTEXT("VideoQualityOverall_Epic", "Epic"));
OptionsWithCustom = Options;
OptionsWithCustom.Add(LOCTEXT("VideoQualityOverall_Custom", "Custom"));
const int32 LowestQualityWithFrameRateLimit = UserSettings->GetLowestQualityWithFrameRateLimit();
if (Options.IsValidIndex(LowestQualityWithFrameRateLimit))
{
SetWarningRichText(FText::Format(LOCTEXT("OverallQuality_Mobile_ImpactsFramerate", "<strong>Note: Changing the Quality setting to {0} or higher might limit your framerate.</>"), Options[LowestQualityWithFrameRateLimit]));
}
}
void ULyraSettingValueDiscrete_OverallQuality::StoreInitial()
{
}
void ULyraSettingValueDiscrete_OverallQuality::ResetToDefault()
{
}
void ULyraSettingValueDiscrete_OverallQuality::RestoreToInitial()
{
}
void ULyraSettingValueDiscrete_OverallQuality::SetDiscreteOptionByIndex(int32 Index)
{
UGameUserSettings* UserSettings = CastChecked<UGameUserSettings>(GEngine->GetGameUserSettings());
if (Index == GetCustomOptionIndex())
{
// Leave everything as is we're in a custom setup.
}
else
{
// Low / Medium / High / Epic
UserSettings->SetOverallScalabilityLevel(Index);
}
NotifySettingChanged(EGameSettingChangeReason::Change);
}
int32 ULyraSettingValueDiscrete_OverallQuality::GetDiscreteOptionIndex() const
{
const int32 OverallQualityLevel = GetOverallQualityLevel();
if (OverallQualityLevel == INDEX_NONE)
{
return GetCustomOptionIndex();
}
return OverallQualityLevel;
}
TArray<FText> ULyraSettingValueDiscrete_OverallQuality::GetDiscreteOptions() const
{
const int32 OverallQualityLevel = GetOverallQualityLevel();
if (OverallQualityLevel == INDEX_NONE)
{
return OptionsWithCustom;
}
else
{
return Options;
}
}
int32 ULyraSettingValueDiscrete_OverallQuality::GetCustomOptionIndex() const
{
return OptionsWithCustom.Num() - 1;
}
int32 ULyraSettingValueDiscrete_OverallQuality::GetOverallQualityLevel() const
{
const UGameUserSettings* UserSettings = CastChecked<const UGameUserSettings>(GEngine->GetGameUserSettings());
return UserSettings->GetOverallScalabilityLevel();
}
#undef LOCTEXT_NAMESPACE