UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DataflowInstance.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "UObject/ObjectPtr.h"
8
9#include "DataflowInstance.generated.h"
10
12{
13 class FVariablesOverridesDetails;
14}
15
17{
18 // need to be in the header to be used by the templated structure override methods
19 template<typename T, typename TWriteElementFunction>
21 {
22 if (const FPropertyBagPropertyDesc* Desc = Variables.FindPropertyDescByName(VariableName))
23 {
26 {
27 bool bSuccess = true;
28 ArrayRef->EmptyValues();
29 ArrayRef->AddValues(Values.Num());
30 for (int32 Idx = 0; Idx < Values.Num(); ++Idx)
31 {
33 }
34 if (bSuccess)
35 {
36 OutGuid = Desc->ID;
37 }
38 return bSuccess;
39 }
40 }
41 OutGuid.Invalidate();
42 return false;
43 }
44}
45
46class UDataflow;
48
54USTRUCT()
56{
58
60
61 // prevent the copy constructor to avoid having a copy with the same owner
62 // use the assignment operator instead on a newly created FDataflowVariableOverrides with the right owner to copy its content over
64
66
68 DATAFLOWENGINE_API void RemoveAllVariables();
69
72
74 DATAFLOWENGINE_API bool HasVariable(FName VariableName) const;
75
76 DATAFLOWENGINE_API bool IsVariableOverridden(FName VariableName) const;
77
79
81
82 DATAFLOWENGINE_API static FName GetVariablePropertyName();
83
85 DATAFLOWENGINE_API bool OverrideVariableBool(FName VariableName, bool bValue);
86
88 DATAFLOWENGINE_API bool OverrideVariableBoolArray(FName VariableName, const TArray<bool>& Values);
89
91 DATAFLOWENGINE_API bool OverrideVariableInt(FName VariableName, int64 Value);
92
94 DATAFLOWENGINE_API bool OverrideVariableInt32Array(FName VariableName, const TArray<int32>& Values);
95
97 DATAFLOWENGINE_API bool OverrideVariableInt64Array(FName VariableName, const TArray<int64>& Values);
98
100 DATAFLOWENGINE_API bool OverrideVariableFloat(FName VariableName, float Value);
101
103 DATAFLOWENGINE_API bool OverrideVariableFloatArray(FName VariableName, const TArray<float>& Values);
104
106 DATAFLOWENGINE_API bool OverrideVariableObject(FName VariableName, const UObject* Value);
107
109 DATAFLOWENGINE_API bool OverrideVariableObjectArray(FName VariableName, const TArray<TObjectPtr<UObject>>& Values);
110
112 DATAFLOWENGINE_API bool OverrideVariableObjectArray(FName VariableName, const TArray<UObject*>& Values);
113
115 DATAFLOWENGINE_API bool OverrideVariableName(FName VariableName, FName Value);
116
118 DATAFLOWENGINE_API bool OverrideVariableName(FName VariableName, const TArray<FName>& Values);
119
121 DATAFLOWENGINE_API bool OverrideVariableString(FName VariableName, FString Value);
122
124 DATAFLOWENGINE_API bool OverrideVariableString(FName VariableName, const TArray<FString>& Values);
125
126 template <typename T>
127 bool OverrideVariableStruct(FName VariableName, const T& Value)
128 {
129 if (const FPropertyBagPropertyDesc* Desc = Variables.FindPropertyDescByName(VariableName))
130 {
131 if (Variables.SetValueStruct(VariableName, Value) == EPropertyBagResult::Success)
132 {
133 OverriddenVariableGuids.AddUnique(Desc->ID);
134 return true;
135 }
136 }
137 return false;
138 }
139
140 template <typename T>
141 bool OverrideVariableStructArray(FName VariableName, const TArray<T>& Values)
142 {
144
145 auto WriteStructValue = [](FPropertyBagArrayRef& ArrayRef, int32 Idx, const T& Value)
146 {
147 return ArrayRef.SetValueStruct(Idx, Value);
148 };
149
150 return OverrideVariableArrayAndNotify(Variables, VariableName, Values, WriteStructValue);
151 }
152
153#if WITH_EDITOR
154
155 void OnOwnerPostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent);
156 void OnDataflowVariablesChanged(const UDataflow* DataflowAsset, FName VariableName);
157#endif
158
159private:
160 friend class UE::Dataflow::Private::FVariablesOverridesDetails;
161
162 DATAFLOWENGINE_API const FInstancedPropertyBag* GetDefaultVariablesFromAsset() const;
163
164 DATAFLOWENGINE_API FInstancedPropertyBag& GetOverridenVariables();
165
167 DATAFLOWENGINE_API bool IsVariableOverridden(const FGuid PropertyID) const;
168
170 DATAFLOWENGINE_API void SetVariableOverridden(const FGuid PropertyID, const bool bIsOverridden);
171
172 void RemoveOverridenVariablesNotInDataflowAsset();
173
174private:
175 void SetVariableOverrideAndNotify(const FGuid& PropertyID, bool bOverrideState);
176
177 template<typename T, typename TWriteElementFunction>
179 {
180 FGuid PropertyGuid;
182 if (bSuccess)
183 {
184 SetVariableOverrideAndNotify(PropertyGuid, true);
185 }
186 return bSuccess;
187 }
188
189private:
190
192 UPROPERTY(EditAnywhere, Category = "Dataflow", meta = (FixedLayout, ShowOnlyInnerProperties))
193 FInstancedPropertyBag Variables;
194
196 UPROPERTY()
197 TArray<FGuid> OverriddenVariableGuids;
198
199 FDataflowInstance* Owner = nullptr;
200};
201
205USTRUCT()
207{
209
212
213public:
214 DATAFLOWENGINE_API void SetDataflowAsset(UDataflow* DataflowAsset);
215
216 DATAFLOWENGINE_API UDataflow* GetDataflowAsset() const;
217
218 DATAFLOWENGINE_API void SetDataflowTerminal(FName TerminalNodeName);
219
220 DATAFLOWENGINE_API FName GetDataflowTerminal() const;
221
222 DATAFLOWENGINE_API const FInstancedPropertyBag& GetVariables() const;
223
225
227 DATAFLOWENGINE_API static FName GetDataflowTerminalPropertyName();
228
230 DATAFLOWENGINE_API static FName GetDataflowAssetPropertyName();
231
233 DATAFLOWENGINE_API static FName GetVariableOverridesPropertyName();
234
235 DATAFLOWENGINE_API const FDataflowVariableOverrides& GetVariableOverrides() const;
236
237 DATAFLOWENGINE_API FDataflowVariableOverrides& GetVariableOverrides();
238
239 DATAFLOWENGINE_API void SyncVariables();
240
245 DATAFLOWENGINE_API bool UpdateOwnerAsset(bool bUpdateDependentAssets = false) const;
246
247#if WITH_EDITOR
249#endif
250
251private:
253 UPROPERTY(EditAnywhere, Category = "Dataflow")
254 TObjectPtr<UDataflow> DataflowAsset;
255
257 UPROPERTY(EditAnywhere, Category = "Dataflow")
258 FName DataflowTerminal;
259
261 UPROPERTY(EditAnywhere, Category = "Dataflow", meta=(ShowOnlyInnerProperties))
262 FDataflowVariableOverrides VariableOverrides;
263
264private:
265 friend class UE::Dataflow::Private::FVariablesOverridesDetails;
266
267#if WITH_EDITOR
269
271#endif
272
273 // Owning Object
274 UPROPERTY()
275 TObjectPtr<UObject> Owner = nullptr;
276};
277
278UINTERFACE(MinimalAPI)
283
288{
290
291public:
292 virtual const FDataflowInstance& GetDataflowInstance() const = 0;
294};
295
297{
300
303
306
309
312}
bool bSuccess
Definition ConvexDecomposition3.cpp:819
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UINTERFACE(...)
Definition ObjectMacros.h:780
#define USTRUCT(...)
Definition ObjectMacros.h:746
TStructOnScope< T > MakeStructOnScope(TArgs &&... Args)
Definition StructOnScope.h:373
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition PropertyBag.h:971
Definition DataflowInstance.h:288
virtual const FDataflowInstance & GetDataflowInstance() const =0
virtual FDataflowInstance & GetDataflowInstance()=0
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition SharedPointer.h:692
Definition ValueOrError.h:58
Definition DataflowInstance.h:280
Definition DataflowObject.h:106
Definition Interface.h:19
Definition Object.h:95
Definition OverriddenPropertySet.cpp:45
Definition DataflowInstance.h:17
bool OverrideVariableArray(FInstancedPropertyBag &Variables, FName VariableName, const TArray< T > &Values, const TWriteElementFunction &WriteElementFunction, FGuid &OutGuid)
Definition DataflowInstance.h:20
Definition DataflowInstance.cpp:10
TArray< FName > GetTerminalNodeNames(const UDataflow *DataflowAsset)
Definition DataflowInstance.cpp:94
FName GetTerminalNodeNameFromObject(UObject *Obj)
Definition DataflowInstance.cpp:71
UDataflow * GetDataflowAssetFromObject(UObject *Obj)
Definition DataflowInstance.cpp:61
bool HasValidDataflowAsset(UObject *Obj)
Definition DataflowInstance.cpp:14
Definition DataflowGraph.cpp:118
Definition AdvancedWidgetsModule.cpp:13
Definition DataflowInstance.h:207
DATAFLOWENGINE_API void SyncVariables()
Definition DataflowInstance.cpp:591
DATAFLOWENGINE_API const FInstancedPropertyBag & GetVariables() const
Definition DataflowInstance.cpp:571
Definition DataflowInstance.h:56
bool OverrideVariableStruct(FName VariableName, const T &Value)
Definition DataflowInstance.h:127
bool OverrideVariableStructArray(FName VariableName, const TArray< T > &Values)
Definition DataflowInstance.h:141
FDataflowVariableOverrides(const FDataflowVariableOverrides &Other)=delete
Definition Guid.h:109
Definition PropertyBag.h:418
UE_API const FPropertyBagPropertyDesc * FindPropertyDescByName(const FName Name) const
Definition PropertyBag.cpp:2221
UE_API TValueOrError< FPropertyBagArrayRef, EPropertyBagResult > GetMutableArrayRef(const FPropertyBagPropertyDesc &Desc)
Definition PropertyBag.cpp:2753
Definition PropertyBag.h:249
Definition UnrealType.h:6865
Definition ObjectPtr.h:488