RealtimeStyleTransferRuntime/Plugins/GameSettings/Source/Private/GameSettingCollection.cpp

122 lines
3.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "GameSettingCollection.h"
#include "Framework/Text/ITextDecorator.h"
#include "Framework/Text/RichTextMarkupProcessing.h"
#define LOCTEXT_NAMESPACE "GameSetting"
//--------------------------------------
// UGameSettingCollection
//--------------------------------------
UGameSettingCollection::UGameSettingCollection()
{
}
void UGameSettingCollection::AddSetting(UGameSetting* Setting)
{
#if !UE_BUILD_SHIPPING
ensureAlwaysMsgf(Setting->GetSettingParent() == nullptr, TEXT("This setting already has a parent!"));
ensureAlwaysMsgf(!Settings.Contains(Setting), TEXT("This collection already includes this setting!"));
#endif
Settings.Add(Setting);
Setting->SetSettingParent(this);
if (LocalPlayer)
{
Setting->Initialize(LocalPlayer);
}
}
TArray<UGameSettingCollection*> UGameSettingCollection::GetChildCollections() const
{
TArray<UGameSettingCollection*> CollectionSettings;
for (UGameSetting* ChildSetting : Settings)
{
if (UGameSettingCollection* ChildCollection = Cast<UGameSettingCollection>(ChildSetting))
{
CollectionSettings.Add(ChildCollection);
}
}
return CollectionSettings;
}
void UGameSettingCollection::GetSettingsForFilter(const FGameSettingFilterState& FilterState, TArray<UGameSetting*>& InOutSettings) const
{
for (UGameSetting* ChildSetting : Settings)
{
// If the child setting is a collection, only add it to the set if it has any visible children.
if (Cast<UGameSettingCollectionPage>(ChildSetting))
{
if (FilterState.DoesSettingPassFilter(*ChildSetting))
{
InOutSettings.Add(ChildSetting);
}
}
else if (UGameSettingCollection* ChildCollection = Cast<UGameSettingCollection>(ChildSetting))
{
TArray<UGameSetting*> ChildSettings;
ChildCollection->GetSettingsForFilter(FilterState, ChildSettings);
if (ChildSettings.Num() > 0)
{
// Don't add the root setting to the returned items, it's the container of N-possible
// other settings and containers we're actually displaying right now.
if (!FilterState.IsSettingInRootList(ChildSetting))
{
InOutSettings.Add(ChildSetting);
}
InOutSettings.Append(ChildSettings);
}
}
else
{
if (FilterState.DoesSettingPassFilter(*ChildSetting))
{
InOutSettings.Add(ChildSetting);
}
}
}
}
//--------------------------------------
// UGameSettingCollectionPage
//--------------------------------------
UGameSettingCollectionPage::UGameSettingCollectionPage()
{
}
void UGameSettingCollectionPage::OnInitialized()
{
Super::OnInitialized();
#if !UE_BUILD_SHIPPING
ensureAlwaysMsgf(!NavigationText.IsEmpty(), TEXT("You must provide a NavigationText for this setting."));
ensureAlwaysMsgf(!DescriptionRichText.IsEmpty(), TEXT("You must provide a description for new page collections."));
#endif
}
void UGameSettingCollectionPage::GetSettingsForFilter(const FGameSettingFilterState& FilterState, TArray<UGameSetting*>& InOutSettings) const
{
// If we're including nested pages, call the super and dump them all, otherwise, we pretend we have none for the filtering.
// because our settings are displayed on another page.
if (FilterState.bIncludeNestedPages || FilterState.IsSettingInRootList(this))
{
Super::GetSettingsForFilter(FilterState, InOutSettings);
}
}
void UGameSettingCollectionPage::ExecuteNavigation()
{
OnExecuteNavigationEvent.Broadcast(this);
}
#undef LOCTEXT_NAMESPACE