2024-01-25 11:21:15 +08:00

58 lines
1.4 KiB
C++

#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<float*>& 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<float*>& GetChannelHeaders() override;
FMixerTrack* GetTrack() const { return Track; }
private:
FMixerTrack* Track;
TArray<float*> 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<float*>& GetChannelHeaders() override;
};