16#include "DataflowNode.generated.h"
63 UPROPERTY(EditAnywhere, Category = "Dataflow", meta = (InlineEditConditionToggle, DisplayAfter = "bActive"))
67 UPROPERTY(EditAnywhere, Category = "Dataflow", meta = (EditCondition="bOverrideColor"))
95 virtual FString
GetTags()
const {
return ""; }
102 UE_DEPRECATED(5.4,
"FDataflowNode::CopyNodeProperties is deprecated.")
105 UE_DEPRECATED(5.4, "
FDataflowNode::IsDeprecated is deprecated.")
107 UE_DEPRECATED(5.4,
"FDataflowNode::IsExperimental is deprecated.")
108 virtual bool IsExperimental() {
return false; }
130 virtual bool CanDebugDraw()
const
144 virtual void OnDoubleClicked()
const {};
258 if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
260 Input.SetTypePolicy(T::FPolicyType::GetInterface());
265 template <
typename T>
271 template <
typename T>
275 if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
277 Output.SetTypePolicy(T::FPolicyType::GetInterface());
287 template <
typename T>
293 template <
typename T>
294 UE_DEPRECATED(5.5,
"PassthroughName is no longer needed to register output connections")
305 if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
307 Input.SetTypePolicy(T::FPolicyType::GetInterface());
322 if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
324 Input.SetTypePolicy(T::FPolicyType::GetInterface());
334 if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
336 Output.SetTypePolicy(T::FPolicyType::GetInterface());
351 if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
353 Output.SetTypePolicy(T::FPolicyType::GetInterface());
361 UnregisterInputConnection(GetKeyFromReference(Reference));
369 UnregisterOutputConnection(GetKeyFromReference(Reference));
392 return FrozenProperties;
398 return bOverrideColor;
405 return OverrideColor;
433 template<
class T UE_REQUIRES(!std::is_base_of_v<FDataflowAnyType, T>)>
437 return FindInput(Reference)->template
GetValue<T>(
Context, *
static_cast<const T*
>(Reference.Reference));
440 template<
typename TAnyType UE_REQUIRES(std::is_base_of_v<FDataflowAnyType, TAnyType> && !std::is_same_v<
typename TAnyType::FStorageType,
void>)>
443 checkSlow(Reference.Reference && FindInput(Reference));
447 template<
typename TAnyType UE_REQUIRES(std::is_base_of_v<FDataflowAnyType, TAnyType> && std::is_same_v<
typename TAnyType::FStorageType,
void>)>
450 checkSlow(Reference.Reference && FindInput(Reference));
454 template<
class T UE_REQUIRES(!std::is_base_of_v<FDataflowAnyType, T>)>
460 template<
typename TAnyType UE_REQUIRES(std::is_base_of_v<FDataflowAnyType, TAnyType> && !std::is_same_v<
typename TAnyType::FStorageType,
void>)>
466 template<
typename TAnyType UE_REQUIRES(std::is_base_of_v<FDataflowAnyType, TAnyType> && std::is_same_v<
typename TAnyType::FStorageType,
void>)>
530 template<
class T,
class U UE_REQUIRES(!std::is_base_of_v<FDataflowAnyType, U>)>
535 static_assert(std::is_same_v<FInValueType, FInReferenceType>);
542 ensureMsgf(
false,
TEXT(
"This output could not be found within this node, check this has been properly registered in the node constructor"));
546 template<
typename TAnyType UE_REQUIRES(std::is_base_of_v<FDataflowAnyType, TAnyType> && !std::is_same_v<
typename TAnyType::FStorageType,
void>)>
555 ensureMsgf(
false,
TEXT(
"This output could not be found within this node, check this has been properly registered in the node constructor"));
559 template<
typename TAnyType UE_REQUIRES(std::is_base_of_v<FDataflowAnyType, TAnyType> && std::is_same_v<
typename TAnyType::FStorageType,
void>)>
568 ensureMsgf(
false,
TEXT(
"This output could not be found within this node, check this has been properly registered in the node constructor"));
610 else if constexpr (std::is_base_of_v<FDataflowAnyType, T>)
625 UE_DEPRECATED(5.7,
"Use UE::Dataflow::FContextValue from calling GetValue on the node to access the same functionality")
669 return (FindInput(Reference)->GetConnection() !=
nullptr);
680 if (!bPauseInvalidations)
682 bPauseInvalidations =
true;
689 if (bPauseInvalidations)
691 bPauseInvalidations =
false;
734 return InType.ToString().Equals(StaticType().ToString());
740 FName TargetType = T::StaticType();
751 FName TargetType = T::StaticType();
790 UE_DEPRECATED(5.6,
"Use inputs and outputs SetTypeDependencyGroup() to declare dependent types")
793 UE_DEPRECATED(5.6,
"Use inputs and outputs SetTypeDependencyGroup() to declare dependent types")
796 template <
typename T>
802 template <
typename T>
840 static FString StripContainerIndexFromPropertyFullName(
const FString&
PropertyFullName);
842 uint32 GetConnectionOffsetFromReference(
const void* Reference)
const;
862 bool bHasValidConnections =
true;
870#if WITH_EDITORONLY_DATA
872 UPROPERTY(EditAnywhere, Category =
"Dataflow")
877 UPROPERTY(EditAnywhere, Category =
"Dataflow")
885 bool bIsFrozen =
false;
887 TWeakPtr<
UE::Dataflow::FGraph> WeakDataflowGraph;
893 UE::Dataflow::FTimestamp PausedModifiedTimestamp =
UE::Dataflow::FTimestamp::
Invalid;
898namespace
UE::Dataflow
909 Node->PauseInvalidations();
917 Node->ResumeInvalidations();
932#define DATAFLOW_NODE_REGISTER_CREATION_FACTORY(A) \
933 ::UE::Dataflow::FNodeFactory::RegisterNodeFromType<A>();
935#define DATAFLOW_NODE_RENDER_TYPE(A, B, ...) \
936 virtual TArray<::UE::Dataflow::FRenderingParameter> GetRenderParametersImpl() const { \
937 TArray<::UE::Dataflow::FRenderingParameter> Array; \
938 Array.Add({ A, B, {__VA_ARGS__,} }); \
941#define DATAFLOW_NODE_RENDER_TYPE_START() \
942 virtual TArray<::UE::Dataflow::FRenderingParameter> GetRenderParametersImpl() const { \
943 TArray<::UE::Dataflow::FRenderingParameter> Array;
945#define DATAFLOW_NODE_RENDER_TYPE_ADD(A, B, ...) \
946 Array.Add({ A, B, {__VA_ARGS__,} });
948#define DATAFLOW_NODE_RENDER_TYPE_END() \
951#define DATAFLOW_NODE_DEFINE_INTERNAL(TYPE, DISPLAY_NAME, CATEGORY, TAGS) \
953 static FName StaticType() {return #TYPE;} \
954 static const char* StaticDisplay() {return DISPLAY_NAME;} \
955 static const char* StaticCategory() {return CATEGORY;} \
956 static FString StaticTags() {return TAGS;} \
957 static FString StaticToolTip() {return FString("Create a dataflow node.");} \
958 virtual FName GetType() const { return #TYPE; } \
959 virtual bool IsA(FName InType) const override \
960 { return InType.ToString().Equals(StaticType().ToString()) || Super::IsA(InType); } \
961 virtual FStructOnScope* NewStructOnScope() override { \
962 return new FStructOnScope(TYPE::StaticStruct(), (uint8*)this);} \
963 virtual void SerializeInternal(FArchive& Ar) override { \
964 UScriptStruct* const Struct = TYPE::StaticStruct(); \
965 Struct->SerializeTaggedProperties(Ar, (uint8*)this, Struct, nullptr); \
967 PostSerialize(Ar);} \
968 virtual FName GetDisplayName() const override { return TYPE::StaticDisplay(); } \
969 virtual FName GetCategory() const override { return TYPE::StaticCategory(); } \
970 virtual FString GetTags() const override { return TYPE::StaticTags(); } \
971 virtual const UScriptStruct* TypedScriptStruct() const override \
972 {return TYPE::StaticStruct();} \
976#define DATAFLOW_NODE_REGISTER_CREATION_FACTORY_NODE_COLORS_BY_CATEGORY(A, C1, C2) \
978 ::UE::Dataflow::FNodeColorsRegistry::Get().RegisterNodeColors(A, {C1, C2}); \
981#define DATAFLOW_NODE_REGISTER_CREATION_FACTORY_PIN_SETTINGS_BY_TYPE(A, C, T) \
983 ::UE::Dataflow::FPinSettingsRegistry::Get().RegisterPinSettings(A, {C, T}); \
986#define DATAFLOW_NODE_REGISTER_GETTER_FOR_ASSET(ASSETTYPE, NODETYPE) \
987 ::UE::Dataflow::FNodeFactory::GetInstance()->RegisterGetterNodeForAssetType(ASSETTYPE::StaticClass()->GetFName(), #NODETYPE);
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkNoEntry()
Definition AssertionMacros.h:316
#define GET_MEMBER_NAME_CHECKED(ClassName, MemberName)
Definition AssertionMacros.h:493
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
Definition Archive.h:1208
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition UnrealType.h:174
Definition StructOnScope.h:13
Definition DataflowDebugDrawInterface.h:23
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition SharedPointer.h:1295
Definition DataflowConnection.h:91
Definition DataflowNodeParameters.h:134
Definition DataflowNode.h:902
FDataflowNodePauseInvalidationScope(const FDataflowNodePauseInvalidationScope &)=delete
FDataflowNodePauseInvalidationScope()=delete
FDataflowNodePauseInvalidationScope(FDataflowNode *InNode)
Definition DataflowNode.h:904
~FDataflowNodePauseInvalidationScope()
Definition DataflowNode.h:913
FDataflowNodePauseInvalidationScope(FDataflowNodePauseInvalidationScope &&)=delete
Definition DataflowGraph.h:71
Definition DataflowAnyType.cpp:10
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition DataflowElement.h:12
Definition DataflowConnection.h:131
Definition DataflowNode.h:34
Definition DataflowNode.h:52
static DATAFLOWCORE_API const FName DataflowSkipConnection
Definition DataflowNode.h:227
virtual void PostSerialize(const FArchive &Ar)
Definition DataflowNode.h:236
virtual bool CanRemovePin() const
Definition DataflowNode.h:171
virtual bool EvaluateOnGameThreadOnly() const
Definition DataflowNode.h:378
DECLARE_MULTICAST_DELEGATE_OneParam(FOnNodeInvalidated, FDataflowNode *)
virtual const UScriptStruct * TypedScriptStruct() const
Definition DataflowNode.h:249
bool SetOutputConcreteType(const UE::Dataflow::FConnectionReference &OutputReference)
Definition DataflowNode.h:803
virtual FStructOnScope * NewStructOnScope()
Definition DataflowNode.h:248
bool IsConnected(const UE::Dataflow::FConnectionReference &Reference) const
Definition DataflowNode.h:666
virtual void OnPinRemoved(const UE::Dataflow::FPin &Pin)
Definition DataflowNode.h:169
virtual void OnPropertyChanged(UE::Dataflow::FContext &Context, const FPropertyChangedEvent &InPropertyChangedEvent)
Definition DataflowNode.h:711
FDataflowOutput & FindOrRegisterOutputArrayConnection(const UE::Dataflow::TConnectionReference< T > &Reference, const FName &ElementPropertyName=NAME_None, const FName &ArrayPropertyName=NAME_None)
Definition DataflowNode.h:342
FDataflowOutput & RegisterOutputConnection(const UE::Dataflow::TConnectionReference< T > &Reference, const UE::Dataflow::TConnectionReference< T > &Passthrough=UE::Dataflow::TConnectionReference< T >(nullptr), const FName &PropertyName=NAME_None)
Definition DataflowNode.h:272
const T & GetValue(UE::Dataflow::FContext &Context, const UE::Dataflow::TConnectionReference< T > &Reference, const T &Default) const
Definition DataflowNode.h:495
TFuture< const T & > GetValueParallel(UE::Dataflow::FContext &Context, const UE::Dataflow::TConnectionReference< T > &Reference) const
Definition DataflowNode.h:473
static DATAFLOWCORE_API const FName DataflowPassthrough
Definition DataflowNode.h:225
static DATAFLOWCORE_API const FLinearColor DefaultNodeBodyTintColor
Definition DataflowNode.h:230
void ResumeInvalidations()
Definition DataflowNode.h:687
UE::Dataflow::FTimestamp GetTimestamp() const
Definition DataflowNode.h:88
void PauseInvalidations()
Definition DataflowNode.h:678
virtual void SetAssetProperty(UObject *Asset)
Definition DataflowNode.h:708
virtual TArray< UE::Dataflow::FPin > GetPinsToRemove() const
Definition DataflowNode.h:161
const T & GetOutputValue(UE::Dataflow::FContext &Context, const T *Reference, const T &Default) const
Definition DataflowNode.h:506
virtual TArray< UE::Dataflow::FPin > AddPins()
Definition DataflowNode.h:154
FDataflowInput & RegisterInputConnection(const UE::Dataflow::TConnectionReference< T > &Reference, const FName &PropertyName=NAME_None)
Definition DataflowNode.h:255
virtual FName GetDisplayName() const
Definition DataflowNode.h:93
virtual void OnRenderOutput(UE::Dataflow::FContext &Context, const FName OutputName, const FName RenderGroup, const TArray< UPrimitiveComponent * > &RenderComponents) const
Definition DataflowNode.h:728
const T * AsType() const
Definition DataflowNode.h:738
PRAGMA_ENABLE_DEPRECATION_WARNINGS FDataflowNode & operator=(const FDataflowNode &Other)
Definition DataflowNode.h:79
void SetValue(UE::Dataflow::FContext &Context, T &&Value, const U *Reference) const
Definition DataflowNode.h:531
static DATAFLOWCORE_API const FLinearColor DefaultNodeTitleColor
Definition DataflowNode.h:229
TAnyType::FStorageType GetValue(UE::Dataflow::FContext &Context, const UE::Dataflow::TConnectionReference< TAnyType > &Reference) const
Definition DataflowNode.h:441
void SetError(UE::Dataflow::FContext &Context, const void *Reference, const FString &InError) const
Definition DataflowNode.h:572
virtual bool IsA(FName InType) const
Definition DataflowNode.h:732
void SetAsyncEvaluating(bool bValue) const
Definition DataflowNode.h:779
void SetName(FName InName)
Definition DataflowNode.h:87
static const FName GetActivePropertyName()
Definition DataflowNode.h:412
virtual bool CanAddPin() const
Definition DataflowNode.h:159
FDataflowOutput & RegisterOutputArrayConnection(const UE::Dataflow::TConnectionReference< T > &Reference, const FName &ElementPropertyName=NAME_None, const FName &ArrayPropertyName=NAME_None)
Definition DataflowNode.h:330
virtual bool SupportsDropConnectionOnNode(FName TypeName, UE::Dataflow::FPin::EDirection Direction) const
Definition DataflowNode.h:714
FGuid GetGuid() const
Definition DataflowNode.h:85
virtual FName GetType() const
Definition DataflowNode.h:92
const FLinearColor & GetOverrideColor() const
Definition DataflowNode.h:402
bool HasValidConnections() const
Definition DataflowNode.h:730
void SetValue(UE::Dataflow::FContext &Context, UE::Dataflow::FContextValue &&Value, const TAnyType *Reference) const
Definition DataflowNode.h:560
bool IsAsyncEvaluating() const
Definition DataflowNode.h:778
const T & GetValue(UE::Dataflow::FContext &Context, const T *Reference) const
Definition DataflowNode.h:455
virtual const FDataflowConnection * OnDropConnectionOnNode(const FDataflowConnection &DroppedConnection)
Definition DataflowNode.h:718
virtual bool MakeConnectedPropertiesReadOnly() const
Definition DataflowNode.h:724
virtual void Serialize(FArchive &Ar)
Definition DataflowNode.h:233
virtual FDataflowOutput * RedirectSerializedOutput(const FName &MissingOutputName)
Definition DataflowNode.h:241
bool SetInputConcreteType(const UE::Dataflow::FConnectionReference &InputReference)
Definition DataflowNode.h:797
bool IsConnected(const T *Reference) const
Definition DataflowNode.h:673
static DATAFLOWCORE_API const FName DataflowIntrinsic
Definition DataflowNode.h:226
virtual FDataflowInput * RedirectSerializedInput(const FName &MissingInputName)
Definition DataflowNode.h:239
FDataflowOutput & RegisterOutputConnection(const T *Reference, const T *Passthrough=nullptr, const FName &PropertyName=NAME_None)
Definition DataflowNode.h:288
const T & GetValue(UE::Dataflow::FContext &Context, const T *Reference, const T &Default) const
Definition DataflowNode.h:501
static FName StaticType()
Definition DataflowNode.h:91
TFuture< const T & > GetValueParallel(UE::Dataflow::FContext &Context, const T *Reference) const
Definition DataflowNode.h:480
FDataflowInput & RegisterInputConnection(const T *Reference, const FName &PropertyName=NAME_None)
Definition DataflowNode.h:266
UE::Dataflow::FContextValue GetValue(UE::Dataflow::FContext &Context, const TAnyType *Reference) const
Definition DataflowNode.h:467
virtual void Evaluate(UE::Dataflow::FContext &Context, const FDataflowOutput *) const
Definition DataflowNode.h:376
virtual bool HasRenderCollectionPrimitives() const
Definition DataflowNode.h:111
TAnyType::FStorageType GetValue(UE::Dataflow::FContext &Context, const TAnyType *Reference) const
Definition DataflowNode.h:461
void UnregisterOutputConnection(const UE::Dataflow::FConnectionReference &Reference)
Definition DataflowNode.h:367
virtual FName GetCategory() const
Definition DataflowNode.h:94
virtual TArray< UE::Dataflow::FRenderingParameter > GetRenderParameters() const
Definition DataflowNode.h:100
virtual void OnInvalidate()
Definition DataflowNode.h:698
virtual void SerializeInternal(FArchive &Ar)
Definition DataflowNode.h:247
static DATAFLOWCORE_API const FName DataflowInput
Definition DataflowNode.h:223
virtual FString GetTags() const
Definition DataflowNode.h:95
FName GetName() const
Definition DataflowNode.h:86
bool IsFrozen() const
Definition DataflowNode.h:385
void SafeForwardInput(UE::Dataflow::FContext &Context, const UE::Dataflow::FConnectionReference &InputReference, const T *Reference) const
Definition DataflowNode.h:604
UE::Dataflow::FContextValue GetValue(UE::Dataflow::FContext &Context, const UE::Dataflow::TConnectionReference< TAnyType > &Reference) const
Definition DataflowNode.h:448
void SetValue(UE::Dataflow::FContext &Context, const typename TAnyType::FStorageType &Value, const TAnyType *Reference) const
Definition DataflowNode.h:547
const T & GetValue(UE::Dataflow::FContext &Context, const UE::Dataflow::TConnectionReference< T > &Reference) const
Definition DataflowNode.h:434
virtual bool SupportsAssetProperty(UObject *Asset) const
Definition DataflowNode.h:705
static DATAFLOWCORE_API const FName DataflowOutput
Definition DataflowNode.h:224
void UnregisterInputConnection(const UE::Dataflow::FConnectionReference &Reference)
Definition DataflowNode.h:359
bool IsColorOverriden() const
Definition DataflowNode.h:395
const FInstancedPropertyBag & GetFrozenFroperties() const
Definition DataflowNode.h:390
FDataflowInput & FindOrRegisterInputArrayConnection(const UE::Dataflow::TConnectionReference< T > &Reference, const FName &ElementPropertyName=NAME_None, const FName &ArrayPropertyName=NAME_None)
Definition DataflowNode.h:313
FOnNodeInvalidated & GetOnNodeInvalidatedDelegate()
Definition DataflowNode.h:760
FDataflowInput & RegisterInputArrayConnection(const UE::Dataflow::TConnectionReference< T > &Reference, const FName &ElementPropertyName=NAME_None, const FName &ArrayPropertyName=NAME_None)
Definition DataflowNode.h:301
T * AsType()
Definition DataflowNode.h:749
Definition DataflowInputOutput.h:149
Definition PropertyBag.h:418
Definition UnrealType.h:6865
Definition DataflowTypePolicy.h:16
Definition DataflowConnection.h:48
Definition DataflowConnection.h:70
Definition DataflowContextCache.h:640
Definition DataflowNode.h:22
UObject * OwningObject
Definition DataflowNode.h:24
FName Name
Definition DataflowNode.h:23
Definition DataflowConnection.h:28
EDirection
Definition DataflowConnection.h:29
Definition DataflowContextCache.h:40
static DATAFLOWCORE_API Type Current()
Definition DataflowNodeParameters.cpp:105
static DATAFLOWCORE_API Type Invalid
Definition DataflowContextCache.h:52
Definition DataflowConnection.h:84