public void RecordTreeChange(BehaviourTree tree, string name) { Dictionary <ParentNode, List <Node> > nodeChildren = new Dictionary <ParentNode, List <Node> >(); foreach (var node in tree.Nodes) { if (node is ParentNode parent) { nodeChildren.Add(parent, new List <Node>(parent.GetChildren())); } } undoRecords.Push(new Record(RecordType.TreeChange, name) { tree = tree, nodes = new List <Node>(tree.Nodes), nodeChildren = nodeChildren }); undoRecords.Peek().evaluatedConditionals.UnionWith(tree.GetEvaluatedComposites()); onRecordsChanged?.Invoke(); }