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);