public static void Duplicate(InAudioNode audioNode) { UndoHelper.DoInGroup(() => { List <Object> toUndo = TreeWalker.FindAll(audioNode, node => node.GetBank().LazyBankFetch).ConvertList <InAudioBank, Object>(); toUndo.Add(audioNode.Parent); toUndo.Add(audioNode.GetBank()); UndoHelper.RecordObjectFull(toUndo.ToArray(), "Undo Duplication Of " + audioNode.Name); if (audioNode.Parent.Type == AudioNodeType.Random) { (audioNode.Parent.NodeData as RandomData).weights.Add(50); } NodeWorker.DuplicateHierarchy(audioNode, (@oldNode, newNode) => { var gameObject = audioNode.gameObject; if (oldNode.NodeData != null) { Type type = oldNode.NodeData.GetType(); newNode.NodeData = gameObject.AddComponentUndo(type) as InAudioNodeBaseData; EditorUtility.CopySerialized(oldNode.NodeData, newNode.NodeData); if (newNode.Type == AudioNodeType.Audio) { AudioBankWorker.AddNodeToBank(newNode, (oldNode.NodeData as InAudioData).EditorClip); } } }); }); }
private static void DeleteNodeRec(InAudioNode node) { AudioBankWorker.RemoveNodeFromBank(node); /*TreeWalker.ForEach(InAudioInstanceFinder.DataManager.EventTree, @event => * { * for (int i = 0; i < @event.ActionList.Count; i++) * { * var action = @event.ActionList[i]; * if (action.Target == node) * { * UndoHelper.RegisterFullObjectHierarchyUndo(action); * } * } * });*/ for (int i = 0; i < node.Children.Count; i++) { DeleteNodeRec(node.Children[i]); } UndoHelper.Destroy(node.NodeData); UndoHelper.Destroy(node); }
public static void ConvertNodeType(InAudioNode node, AudioNodeType newType) { if (newType == node.Type) { return; } UndoHelper.DoInGroup(() => { UndoHelper.RecordObjectFull(new Object[] { node, node.NodeData }, "Change Node Type"); AudioBankWorker.RemoveNodeFromBank(node); node.Type = newType; UndoHelper.Destroy(node.NodeData); AddDataClass(node); }); }