public static void Duplicate(InAudioNode audioNode)
        {
            InUndoHelper.DoInGroup(() =>
            {
                List <Object> toUndo = new List <Object>(AudioBankWorker.GetAllBanks().ConvertAll(b => b as Object));

                toUndo.Add(audioNode._parent);
                toUndo.AddRange(audioNode._parent.GetAuxData());
                toUndo.Add(audioNode.GetBank());

                InUndoHelper.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)
                    {
                        NodeDuplicate(oldNode, newNode, gameObject);
                    }
                });
            });
        }
        private static void MoveNode(InAudioNode node, InAudioNode nodeToMove)
        {
            InUndoHelper.RecordObject(
                new UnityEngine.Object[]
                { node, node._nodeData, node._parent, node._parent != null ? node._parent._nodeData : null, nodeToMove._parent._nodeData, nodeToMove, nodeToMove._parent, nodeToMove._parent._nodeData }.AddObj(
                    AudioBankWorker.GetAllBanks().ToArray()),
                "Audio Node Move");

            NodeWorker.ReasignNodeParent(nodeToMove, node);
            AudioBankWorker.RebuildBanks();
            Event.current.UseEvent();
        }
        public static void CopyTo(InAudioNode audioNode, InAudioNode newParent)
        {
            List <Object> toUndo = new List <Object>(AudioBankWorker.GetAllBanks().ConvertAll(b => b as Object));

            toUndo.Add(audioNode._parent);
            toUndo.AddRange(audioNode._parent.GetAuxData());
            toUndo.Add(audioNode.GetBank());

            InUndoHelper.RecordObjectFull(toUndo.ToArray(), "Undo Move");

            NodeWorker.DuplicateHierarchy(audioNode, newParent, newParent.gameObject, (@oldNode, newNode) =>
            {
                var gameObject = newParent.gameObject;
                if (oldNode._nodeData != null)
                {
                    NodeDuplicate(oldNode, newNode, gameObject);
                }
            });
        }