#pragma once #include "CoreMinimal.h" class FChannelInterface; class FMixerTrack; enum class EChannelNodeType { NoneType, MixerNode, NullNode, }; class FChannelNode { public: DECLARE_MULTICAST_DELEGATE_OneParam(FChannelNodeMulticastDelegate, FChannelNode*) DECLARE_DELEGATE_OneParam(FChannelNodeDelegate, FChannelNode*) FChannelNode(FChannelInterface* InOwner, EChannelNodeType InNodeType) : Owner(InOwner), NodeType(InNodeType) { } virtual ~FChannelNode() { OnChannelNodeDestroyed.Broadcast(this); } virtual FString GetName() { return ""; } virtual const TArray& GetChannelHeaders() = 0; FChannelInterface* Owner; EChannelNodeType NodeType; static FChannelNodeMulticastDelegate OnChannelNodeDestroyed; }; class FMixerChannelNode : public FChannelNode { public: FMixerChannelNode(FChannelInterface* InOwner, FMixerTrack* InTrack, int32 InNodeIndex); virtual FString GetName() override; virtual const TArray& GetChannelHeaders() override; FMixerTrack* GetTrack() const { return Track; } private: FMixerTrack* Track; TArray ChannelHeaders; int32 NodeIndex; }; class FNullChannelNode : public FChannelNode { static FNullChannelNode Instance; public: FNullChannelNode() : FChannelNode(nullptr, EChannelNodeType::NullNode) {} static FNullChannelNode* Get() { return &Instance; } virtual FString GetName() override { return "NullChannelNode"; } virtual const TArray& GetChannelHeaders() override; };