RealtimeStyleTransferRuntime/Source/LyraGame/Settings/CustomSettings/LyraSettingValueDiscrete_Pe...

138 lines
4.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraSettingValueDiscrete_PerfStat.h"
#include "CommonUIVisibilitySubsystem.h"
#include "Containers/Set.h"
#include "Containers/UnrealString.h"
#include "GameSettingFilterState.h"
#include "GameplayTagContainer.h"
#include "Internationalization/Internationalization.h"
#include "Performance/LyraPerformanceSettings.h"
#include "Settings/LyraSettingsLocal.h"
#include "Templates/SharedPointer.h"
#include "Templates/UnrealTemplate.h"
#include "UObject/NameTypes.h"
class ULocalPlayer;
#define LOCTEXT_NAMESPACE "LyraSettings"
//////////////////////////////////////////////////////////////////////
class FGameSettingEditCondition_PerfStatAllowed : public FGameSettingEditCondition
{
public:
static TSharedRef<FGameSettingEditCondition_PerfStatAllowed> Get(ELyraDisplayablePerformanceStat Stat)
{
return MakeShared<FGameSettingEditCondition_PerfStatAllowed>(Stat);
}
FGameSettingEditCondition_PerfStatAllowed(ELyraDisplayablePerformanceStat Stat)
: AssociatedStat(Stat)
{
}
//~FGameSettingEditCondition interface
virtual void GatherEditState(const ULocalPlayer* InLocalPlayer, FGameSettingEditableState& InOutEditState) const override
{
const FGameplayTagContainer& VisibilityTags = UCommonUIVisibilitySubsystem::GetChecked(InLocalPlayer)->GetVisibilityTags();
bool bCanShowStat = false;
for (const FLyraPerformanceStatGroup& Group : GetDefault<ULyraPerformanceSettings>()->UserFacingPerformanceStats) //@TODO: Move this stuff to per-platform instead of doing vis queries too?
{
if (Group.AllowedStats.Contains(AssociatedStat))
{
const bool bShowGroup = (Group.VisibilityQuery.IsEmpty() || Group.VisibilityQuery.Matches(VisibilityTags));
if (bShowGroup)
{
bCanShowStat = true;
break;
}
}
}
if (!bCanShowStat)
{
InOutEditState.Hide(TEXT("Stat is not listed in ULyraPerformanceSettings or is suppressed by current platform traits"));
}
}
//~End of FGameSettingEditCondition interface
private:
ELyraDisplayablePerformanceStat AssociatedStat;
};
//////////////////////////////////////////////////////////////////////
ULyraSettingValueDiscrete_PerfStat::ULyraSettingValueDiscrete_PerfStat()
{
}
void ULyraSettingValueDiscrete_PerfStat::SetStat(ELyraDisplayablePerformanceStat InStat)
{
StatToDisplay = InStat;
SetDevName(FName(*FString::Printf(TEXT("PerfStat_%d"), (int32)StatToDisplay)));
AddEditCondition(FGameSettingEditCondition_PerfStatAllowed::Get(StatToDisplay));
}
void ULyraSettingValueDiscrete_PerfStat::AddMode(FText&& Label, ELyraStatDisplayMode Mode)
{
Options.Emplace(MoveTemp(Label));
DisplayModes.Add(Mode);
}
void ULyraSettingValueDiscrete_PerfStat::OnInitialized()
{
Super::OnInitialized();
AddMode(LOCTEXT("PerfStatDisplayMode_None", "None"), ELyraStatDisplayMode::Hidden);
AddMode(LOCTEXT("PerfStatDisplayMode_TextOnly", "Text Only"), ELyraStatDisplayMode::TextOnly);
AddMode(LOCTEXT("PerfStatDisplayMode_GraphOnly", "Graph Only"), ELyraStatDisplayMode::GraphOnly);
AddMode(LOCTEXT("PerfStatDisplayMode_TextAndGraph", "Text and Graph"), ELyraStatDisplayMode::TextAndGraph);
}
void ULyraSettingValueDiscrete_PerfStat::StoreInitial()
{
const ULyraSettingsLocal* Settings = ULyraSettingsLocal::Get();
InitialMode = Settings->GetPerfStatDisplayState(StatToDisplay);
}
void ULyraSettingValueDiscrete_PerfStat::ResetToDefault()
{
ULyraSettingsLocal* Settings = ULyraSettingsLocal::Get();
Settings->SetPerfStatDisplayState(StatToDisplay, ELyraStatDisplayMode::Hidden);
NotifySettingChanged(EGameSettingChangeReason::ResetToDefault);
}
void ULyraSettingValueDiscrete_PerfStat::RestoreToInitial()
{
ULyraSettingsLocal* Settings = ULyraSettingsLocal::Get();
Settings->SetPerfStatDisplayState(StatToDisplay, InitialMode);
NotifySettingChanged(EGameSettingChangeReason::RestoreToInitial);
}
void ULyraSettingValueDiscrete_PerfStat::SetDiscreteOptionByIndex(int32 Index)
{
if (DisplayModes.IsValidIndex(Index))
{
const ELyraStatDisplayMode DisplayMode = DisplayModes[Index];
ULyraSettingsLocal* Settings = ULyraSettingsLocal::Get();
Settings->SetPerfStatDisplayState(StatToDisplay, DisplayMode);
}
NotifySettingChanged(EGameSettingChangeReason::Change);
}
int32 ULyraSettingValueDiscrete_PerfStat::GetDiscreteOptionIndex() const
{
const ULyraSettingsLocal* Settings = ULyraSettingsLocal::Get();
return DisplayModes.Find(Settings->GetPerfStatDisplayState(StatToDisplay));
}
TArray<FText> ULyraSettingValueDiscrete_PerfStat::GetDiscreteOptions() const
{
return Options;
}
#undef LOCTEXT_NAMESPACE