// PUBLIC METHODS: ------------------------------------------------------------------------ public static List <Data> Sort(Node node, BehaviorGraphEditor editor) { if (node == null) { return(new List <Data>()); } Data root = BuildData(editor, node, null); CalculateSizes(root); CalculatePositions(root, 0f); Stack <Data> candidates = new Stack <Data>(); candidates.Push(root); List <Data> list = new List <Data>(); while (candidates.Count > 0) { Data data = candidates.Pop(); list.Add(data); for (int i = 0; i < data.children.Count; ++i) { candidates.Push(data.children[i]); } } return(list); }
// PRIVATE METHODS: ----------------------------------------------------------------------- private static Data BuildData(BehaviorGraphEditor editor, Node node, Data parent) { Data data = new Data( node, GetWidth(editor, node), GetHeight(editor, node), parent ); int count = node.outputs.Count; for (int i = 0; i < count; ++i) { Data currChild = BuildData(editor, node.outputs[i], data); data.children.Add(currChild); } return(data); }
private static float GetHeight(BehaviorGraphEditor editor, Node node) { int nodeID = node.GetInstanceID(); return(editor.nodeEditors[nodeID].GetNodeHeight()); }