RealtimeStyleTransferRuntime/Plugins/GameSettings/Source/Private/Registry/GameSettingRegistry.cpp

168 lines
4.6 KiB
C++
Raw Permalink Normal View History

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