Files
rob gay 48b172ac25 Initial work to pipe builder updates to dynamic graph
- Add delegates to respond to builder changes to document
- Add delegate handlers to source builder to forward requests to audition sound if live update enabled
- Misc piping for live updating
#jira UE-186952
#ok forgithub public
#rb phil.popp

[CL 26072716 by rob gay in 5.3 branch]
2023-06-16 17:55:08 -04:00

60 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "UObject/Interface.h"
#include "MetasoundFrontendDocument.h"
#include "MetasoundFrontendDocumentModifyDelegates.h"
#include "Templates/Function.h"
#include "MetasoundDocumentInterface.generated.h"
// Forward Declarations
struct FMetaSoundFrontendDocumentBuilder;
// UInterface for all MetaSound UClasses that implement a MetaSound document
// as a means for accessing data via code, scripting, execution, or node
// class generation.
UINTERFACE(BlueprintType, meta = (CannotImplementInterfaceInBlueprint))
class METASOUNDFRONTEND_API UMetaSoundDocumentInterface : public UInterface
{
GENERATED_BODY()
};
class METASOUNDFRONTEND_API IMetaSoundDocumentInterface : public IInterface
{
GENERATED_BODY()
public:
// Returns read-only reference to the the MetaSoundFrontendDocument
// containing all MetaSound runtime & editor data.
virtual const FMetasoundFrontendDocument& GetDocument() const = 0;
// Returns the parent class registered with the MetaSound UObject registry.
virtual const UClass& GetBaseMetaSoundUClass() const = 0;
private:
virtual FMetasoundFrontendDocument& GetDocument() = 0;
friend struct FMetaSoundFrontendDocumentBuilder;
};
namespace Metasound::Frontend
{
class METASOUNDFRONTEND_API IMetaSoundDocumentBuilderRegistry
{
public:
// Returns delegates used to mutate any internal builder cached state or notify listeners of external system that
// has mutated a given document class. Exists primarily for backward compatibility with the DocumentController system,
// and is not recommended for use outside of MetaSound plugin as it may be deprecated in the future (best practice is to
// mutate all documents using MetasoundDocumentBuilders).
virtual const FDocumentModifyDelegates* FindModifyDelegates(const FMetasoundFrontendClassName& InClassName) const = 0;
static IMetaSoundDocumentBuilderRegistry& GetChecked();
protected:
static void Set(TUniqueFunction<IMetaSoundDocumentBuilderRegistry&()>&& InGetInstance);
};
} // namespace Metasound::Frontend