From ed408917c6a1298e103ef73a147b01737c3695e8 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 18 Nov 2025 16:41:24 +0100 Subject: [PATCH] Fix Visject Surface node dependent connection types init on load #3802 --- Source/Editor/Surface/SurfaceNode.cs | 21 ------------------ .../VisjectSurfaceContext.Serialization.cs | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/Source/Editor/Surface/SurfaceNode.cs b/Source/Editor/Surface/SurfaceNode.cs index e1d7c131f..6312bd68d 100644 --- a/Source/Editor/Surface/SurfaceNode.cs +++ b/Source/Editor/Surface/SurfaceNode.cs @@ -431,27 +431,6 @@ namespace FlaxEditor.Surface /// public bool HasIndependentBoxes => Archetype.IndependentBoxes != null; - /// - /// Gets a value indicating whether this node has dependent boxes with assigned valid types. Otherwise any box has no dependent type assigned. - /// - public bool HasDependentBoxesSetup - { - get - { - if (Archetype.DependentBoxes == null || Archetype.IndependentBoxes == null) - return true; - - for (int i = 0; i < Archetype.DependentBoxes.Length; i++) - { - var b = GetBox(Archetype.DependentBoxes[i]); - if (b != null && b.CurrentType == b.DefaultType) - return false; - } - - return true; - } - } - private static readonly List UpdateStack = new List(); /// diff --git a/Source/Editor/Surface/VisjectSurfaceContext.Serialization.cs b/Source/Editor/Surface/VisjectSurfaceContext.Serialization.cs index a00d37aef..ed19b937f 100644 --- a/Source/Editor/Surface/VisjectSurfaceContext.Serialization.cs +++ b/Source/Editor/Surface/VisjectSurfaceContext.Serialization.cs @@ -178,19 +178,31 @@ namespace FlaxEditor.Surface // Update boxes types for nodes that dependant box types based on incoming connections { - bool keepUpdating = false; - int updateLimit = 100; + bool keepUpdating = true; + int updatesMin = 2, updatesMax = 100; do { + keepUpdating = false; for (int i = 0; i < RootControl.Children.Count; i++) { - if (RootControl.Children[i] is SurfaceNode node && !node.HasDependentBoxesSetup) + if (RootControl.Children[i] is SurfaceNode node) { node.UpdateBoxesTypes(); - keepUpdating = true; + var arch = node.Archetype; + if (arch.DependentBoxes != null && arch.IndependentBoxes != null) + { + foreach (var boxId in arch.DependentBoxes) + { + var b = node.GetBox(boxId); + if (b != null && b.CurrentType == b.DefaultType) + { + keepUpdating = true; + } + } + } } } - } while (keepUpdating && updateLimit-- > 0); + } while ((keepUpdating && --updatesMax > 0) || --updatesMin > 0); } Loaded?.Invoke(this);