January 23, 2022.
This release addresses the first wave of feedback I’m receiving from early adopters. It includes pull requests from the community: BorMor (Sergey Vikhirev), IceRiverr, Mahoukyou, Mephiztopheles (Markus Ahrweiler), moadib (Marat Yakupov), ryanjon2040, Solessfir (Constantine Romakhov), sturcotte06.
This is the first release for UE 4.27 and UE5 Early Access.
This is also the last release for UE 4.22, 4.23, 4.24. Already a few improvements in v1.1 couldn’t be backported.
MultiGate node which replicates the blueprint node of the same. (submitted by BorMor)OnActorRegistered and OnActorUnregistered waiting until actor would appear in the world, or disappear.UFlowNode_ComponentObserver class can be set to work indefinitely, i.e. On Trigger Enter node would continue to work after the player entered trigger once. The node would trigger the Success output pin every time player entered the trigger. Obviously, a node can be stopped anytime by calling the Stop input pin. If you have any custom Component Observer nodes, you just need to change a single function call in order to use new options. Replace TriggerOutput(TEXT("Success"), true) with OnEventReceived().IdentityTags container instead of a single IdentityTag. And NotifyTags container instead of a single NotifyTag. Changed nodes are: UFlowNode_ComponentObserver, UFlowNode_NotifyActor, UFlowNode_NotifyFromActor. Your code might need to be updated if you have a class inheriting after any of these node classes. (partially implemented by moadib)IdentityMatchType to UFlowNode_ComponentObserver. Now you have better control over which actors should be accepted on the specific nodes, i.e. you can specify to accept actor that has all Identity Tags listed on the node.CustomEvent node has been renamed to the CustomInput. It should fix the confusion caused by the previous name. Now we have pair of nodes working with custom pins on the SubGraph node: CustomInput and CustomOutput.FMovieSceneSequencePlaybackSettings on UFlowNode_PlayLevelSequence node.FLevelSequenceCameraSettings on UFlowNode_PlayLevelSequence node.UFlowNode_Log. (submitted by ryanjon2040)CanUserAddInput and CanUserAddOutput to the blueprint Flow Node. If a method is returning True, the user will be able to add numbered pins on a node in the graph. See Sequence node for reference.Blueprint Display Name property. If set, this overrides asset name as… you guessed… displayed name of the Flow Node in the Flow Graph.Blueprint Description property in Class Details.Blueprint Category property of Flow Node blueprints now overrides the Category property from the C++ Flow Node class. This is the way of setting categories for blueprint nodes from now on.FFlowPin struct. Pins now can have tooltips. Blueprint nodes and Flow Assets are automagically updated. C++ nodes need a manual update as defining pins has changed a bit. C++ pins are now defined via methods like AddInputPins({TEXT("Spawn"), TEXT("Despawn")}); or simply constructing struct with tooltip like InputPins.Add(FFlowPin(TEXT("Reset"), TEXT("MyTooltip")));TriggerOutput() methods, accepting FString, FText, TCHAR*.SetNumberedInputPins() and SetNumberedOutputPins().IsOutputConnected function to Flow Node.InitializeInstance function to Flow Node. It’s called just after creating the node instance while initializing the Flow Asset instance. This happens before executing the graph, only called during gameplay. (proposed by sturcotte06)IsDataValid() method in the UFlowAsset, so it would return the validation result of Flow Nodes. (submitted by sturcotte06)NodeSpecificColors to UFlowGraphSettings (Flow Graph in Project Settings), so it’s possible to override the color of any node. (original code submitted by Mephiztopheles)GetDynamicTitleColor() method to the UFlowNode, so every node instance can have a different color based on the runtime logic. Node color could even change in runtime!NodesHiddenFromPalette in UFlowGraphSettings.LogError method is now marked as const.UFlowNode::LogError) permanently on the screen. If you’d like to use revert to the old behavior, call LogError with parameter OnScreenMessageType equal to Temporary.AllowedNodeClasses list to the UFlowAsset. This lets you limit what nodes can be added to a given Flow Asset type.
AllowedNodeClasses array.IdentityTags (in Flow Component) during gameplay. These methods update the Flow Component Registry in Flow Subsystem.GetComponents() method in Flow Subsystem now returns TSet instead of TArray. Actually, there was no advantage of using TArray here, since we can’t rely on the order of elements returned from the component registry.OnComponentRegistered() and OnComponentUnregistered(). You might need to add UFUNCTION() above your methods bound to these delegates in C++.This set of changes attempts to provide generic support for networked projects, in order to minimize the need to modify the plugin’s code.
Flow Component Registry - an optimized way to find “event actors” in the world. It’s also possible to instantiate client-only Flow Graphs. You can disable Flow Subsystem on clients by changing bCreateFlowSubsystemOnClients flag in Flow Settings (Flow section in Project Settings).IdentityTags in Flow Component.NotifyTags in Flow Component. This way designers can script custom multiplayer logic in their actors.Root Flow is a Flow Asset instanced by an object from outside of the Flow System, i.e. World Settings or Player Controller. This Root Flow can create child Flow Assets in runtime by using the SubGraph node. This release adds more flexibility in managing Root Flows.
StartRootFlow() and FinishRootFlow() methods to the Flow Component, so it’s possible to reduce boilerplate code in actor classes.BeginPlay? If not, you can freely script when it would be started.RootFlowMode.AWorldSettings class.Owner of the Root Flow instance. It’s any object passed as parameter of UFlowSubsystem::StartRootFlow(). Typically it would be an object that called this method, i.e. Flow Component.Owner of the Root Flow instance is now passed to all dependent Flow Asset instances, for easier access. (submitted by sturcotte06)FlowAsset input argument from UFlowSubsystem::FinishRootFlow() method, it was redundant.AFlowWorldSettings than currently chosen in Project Settings. It might happen if you subclassed AFlowWorldSettings. Unfortunately, the engine would instantiate a few World Settings instances, both for your class and parent AFlowWorldSettings class.UFlowAsset class from Flow asset category in “Create Asset” menu, by changing bExposeFlowAssetCreation flag in UFlowGraphEditorSettings. It’s useful if you only wanna use your custom Flow Asset classes in the project.UFlowNode class from Flow asset category in “Create Asset” menu, by changing bExposeFlowNodeCreation flag in UFlowGraphEditorSettings. It’s useful if you only wanna use your custom Flow Node classes in the project.FlowAssetCategoryName to UFlowGraphEditorSettings, so you can override the default name of the Flow asset category.UFlowGraphEditorSettings).SFlowGraphNode_SubGraph widget to allow customizations specific to the SubGraph node.PreDefault. This fixes rare issues with the plugin not being loaded on time while blueprint actors already try to load the Flow Component.EditDefaultsOnly, you need to change to correct EditAnywhere specifier. Otherwise, the property won’t be visible in the Details panel of the Flow Asset.[/Script/FlowEditor.FlowEditorSettings] to [/Script/FlowEditor.FlowGraphSettings].TemplateAsset property in FlowAsset is now private. Use GetTemplateAsset() method, if you need to access it.FlowDebuggerToolbar class/file into FlowAssetToolbar. Simplified code around creating it, should be less confusing to extend it. Although you might need to update your code if you’ve done any changes around the toolbar.