2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
# include "GameSettingRegistry.h"
# include "GameSetting.h"
# include "GameSettingCollection.h"
# include "GameSettingAction.h"
# include <IAnalyticsProviderET.h>
# include "Stats/Stats.h"
# define LOCTEXT_NAMESPACE "GameSetting"
//--------------------------------------
// UGameSettingRegistry
//--------------------------------------
UGameSettingRegistry : : UGameSettingRegistry ( )
{
}
void UGameSettingRegistry : : Initialize ( ULocalPlayer * InLocalPlayer )
{
OwningLocalPlayer = InLocalPlayer ;
OnInitialize ( InLocalPlayer ) ;
//UGameFeaturesSubsystem
}
void UGameSettingRegistry : : Regenerate ( )
{
for ( UGameSetting * Setting : RegisteredSettings )
{
Setting - > MarkAsGarbage ( ) ;
}
RegisteredSettings . Reset ( ) ;
TopLevelSettings . Reset ( ) ;
OnInitialize ( OwningLocalPlayer ) ;
}
bool UGameSettingRegistry : : IsFinishedInitializing ( ) const
{
bool bReady = true ;
for ( UGameSetting * Setting : RegisteredSettings )
{
if ( ! Setting - > IsReady ( ) )
{
bReady = false ;
break ;
}
}
return bReady ;
}
void UGameSettingRegistry : : SaveChanges ( )
{
}
void UGameSettingRegistry : : GetSettingsForFilter ( const FGameSettingFilterState & FilterState , TArray < UGameSetting * > & InOutSettings )
{
TArray < UGameSetting * > RootSettings ;
if ( FilterState . GetSettingRootList ( ) . Num ( ) > 0 )
{
RootSettings . Append ( FilterState . GetSettingRootList ( ) ) ;
}
else
{
RootSettings . Append ( TopLevelSettings ) ;
}
for ( UGameSetting * TopLevelSetting : RootSettings )
{
if ( const UGameSettingCollection * TopLevelCollection = Cast < UGameSettingCollection > ( TopLevelSetting ) )
{
TopLevelCollection - > GetSettingsForFilter ( FilterState , InOutSettings ) ;
}
else
{
if ( FilterState . DoesSettingPassFilter ( * TopLevelSetting ) )
{
InOutSettings . Add ( TopLevelSetting ) ;
}
}
}
}
UGameSetting * UGameSettingRegistry : : FindSettingByDevName ( const FName & SettingDevName )
{
for ( UGameSetting * Setting : RegisteredSettings )
{
if ( Setting - > GetDevName ( ) = = SettingDevName )
{
return Setting ;
}
}
return nullptr ;
}
void UGameSettingRegistry : : RegisterSetting ( UGameSetting * InSetting )
{
if ( InSetting )
{
TopLevelSettings . Add ( InSetting ) ;
InSetting - > SetRegistry ( this ) ;
RegisterInnerSettings ( InSetting ) ;
}
}
void UGameSettingRegistry : : RegisterInnerSettings ( UGameSetting * InSetting )
{
InSetting - > OnSettingChangedEvent . AddUObject ( this , & ThisClass : : HandleSettingChanged ) ;
2022-09-13 07:18:28 +00:00
InSetting - > OnSettingAppliedEvent . AddUObject ( this , & ThisClass : : HandleSettingApplied ) ;
2022-05-23 18:41:30 +00:00
InSetting - > OnSettingEditConditionChangedEvent . AddUObject ( this , & ThisClass : : HandleSettingEditConditionsChanged ) ;
// Not a fan of this, but it makes sense to aggregate action events for simplicity.
if ( UGameSettingAction * ActionSetting = Cast < UGameSettingAction > ( InSetting ) )
{
ActionSetting - > OnExecuteNamedActionEvent . AddUObject ( this , & ThisClass : : HandleSettingNamedAction ) ;
}
// Not a fan of this, but it makes sense to aggregate navigation events for simplicity.
else if ( UGameSettingCollectionPage * NewPageCollection = Cast < UGameSettingCollectionPage > ( InSetting ) )
{
NewPageCollection - > OnExecuteNavigationEvent . AddUObject ( this , & ThisClass : : HandleSettingNavigation ) ;
}
# if !UE_BUILD_SHIPPING
ensureAlwaysMsgf ( ! RegisteredSettings . Contains ( InSetting ) , TEXT ( " This setting has already been registered! " ) ) ;
ensureAlwaysMsgf ( nullptr = = RegisteredSettings . FindByPredicate ( [ & InSetting ] ( UGameSetting * ExistingSetting ) { return InSetting - > GetDevName ( ) = = ExistingSetting - > GetDevName ( ) ; } ) , TEXT ( " A setting with this DevName has already been registered! DevNames must be unique within a registry. " ) ) ;
# endif
RegisteredSettings . Add ( InSetting ) ;
for ( UGameSetting * ChildSetting : InSetting - > GetChildSettings ( ) )
{
RegisterInnerSettings ( ChildSetting ) ;
}
}
2022-09-13 07:18:28 +00:00
void UGameSettingRegistry : : HandleSettingApplied ( UGameSetting * Setting )
{
OnSettingApplied ( Setting ) ;
}
2022-05-23 18:41:30 +00:00
void UGameSettingRegistry : : HandleSettingChanged ( UGameSetting * Setting , EGameSettingChangeReason Reason )
{
OnSettingChangedEvent . Broadcast ( Setting , Reason ) ;
}
void UGameSettingRegistry : : HandleSettingEditConditionsChanged ( UGameSetting * Setting )
{
OnSettingEditConditionChangedEvent . Broadcast ( Setting ) ;
}
void UGameSettingRegistry : : HandleSettingNamedAction ( UGameSetting * Setting , FGameplayTag GameSettings_Action_Tag )
{
OnSettingNamedActionEvent . Broadcast ( Setting , GameSettings_Action_Tag ) ;
}
void UGameSettingRegistry : : HandleSettingNavigation ( UGameSetting * Setting )
{
OnExecuteNavigationEvent . Broadcast ( Setting ) ;
}
# undef LOCTEXT_NAMESPACE