You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
912 B
C#
35 lines
912 B
C#
1 year ago
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace Unity.VisualScripting
|
||
|
{
|
||
|
public static class XFlowGraph
|
||
|
{
|
||
|
public static IEnumerable<IUnit> GetUnitsRecursive(this FlowGraph flowGraph, Recursion recursion)
|
||
|
{
|
||
|
Ensure.That(nameof(flowGraph)).IsNotNull(flowGraph);
|
||
|
|
||
|
if (!recursion?.TryEnter(flowGraph) ?? false)
|
||
|
{
|
||
|
yield break;
|
||
|
}
|
||
|
|
||
|
foreach (var unit in flowGraph.units)
|
||
|
{
|
||
|
yield return unit;
|
||
|
|
||
|
var nestedGraph = (unit as SubgraphUnit)?.nest.graph;
|
||
|
|
||
|
if (nestedGraph != null)
|
||
|
{
|
||
|
foreach (var nestedUnit in GetUnitsRecursive(nestedGraph, recursion))
|
||
|
{
|
||
|
yield return nestedUnit;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
recursion?.Exit(flowGraph);
|
||
|
}
|
||
|
}
|
||
|
}
|