Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundEngine/Public/MetasoundAssetSubsystem.h
rob gay 6887608d07 - Version MetaSound asset graph name FText being generated from file name & copied to MetaSound asset.
- Add missing user-defined fields to MetaSound graph options (ex. IsDeprecated, Keywords, etc.) and force update on transient style changeID (TODO: Probably would make more sense for Metadata FText to live on style struct and share that transient ChangeID, so that non-runtime changes to FText metadata wouldn't bump the change ID)
[CODEREVIEW] helen.yang
#jira UE-137696
#rnx
#preflight 61f870c0a6632a34f35e5e3c

#ROBOMERGE-AUTHOR: rob.gay
#ROBOMERGE-SOURCE: CL 18805501 in //UE5/Release-5.0/... via CL 18807964 via CL 18821755
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v908-18788545)

[CL 18822116 by rob gay in ue5-main branch]
2022-02-02 02:19:16 -05:00

71 lines
2.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Engine/Engine.h"
#include "MetasoundAssetBase.h"
#include "MetasoundAssetManager.h"
#include "Subsystems/EngineSubsystem.h"
#include "UObject/Object.h"
#include "MetasoundAssetSubsystem.generated.h"
// Forward Declarations
class UAssetManager;
class FMetasoundAssetBase;
struct FDirectoryPath;
USTRUCT(BlueprintType)
struct METASOUNDENGINE_API FMetaSoundAssetDirectory
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Directories, meta = (RelativePath, LongPackageName))
FDirectoryPath Directory;
};
/** The subsystem in charge of the MetaSound asset registry */
UCLASS()
class METASOUNDENGINE_API UMetaSoundAssetSubsystem : public UEngineSubsystem, public Metasound::Frontend::IMetaSoundAssetManager
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& InCollection) override;
void AddOrUpdateAsset(const FAssetData& InAssetData);
void RemoveAsset(UObject& InObject);
void RemoveAsset(const FAssetData& InAssetData);
void RenameAsset(const FAssetData& InAssetData, bool bInReregisterWithFrontend = true);
virtual void AddAssetReferences(FMetasoundAssetBase& InAssetBase) override;
virtual void AddOrUpdateAsset(UObject& InObject) override;
virtual bool CanAutoUpdate(const FMetasoundFrontendClassName& InClassName) const override;
virtual bool ContainsKey(const Metasound::Frontend::FNodeRegistryKey& InRegistryKey) const override;
virtual const FSoftObjectPath* FindObjectPathFromKey(const Metasound::Frontend::FNodeRegistryKey& RegistryKey) const override;
virtual TSet<Metasound::Frontend::FNodeRegistryKey> GetReferencedKeys(const FMetasoundAssetBase& InAssetBase) const override;
virtual void RescanAutoUpdateDenyList() override;
virtual FMetasoundAssetBase* TryLoadAsset(const FSoftObjectPath& InObjectPath) const override;
virtual FMetasoundAssetBase* TryLoadAssetFromKey(const Metasound::Frontend::FNodeRegistryKey& RegistryKey) const override;
virtual bool TryLoadReferencedAssets(const FMetasoundAssetBase& InAssetBase, TArray<FMetasoundAssetBase*>& OutReferencedAssets) const override;
UFUNCTION(BlueprintCallable, Category = "MetaSounds|Registration")
void RegisterAssetClassesInDirectories(const TArray<FMetaSoundAssetDirectory>& Directories);
UFUNCTION(BlueprintCallable, Category = "MetaSounds|Registration")
void UnregisterAssetClassesInDirectories(const TArray<FMetaSoundAssetDirectory>& Directories);
protected:
void PostEngineInit();
void PostInitAssetScan();
void RebuildDenyListCache(const UAssetManager& InAssetManager);
void ResetAssetClassDisplayName(const FAssetData& InAssetData);
void SearchAndIterateDirectoryAssets(const TArray<FDirectoryPath>& InDirectories, TFunctionRef<void(const FAssetData&)> InFunction);
private:
int32 AutoUpdateDenyListChangeID = INDEX_NONE;
TSet<FName> AutoUpdateDenyListCache;
TMap<Metasound::Frontend::FNodeRegistryKey, FSoftObjectPath> PathMap;
};