protected override void OnDrop(InAudioBankLink node, Object[] objects) { InUndoHelper.DragNDropUndo(node, "Bank Drag N Drop"); InAudioBankLink target = objects[0] as InAudioBankLink; NodeWorker.ReasignNodeParent(target, node); }
public static bool OnDrop(InAudioEventNode audioevent, Object[] objects) { InUndoHelper.DoInGroup(() => { //if (audioevent.Type == EventNodeType.Folder) //{ // UndoHelper.RecordObjectInOld(audioevent, "Created event"); // audioevent = CreateNode(audioevent, EventNodeType.Event); //} if (objects[0] as InAudioEventNode) { var movingEvent = objects[0] as InAudioEventNode; if (movingEvent.gameObject != audioevent.gameObject) { if (EditorUtility.DisplayDialog("Move?", "Warning, this will break all external references to this and all child nodes!\n" + "Move node from\"" + movingEvent.gameObject.name + "\" to \"" + audioevent.gameObject.name + "\"?", "Ok", "Cancel")) { InUndoHelper.DoInGroup(() => { CopyTo(movingEvent, audioevent); DeleteNodeNoGroup(movingEvent); }); } } else { InUndoHelper.RecordObjectFull(new Object[] { audioevent, movingEvent, movingEvent._parent }, "Event Move"); NodeWorker.ReasignNodeParent(movingEvent, audioevent); audioevent.EditorSettings.IsFoldedOut = true; } } var audioNode = objects[0] as InAudioNode; if (audioNode != null && audioNode.IsPlayable) { InUndoHelper.RecordObjectFull(audioevent, "Adding of Audio Action"); var action = AddEventAction <InEventAudioAction>(audioevent, EventActionTypes.Play); action.Node = audioNode; } var musicGroup = objects[0] as InMusicGroup; if (musicGroup != null) { InUndoHelper.RecordObjectFull(audioevent, "Adding of Music Action"); var action = AddEventAction <InEventMusicControl>(audioevent, EventActionTypes.PlayMusic); action.MusicGroup = musicGroup; } Event.current.UseEvent(); }); return(true); }
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(), "Audio Node Move"); NodeWorker.ReasignNodeParent(nodeToMove, node); Event.current.UseEvent(); }
protected override void OnDrop(InAudioNode node, UnityEngine.Object[] objects) { if (objects[0] as InAudioNode != null) //Drag N Drop internally in the tree, change the parent { node.IsFoldedOut = true; var nodeToMove = objects[0] as InAudioNode; UndoHelper.RecordObject( new UnityEngine.Object[] { node, node.NodeData, nodeToMove.Parent.NodeData, nodeToMove, nodeToMove.Parent }.AddObj( TreeWalker.FindAll(InAudioInstanceFinder.DataManager.BankLinkTree, link => link.Type == AudioBankTypes.Link ? link.LazyBankFetch : null).ToArray()), "Audio Node Move"); NodeWorker.ReasignNodeParent(nodeToMove, node); AudioBankWorker.RebuildBanks(InAudioInstanceFinder.DataManager.BankLinkTree, InAudioInstanceFinder.DataManager.AudioTree); } else if (node.Type != AudioNodeType.Audio) //Create new audio nodes when we drop clips { UndoHelper.RecordObject(UndoHelper.NodeUndo(node), "Adding Nodes to " + node.Name); AudioClip[] clips = objects.Convert(o => o as AudioClip); Array.Sort(clips, (clip, audioClip) => StringLogicalComparer.Compare(clip.name, audioClip.name)); for (int i = 0; i < clips.Length; ++i) { var clip = clips[i]; var child = AudioNodeWorker.CreateChild(node, AudioNodeType.Audio); var path = AssetDatabase.GetAssetPath(clip); try { //Try and get the name of the clip. Gets the name and removes the end. Assets/IntroSound.mp3 -> IntroSound int lastIndex = path.LastIndexOf('/') + 1; child.Name = path.Substring(lastIndex, path.LastIndexOf('.') - lastIndex); } catch (Exception) //If it happens to be a mutant path. Not even sure if this is possible, but better safe than sorry { child.Name = node.Name + " Child"; } (child.NodeData as InAudioData).EditorClip = clip; (child.NodeData as InAudioData).RuntimeClip = clip; AudioBankWorker.AddNodeToBank(child, clip); Event.current.Use(); } } else //Then it must be an audio clip dropped on an audio node, so assign the clip to that node { var nodeData = (node.NodeData as InAudioData); if (nodeData != null) { UndoHelper.RecordObject(UndoHelper.NodeUndo(node), "Change Audio Clip In " + node.Name); nodeData.EditorClip = objects[0] as AudioClip; if (Application.isPlaying) { if (node.GetBank().IsLoaded) { nodeData.RuntimeClip = objects[0] as AudioClip; } } AudioBankWorker.SwapClipInBank(node, objects[0] as AudioClip); } } }