feat: RP Data Assets

This commit is contained in:
2024-10-25 14:45:06 +02:00
parent 90ac5dca32
commit bfd977e1e1
6 changed files with 194 additions and 67 deletions

View File

@@ -7,7 +7,6 @@
#include "AssetRegistry/AssetRegistryModule.h"
#include "DataAssets/RRDADataAssetBase.h"
#include "DataAssets/RRDADirtDataAsset.h"
#include "Engine/AssetManager.h"
#include "Enums/RRDARPEnums.h"
#include "Resources/FGItemDescriptor.h"
@@ -59,6 +58,13 @@ public:
template<class T>
bool FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets);
/**
* @note For testing purposes only it currently finds 0 assets
* @deprecated Use FindAllDataAssetsOfClass instead it uses GetDerivedClasses and get all assets of a specific class
*/
template<class T>
bool FindAllDataAssetsOfClassUseRegistry(TSet<T*>& OutDataAssets);
private:
UPROPERTY()
TMap<TSubclassOf<UFGItemDescriptor>, class URRDADirtDataAsset*> mDirtAssets;
@@ -73,42 +79,12 @@ public:
TSet<URRDADataAssetBase*> mDisabledDataAssets;
UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset")
TSet<URRDADataAssetBase*> mAllDataAssets;
TSet<URRDADataAssetBase*> mEnabledDataAssets;
};
template <class T>
bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets)
{
OutDataAssets.Empty();
// This doesn't work the AssetDatas are always invalid
/*UAssetManager& Manager = UAssetManager::Get();
TArray<FAssetData> AssetDatas;
Manager.GetPrimaryAssetDataList(FPrimaryAssetType("RRDADataAsset"), AssetDatas);
for (FAssetData AssetData : AssetDatas)
{
if(AssetData.IsValid())
{
if(URRDADataAssetBase* Asset = Cast<URRDADataAssetBase>(AssetData.GetAsset()))
{
if(!URRDADataAssetBase::IsEnabled(Asset, GetWorld()))
{
UE_LOG(LogRRDApi, Error, TEXT("Asset Disabled: %s"), *AssetData.AssetName.ToString());
continue;
}
OutDataAssets.Add(Cast<T>(Asset));
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *AssetData.GetAsset()->GetPathName());
}
} else
{
UE_LOG(LogRRDApi, Error, TEXT("Invalid AssetData: %s"), *AssetData.AssetName.ToString());
return false;
}
}*/
TArray<UClass*> FoundClasses;
GetDerivedClasses(T::StaticClass(), FoundClasses, true);
@@ -130,3 +106,36 @@ bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets)
return OutDataAssets.Num() > 0;
}
template <class T>
bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet<T*>& OutDataAssets)
{
OutDataAssets.Empty();
// Find list of all UStat, and USkill assets in Content Browser.
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(FName("AssetRegistry"));
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
TArray<FAssetData> AssetList;
AssetRegistry.GetAssetsByClass(URRDADataAssetBase::StaticClass()->GetClassPathName(), AssetList, true);
// Split assets into separate arrays.
for (const FAssetData& Asset : AssetList) {
UObject* Obj = Asset.GetAsset();
if(URRDADataAssetBase* BaseAsset = Cast<URRDADataAssetBase>(Obj))
{
if(URRDADataAssetBase::IsEnabled(BaseAsset, GetWorld()))
{
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *BaseAsset->GetPathName());
OutDataAssets.Add(Cast<T>(BaseAsset));
mEnabledDataAssets.Add(BaseAsset);
}
UE_LOG(LogRRDApi, Warning, TEXT("Asset Disabled: %s"), *BaseAsset->GetPathName());
mDisabledDataAssets.Add(BaseAsset);
}
}
return OutDataAssets.Num() > 0;
}