-
Notifications
You must be signed in to change notification settings - Fork 271
Flow v2.1
Krzysiek Justyński edited this page Mar 8, 2025
·
21 revisions
This is the upcoming release. This page is updated regularly, after pushing changes to the repository.
This release includes pull requests from the community: 39M (Nil), fchampoux (pixelchamp), HomerJohnston (Kyle Wilcox), jnucc, LindyHopperGT, Maksym Kapelianovych, Rhillion, Ryan DowlingSoka, Soraphis.
This is the first release for UE 5.6.
- Modified
UFlowSubsystem::RemoveSubFlow
. Now we're invalidating theAssetInstance->NodeOwningThisAssetInstance
pointer after callingAssetInstance->FinishFlow
, as this point may be needed in the FinishFlow method. (contributed by fchampoux) - Exposed
CreateFlowInstance
as a public method. Useful in projects where Root-SubGraph relations are "replaced" with a loose set of graphs, i.e. card games.- Moved
LoadSynchronous()
calls out of this method, so external code is allowed to use async asset loading. - Methods operating on asset templates -
AddInstancedTemplate
,RemoveInstancedTemplate
- turned back toprotected
. It turns out it doesn't make sense to duplicate the logic of the CreateFlowInstance method.
- Moved
- Graph refresh refactored. (contributed by HomerJohnston)
- The goal of this PR is to make the graph editor stop refreshing the entire graph during as many events as possible. It also fixes minor bugs related to orphaned pins, running undo/redo commands on edge cases, and unnecessary graph dirtying on edge cases such as when nodes contain orphaned or invalid pins.
-
BREAKING CHANGE. Public void
UFlowGraphNode::RefreshContextPins(bool)
changed to protected voidUFlowGraphNode::RefreshContextPins()
. The existing system has some logic that could result in attempts to recursively call ReconstructNode -> RefreshContextPins -> ReconstructNode -> RefreshContextPins. Currently, there are bools to guard against this, but both methods are exposed and this feels unclean. -
UFlowGraphNode::PostLoad
now rebuilds the unserialized InputPins and OutputPins arrays using the serialized Pins array. -
UFlowAsset::HarvestNodeConnections
- made this function able to harvest a single node, or harvest the whole graph (pass in nullptr to harvest the whole graph, or pass in a single node to harvest just that node). ThenUFlowGraphNode::NodeConnectionListChanged
updates node connections for only a single node when its connections are changed. - Changed the right-click context menu command, "Refresh Context Pins", to "Reconstruct Node".
- Modified the following functions to only refresh individual nodes instead of the whole graph by changing NotifyGraphChanged() calls to NotifyNodeChanged(Node):
FFlowGraphSchemaAction_NewNode::CreateNode
,UFlowGraphSchema::TryCreateConnection
,UFlowGraphSchema::BreakNodeLinks
,UFlowGraphNode::RemoveOrphanedPin
,UFlowGraphNode::AddInstancePin
,UFlowGraphNode::RemoveInstancePin
. -
FlowGraphSchemaAction_NewNode::CreateNode
now runs ReconstructNode() instead of only spawning default pins. -
UFlowGraphNode::OnGraphRefresh
now runs ReconstructNode() instead of RefreshContextPins(), on all nodes. -
UFlowGraphNode::RefreshContextPins
- no longer runs if an editor transaction is in progress (running undo/redo). -
UFlowGraphNode::HavePinsChanged
- now disregards any orphaned pin connections. - Added a new delegate
UFlowGraphNode::OnReconstructNodeCompleted
to trigger the rebuild of SFlowGraphNode widgets whenever ReconstructNode is called. -
SFlowGraphNode
added destructor to unbind from UFlowGraphNode delegates. -
UFlowGraphSchema
added virtual bool ShouldAlwaysPurgeOnModification() const override { return false; } to reduce unnecessary graph refreshes. -
UFlowNodeAddOn
- GetContextInput/OutputPins functions changed to ignore invalid pins and write a log warning for invalid pins.
- Added "Select" button which will select and focus Custom Event node with the same name. If such a node does not exist in the graph, the button will be inactive. (contributed by Maksym Kapelianovych)
-
UFlowNode::TriggerOutput
won't execute its logic if a given node is deactivated. (contributed by 39M) - Fixed
UFlowNode::Branch
never deactivating after checking its condition. (fix suggested by Geckostya) - Added missing calls to parent class
Cleanup
method. This fixes calling Cleanup on the attached AddOns. (contributed by Rhillion) - Fixed: node pass-through does not work under closed-loop conditions. (contributed by MaksymKapelianovych)
- Several improvements to copy/pasting nodes. (contributed by MaksymKapelianovych)
- Reset EventName in
UFlowNode_CustomInput
after duplicating or copying/pasting. - Fix pasting nodes into Flow Asset when Flow Asset cannot accept such nodes (node or asset class is denied).
- If among selected nodes there are nodes that cannot be deleted, they will stay in the graph as is and all "deletable" nodes will be deleted (currently none of the nodes will be deleted in such case).
- Reset EventName in
- Exposed ability to override node's Category via
OverridenNodeCategories
list Flow Graph project settings. This way you can fully reorganize Flow Palette to your liking. (inspired by LindyHopperGT's proposal) - The first-ever update to built-in node categories. (inspired by LindyHopperGT's proposal)
- I did partially accept a proposed update to the category layout. I updated the defaults, which are more flat than proposed, as this would be enough for projects starting with a limited number of project-specific nodes.
- It feels good to refresh categories after a few years of using that palette. The
World
category has been effectively renamedActor
since a growing number of projects embrace ECS. It's useful to separate nodes tied to the OOP paradigm from multi-threaded ECS. - BREAKING CHANGE. Flow Node source files have been moved to matching folder names. If your code contains C++ classes referencing built-it Flow Node classes, you might need to update your includes.
- Added custom Make/Break implementation for the
FFlowPin
struct to avoid using the "BlueprintReadWrite" specific - since that would block users from compiling out cosmetic properties in non-editor builds. (contributed by LindyHopperGT) - Added additional constructors for
FFlowDataPinResult_Enum(
) used in an AI Flow node: "GetBlackboardValues". (contributed by LindyHopperGT) -
SubGraph
node: added null checks to fix crash while attempting to load Flow Asset removed with "Force Delete" option. - Removed a deprecated
Call Owner Function
feature. - Adaptive Build fix for when all FlowGraph is built as separate source files. (contributed by jnucc)
- There are several improvements to Flow breakpoints.
- Node and pin breakpoints are now stored locally for every user. This is thanks to moving data structures out of
UFlowGraphNode
, we no longer need to save assets to remember added breakpoints. Data is now stored in .ini created for this purposeUFlowDebuggerSettings
. Logic is handled by the newUFlowDebuggerSubsystem
class. (contributed by Maksym Kapelianovych)- Any breakpoints set on older plugin versions will vanish.
- POTENTIALLY BREAKING CHANGE:
FFlowPinTrait
struct has been renamed toFFlowBreakpoint
and moved to theFlowDebugger
module. If you utilize this struct in your custom code, please re-add it to your project code. - Added a new module to Flow plugin,
FlowDebugger
which is aDeveloperTool
module. This is whereUFlowDebuggerSubsystem
lives. This is extended by pre-existing editor class:UFlowDebugEditorSubsystem
.
- Refactored old breakpoint logic to open doors to building a separate cook-only graph debugger. If anyone would be willing to implement such a feature, of course. This would require much work, but the Flow Graph community keeps surprising!
- Decoupled triggering breakpoints from the Flow Editor module.
UFlowGraphNode
no longer operates on breakpoints. Instead,UFlowDebuggerSubsystem
binds directly to the runtimeOnPinTriggered
delegate. - Pin breakpoint is now identified as
NodeGuid
andPinName
instead ofUEdGraphPin
. Thanks to this it's now possible to bind toOnPinTriggered
delegate outside of the editor! Events shall be received in the Standalone game, non-shipping game builds. - Wrapped
UEdGraphNod
pointer in runtime Flow Node class withWITH_EDITORONLY_DATA
since this isn't even loaded in a Standalone game. - Now it's possible to add custom logic to "On Pin Triggered" logic outside of the runtime module. You can add what you want by extending UFlowDebuggerSubsystem or UFlowDebugEditorSubsystem.
- Decoupled triggering breakpoints from the Flow Editor module.
- Node and pin breakpoints are now stored locally for every user. This is thanks to moving data structures out of
- Added
TriggerRootFlowCustomInput
method. (contributed by Soraphis) - Renamed methods related to Custom Output events, now called
BP_OnRootFlowCustomEvent
andOnRootFlowCustomEvent
.
Got any questions? Discuss things related to the plugin on the dedicated Discord server.