2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
# include "LyraSettingValueDiscrete_PerfStat.h"
2022-09-13 07:18:28 +00:00
# include "CommonUIVisibilitySubsystem.h"
# include "Containers/Set.h"
# include "Containers/UnrealString.h"
2022-05-23 18:41:30 +00:00
# include "GameSettingFilterState.h"
2022-09-13 07:18:28 +00:00
# include "GameplayTagContainer.h"
# include "Internationalization/Internationalization.h"
2022-05-23 18:41:30 +00:00
# include "Performance/LyraPerformanceSettings.h"
2022-09-13 07:18:28 +00:00
# include "Settings/LyraSettingsLocal.h"
# include "Templates/SharedPointer.h"
# include "Templates/UnrealTemplate.h"
# include "UObject/NameTypes.h"
class ULocalPlayer ;
2022-05-23 18:41:30 +00:00
# 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