Files
UnrealEngineUWP/Engine/Source/Runtime/Engine/Private/ActorFolderDesc.cpp
Matt Peters 7ad238a806 AssetRegistry includes (Engine/Source): change #include "AssetData.h" -> #include "AssetRegistry/AssetData.h", and similar for the other moved AssetRegistry headers.
#rb Zousar.Shaker
#rnx
#preflight 6270509a220f89f0ad573030

[CL 20016982 by Matt Peters in ue5-main branch]
2022-05-02 18:06:48 -04:00

93 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ActorFolderDesc.h"
#include "Misc/Paths.h"
#include "Misc/PackagePath.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "AssetRegistry/IAssetRegistry.h"
#include "ActorFolder.h"
#include "ExternalPackageHelper.h"
#if WITH_EDITOR
/**
* FActorFolderDesc Implementation
*/
FActorFolderDesc::FActorFolderDesc()
: bFolderInitiallyExpanded(true)
, bFolderIsDeleted(false)
{}
FString FActorFolderDesc::GetDisplayName() const
{
if (IsFolderDeleted())
{
return FString::Printf(TEXT("<Deleted> %s"), *GetFolderLabel());
}
return GetPath();
}
FString FActorFolderDesc::GetPath() const
{
FActorFolderDescsContext Context(*this);
TStringBuilder<1024> StringBuilder;
if (!IsFolderDeleted())
{
StringBuilder += GetFolderLabel();
}
const FActorFolderDesc* Parent = Context.GetParentActorFolderDesc(*this);
while (Parent)
{
StringBuilder.Prepend(TEXT("/"));
StringBuilder.Prepend(Parent->GetFolderLabel());
Parent = Context.GetParentActorFolderDesc(*Parent);
}
return *StringBuilder;
}
/**
* FActorFolderDescsContext Implementation
*/
FActorFolderDescsContext::FActorFolderDescsContext(const FActorFolderDesc& InActorFolderDesc)
{
const FString ActorFoldersRoot = FExternalPackageHelper::GetExternalObjectsPath(InActorFolderDesc.GetOuterPackageName());
IAssetRegistry& AssetRegistry = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry")).Get();
AssetRegistry.ScanPathsSynchronous({ ActorFoldersRoot }, /*bForceRescan*/false, /*bIgnoreDenyListScanFilters*/false);
FARFilter Filter;
Filter.bRecursivePaths = true;
Filter.bIncludeOnlyOnDiskAssets = true;
Filter.ClassNames.Add(UActorFolder::StaticClass()->GetFName());
Filter.PackagePaths.Add(*ActorFoldersRoot);
TArray<FAssetData> Assets;
AssetRegistry.GetAssets(Filter, Assets);
for (auto Asset : Assets)
{
FActorFolderDesc ActorFolderDesc = UActorFolder::GetAssetRegistryInfoFromPackage(Asset.PackageName);
if (ActorFolderDesc.GetFolderGuid().IsValid())
{
ActorFolders.Add(ActorFolderDesc.GetFolderGuid(), ActorFolderDesc);
}
}
}
const FActorFolderDesc* FActorFolderDescsContext::GetActorFolderDesc(const FGuid& InFolderGuid)
{
return ActorFolders.Find(InFolderGuid);
}
const FActorFolderDesc* FActorFolderDescsContext::GetParentActorFolderDesc(const FActorFolderDesc& InActorFolderDesc)
{
const FActorFolderDesc* Parent = GetActorFolderDesc(InActorFolderDesc.GetParentFolderGuid());
if (Parent && Parent->IsFolderDeleted())
{
return GetParentActorFolderDesc(*Parent);
}
return Parent;
}
#endif