125 lines
3.5 KiB
C++
125 lines
3.5 KiB
C++
#include "Subsystems/RRDADataAssetSubsystem.h"
|
|
|
|
#include "RefinedRDApi.h"
|
|
#include "DataAssets/RRDADirtDataAsset.h"
|
|
#include "Engine/AssetManager.h"
|
|
#include "AssetRegistry/AssetRegistryModule.h"
|
|
|
|
URRDADataAssetSubsystem::URRDADataAssetSubsystem() {}
|
|
|
|
URRDADataAssetSubsystem* URRDADataAssetSubsystem::Get(UObject* Context)
|
|
{
|
|
if (IsValid(Context))
|
|
{
|
|
return Context->GetWorld()->GetSubsystem<URRDADataAssetSubsystem>();
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
URRDADataAssetSubsystem* URRDADataAssetSubsystem::GetChecked(UObject* Context)
|
|
{
|
|
URRDADataAssetSubsystem* Subsystem = Get(Context);
|
|
fgcheck(Subsystem);
|
|
return Subsystem;
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
|
{
|
|
Super::Initialize(Collection);
|
|
|
|
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(FName("AssetRegistry"));
|
|
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
|
|
// Must wait until all assets are discovered before populating list of assets.
|
|
if (AssetRegistry.IsLoadingAssets()) {
|
|
AssetRegistry.OnFilesLoaded().AddUObject(this, &URRDADataAssetSubsystem::StartScanForDataAssets);
|
|
}
|
|
else {
|
|
StartScanForDataAssets();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::Deinitialize()
|
|
{
|
|
Super::Deinitialize();
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::StartScanForDataAssets()
|
|
{
|
|
/*UAssetManager& Manager = UAssetManager::Get();
|
|
Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset"));*/
|
|
|
|
// 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(FName("RRDADataAssetBase"), AssetList);
|
|
|
|
// Split assets into separate arrays.
|
|
for (const FAssetData& Asset : AssetList) {
|
|
UObject* Obj = Asset.GetAsset();
|
|
|
|
// Cast the Obj to other data asset classes
|
|
if (Obj->GetClass()->IsChildOf(URRDADirtDataAsset::StaticClass())) {
|
|
auto DirtDataAsset = Cast<URRDADirtDataAsset>(Obj);
|
|
mDirtAssets.Add(DirtDataAsset->mItem, DirtDataAsset);
|
|
}
|
|
}
|
|
|
|
mDisabledDataAssets.Empty();
|
|
mAllDataAssets.Empty();
|
|
|
|
ReCacheBoilerDataAssets();
|
|
ReCacheCoolerDataAssets();
|
|
ReCacheDirtDataAssets();
|
|
ReCacheHeaterDataAssets();
|
|
ReCacheTurbineDataAssets();
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::ReCacheDirtDataAssets()
|
|
{
|
|
mDirtAssets.Empty();
|
|
TSet<URRDADirtDataAsset*> DirtDataAssets;
|
|
if(FindAllDataAssetsOfClass(DirtDataAssets))
|
|
{
|
|
for (URRDADirtDataAsset* DirtDataAsset : DirtDataAssets)
|
|
{
|
|
mDirtAssets.Add(DirtDataAsset->mItem, DirtDataAsset);
|
|
}
|
|
}
|
|
UE_LOG(LogRRDApi, Log, TEXT("ReCacheDirtDataAssets: %d"), mDirtAssets.Num());
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::ReCacheTurbineDataAssets()
|
|
{
|
|
UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets"));
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::ReCacheBoilerDataAssets() {
|
|
UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets"));
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::ReCacheCoolerDataAssets() {
|
|
UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets"));
|
|
}
|
|
|
|
void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() {
|
|
UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets"));
|
|
}
|
|
|
|
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const
|
|
{
|
|
return mDirtAssets.GetKeys(Items);
|
|
}
|
|
|
|
URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf<UFGItemDescriptor> Item) const
|
|
{
|
|
if(!Item) return nullptr;
|
|
URRDADirtDataAsset* const* Desc = mDirtAssets.Find(Item);
|
|
if(!Desc) return nullptr;
|
|
return *Desc;
|
|
}
|
|
|