public bool OnGUI() { EditorGUILayout.HelpBox("Do not Undo these operations! No guarantee about what could break.", MessageType.Warning); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.HelpBox( "While the InAudio project hopefully is in perfect shape, bugs can happen. This will attempt to fix any problems.", MessageType.Info); if (GUILayout.Button("Fix integrity")) { FixParentChild(); Debug.Log("Reassigned parent/childs"); AudioBankWorker.RebuildBanks(); Debug.Log("All Banks rebuild"); } EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.HelpBox( "No nodes should be unused, but in the case there is this will remove all unused data.\nNo performance is lost if unused nodes remains, but it does waste a bit of memory. This will clean up any unused data", MessageType.Info); if (GUILayout.Button("Clean up unused data")) { DataCleanup.Cleanup(); } return(false); }
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]); } InUndoHelper.Destroy(node._nodeData); InUndoHelper.Destroy(node); }
private void CreateBankLinkPrefab() { GameObject go = new GameObject(); Manager.BankLinkTree = AudioBankWorker.CreateTree(go); SaveAndLoad.CreateAudioBankLinkPrefab(go); }
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); } }); }); }
public static void StartFromScratch(InCommonDataManager Manager) { SystemFolderHelper.CreateIfMissing(FolderSettings.BankCreateFolder); try { DataCleanup.Cleanup(DataCleanup.CleanupVerbose.Silent); } catch (Exception) { //Do nothing as something is seriously wrong } int levelSize = 3; GameObject audioGO = new GameObject(); GameObject eventGO = new GameObject(); GameObject busGO = new GameObject(); GameObject bankGO = new GameObject(); Manager.BusTree = AudioBusWorker.CreateTree(busGO); Manager.BankLinkTree = AudioBankWorker.CreateTree(bankGO); Manager.AudioTree = AudioNodeWorker.CreateTree(audioGO, levelSize, Manager.BusTree); Manager.EventTree = AudioEventWorker.CreateTree(eventGO, levelSize); SaveAndLoad.CreateDataPrefabs(Manager.AudioTree.gameObject, Manager.EventTree.gameObject, Manager.BusTree.gameObject, Manager.BankLinkTree.gameObject); Manager.Load(true); if (Manager.BankLinkTree != null) { var bankLink = Manager.BankLinkTree.Children[0]; bankLink.Name = "Default - Auto loaded"; bankLink.AutoLoad = true; NodeWorker.AssignToNodes(Manager.AudioTree, node => { var data = (node.NodeData as InFolderData); if (data != null) { data.BankLink = Manager.BankLinkTree.GetChildren[0]; } }); NodeWorker.AssignToNodes(Manager.AudioTree, node => node.Bus = Manager.BusTree); AssetDatabase.Refresh(); DataCleanup.Cleanup(DataCleanup.CleanupVerbose.Silent); EditorApplication.SaveCurrentSceneIfUserWantsTo(); } else { Debug.LogError("There was a problem creating the data."); } }
private void DeleteNode(InAudioBankLink root, InAudioBankLink toDelete) { if (toDelete.GetChildren.Count > 0) { EditorUtility.DisplayDialog("Cannot delete bank", "Cannot delete folder with bank children", "ok"); return; } Func <InAudioNode, bool> usedBankRoot = node => { if (node.Type == AudioNodeType.Folder) { var data = node.NodeData as InFolderData; if (node.IsRoot && data.BankLink == toDelete) { return(true); } else if (node.Type == AudioNodeType.Folder && data.BankLink == toDelete) { return(true); } } return(false); }; if (TreeWalker.Any(InAudioInstanceFinder.DataManager.AudioTree, usedBankRoot)) { EditorUtility.DisplayDialog("Cannot delete bank", "Cannot delete bank that is in use", "ok"); return; } int nonFolderCount = TreeWalker.Count(root, link => link.Type == AudioBankTypes.Link); if (nonFolderCount == 1 && toDelete.Type == AudioBankTypes.Link) { EditorUtility.DisplayDialog("Cannot delete the bank", "Cannot delete the last bank", "ok"); return; } if (toDelete.Type == AudioBankTypes.Link && !EditorUtility.DisplayDialog("Delete bank?", "This cannot be undone.", "Delete", "Do nothing")) { return; } if (toDelete.Type == AudioBankTypes.Link) { AudioBankWorker.DeleteBank(toDelete); } else if (toDelete.Type == AudioBankTypes.Folder) { AudioBankWorker.DeleteFolder(toDelete); } }
private void CreateChild(InAudioNode parent, AudioNodeType type) { UndoHelper.RecordObjectFull(new UnityEngine.Object[] { parent, parent.GetBank().LazyBankFetch }, "Create Audio Node"); var newNode = AudioNodeWorker.CreateChild(parent, type); if (type == AudioNodeType.Audio) { AudioBankWorker.AddNodeToBank(newNode, null); } }
private static void NodeDuplicate(InAudioNode oldNode, InAudioNode newNode, GameObject gameObject) { 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); } }
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(); }
private void CreateBank(InAudioBankLink parent, AudioBankTypes type) { //TODO make real undo InUndoHelper.RecordObjectFull(parent, "Bank " + (type == AudioBankTypes.Folder ? "Folder " : "") + "Creation"); if (type == AudioBankTypes.Folder) { AudioBankWorker.CreateFolder(parent.gameObject, parent, GUIDCreator.Create()); } else { AudioBankWorker.CreateBankLink(parent.gameObject, parent, GUIDCreator.Create()); } }
public static void ConvertNodeType(InAudioNode node, AudioNodeType newType) { if (newType == node._type) { return; } InUndoHelper.DoInGroup(() => { InUndoHelper.RecordObjectFull(new Object[] { node, node._nodeData }, "Change Node Type"); AudioBankWorker.RemoveNodeFromBank(node); node._type = newType; InUndoHelper.Destroy(node._nodeData); AddDataClass(node); }); }
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); } }); }
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); } } }
public static void Draw(InAudioNode node) { UndoHelper.GUIUndo(node, "Name Change", ref node.Name, () => EditorGUILayout.TextField("Name", node.Name)); Rect area = GUILayoutUtility.GetLastRect(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); InAudioData audioData = node.NodeData as InAudioData; EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(""); area = GUILayoutUtility.GetLastRect(); Rect objectArea = area; if (Application.isPlaying) { objectArea.width -= 100; } var clip = (AudioClip)EditorGUI.ObjectField(objectArea, audioData.EditorClip, typeof(AudioClip), false); Rect buttonArea = area; if (Application.isPlaying) { buttonArea.x += buttonArea.width - 100; buttonArea.width = 70; GUI.enabled = false; EditorGUI.LabelField(buttonArea, "Is Loaded"); buttonArea.x += 70; buttonArea.width = 10; EditorGUI.Toggle(buttonArea, audioData.RuntimeClip != null); GUI.enabled = true; } if (GUILayout.Button("Preview", GUILayout.Width(60))) { AudioSource source = InAudioInstanceFinder.Instance.GetComponent <AudioSource>(); var root = TreeWalker.FindParentBeforeFolder(node); source.volume = RuntimeHelper.ApplyVolume(root, node); source.pitch = RuntimeHelper.ApplyPitch(root, node); source.clip = audioData.EditorClip; source.Play(); } if (GUILayout.Button("Raw", GUILayout.Width(45))) { AudioSource source = InAudioInstanceFinder.Instance.GetComponent <AudioSource>(); source.clip = audioData.EditorClip; source.volume = 1.0f; source.pitch = 1.0f; source.Play(); } if (GUILayout.Button("Stop", GUILayout.Width(45))) { AudioSource source = InAudioInstanceFinder.Instance.GetComponent <AudioSource>(); source.Stop(); source.clip = null; } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); if (audioData.RuntimeClip != null && Application.isPlaying) { audioData.RuntimeClip = clip; } if (clip != audioData.EditorClip) //Assign new clip { UndoHelper.RecordObjectFull(new Object[] { audioData, node.GetBank().LazyBankFetch }, "Changed " + node.Name + " Clip"); audioData.EditorClip = clip; audioData.RuntimeClip = clip; AudioBankWorker.SwapClipInBank(node, clip); EditorUtility.SetDirty(node.GetBank().LazyBankFetch.gameObject); EditorUtility.SetDirty(node.NodeData.gameObject); } EditorGUILayout.EndHorizontal(); NodeTypeDataDrawer.Draw(node); }
protected override void OnDrop(InMusicNode newParent, UnityEngine.Object[] objects) { if (newParent == null || objects == null) { return; } var dragged = objects[0] as InMusicNode; if (dragged != null) { if (dragged.IsRoot || dragged == newParent) { return; } InUndoHelper.DoInGroup(() => { if (dragged.gameObject != newParent.gameObject) { if (EditorUtility.DisplayDialog("Move?", "Warning, this will break all external references to this and all child nodes!\n" + "Move node from\"" + dragged.gameObject.name + "\" to \"" + newParent.gameObject.name + "\"?", "Ok", "Cancel")) { treeDrawer.SelectedNode = TreeWalker.GetPreviousVisibleNode(treeDrawer.SelectedNode); MusicWorker.Duplicate(newParent.gameObject, dragged, newParent); DeleteNodeRec(dragged); AudioBankWorker.RebuildBanks(); } } else { var oldParent = dragged._parent; InUndoHelper.RecordObjects("Music drag-n-drop", dragged, oldParent, newParent); dragged.MoveToNewParent(newParent); newParent.IsFoldedOut = true; } Event.current.UseEvent(); }); } else if (newParent._type == MusicNodeType.Music) { var clips = objects.Convert(o => o as AudioClip).TakeNonNulls(); var musicGroup = newParent as InMusicGroup; if (musicGroup != null) { InUndoHelper.DoInGroup(() => { InUndoHelper.RecordObject(newParent, "Music Clip Add"); foreach (var audioClip in clips) { musicGroup._clips.Add(audioClip); } }); } } }
public static void Draw(InMusicFolder node) { node.ScrollPosition = EditorGUILayout.BeginScrollView(node.ScrollPosition); var prop = new SerializedObject(node); prop.Update(); EditorGUILayout.BeginVertical(); #region Bank InUndoHelper.GUIUndo(node, "Name Change", ref node._name, () => EditorGUILayout.TextField("Name", node._name)); if (!node.IsRoot) { bool overrideparent = EditorGUILayout.Toggle("Override Parent Bank", node._overrideParentBank); if (overrideparent != node._overrideParentBank) { AudioBankWorker.ChangeBankOverride(node); } } else { EditorGUILayout.Separator(); } if (node._overrideParentBank == false && !node.IsRoot) { GUI.enabled = false; } EditorGUILayout.BeginHorizontal(); var parentLink = node.GetBank(); if (node._overrideParentBank) { if (node._bankLink != null) { EditorGUILayout.LabelField("Bank", node._bankLink.GetName); } else { if (parentLink != null) { EditorGUILayout.LabelField("Bank", "Missing Bank, using parent bank" + parentLink.GetName); } else { EditorGUILayout.LabelField("Bank", "Missing Banks, no bank found"); } } } else { if (parentLink != null) { EditorGUILayout.LabelField("Using Bank", parentLink.GetName); } else { EditorGUILayout.LabelField("Using Bank", "Missing"); } } bool wasEnabled = GUI.enabled; GUI.enabled = true; if (GUILayout.Button("Find", GUILayout.Width(50))) { EditorWindow.GetWindow <AuxWindow>().FindBank(parentLink); } Rect findArea = GUILayoutUtility.GetLastRect(); findArea.y += 20; if (GUI.Button(findArea, "Find")) { EditorWindow.GetWindow <AuxWindow>().FindBank(node._bankLink); } GUI.enabled = wasEnabled; GUILayout.Button("Drag new bank here", GUILayout.Width(140)); var newBank = OnDragging.BusDragging(GUILayoutUtility.GetLastRect()); if (newBank != null) { AudioBankWorker.ChangeMusicNodeBank(node, newBank); } GUI.enabled = true; EditorGUILayout.EndHorizontal(); GUI.enabled = false; if (node._bankLink != null) { EditorGUILayout.LabelField("Node Bank", node._bankLink.GetName); } else { EditorGUILayout.LabelField("Node Bank", "Missing Bank"); } GUI.enabled = true; if (Application.isPlaying) { EditorGUILayout.Toggle("Is Loaded", BankLoader.IsLoaded(parentLink)); } #endregion EditorGUILayout.Separator(); EditorGUILayout.Separator(); #region Mixer DataDrawerHelper.DrawMixer(node, prop.FindProperty("_mixerGroup")); #endregion EditorGUILayout.Separator(); #region Volume & Pitch if (!Application.isPlaying) { InUndoHelper.GUIUndo(node, "Volume", ref node._minVolume, () => EditorGUILayout.Slider("Initial Volume", node._minVolume, 0f, 1f)); } else { InUndoHelper.GUIUndo(node, "Volume", ref node.runtimeVolume, () => EditorGUILayout.Slider("Current Volume", node.runtimeVolume, 0f, 1f)); } if (!Application.isPlaying) { InUndoHelper.GUIUndo(node, "Pitch", ref node._minPitch, () => EditorGUILayout.Slider("Initial Pitch", node._minPitch, 0f, 3f)); } else { InUndoHelper.GUIUndo(node, "Pitch", ref node.runtimePitch, () => EditorGUILayout.Slider("Current Pitch", node.runtimePitch, 0f, 3f)); } #endregion EditorGUILayout.EndVertical(); prop.ApplyModifiedProperties(); EditorGUILayout.EndScrollView(); }
public static void StartFromScratch(InCommonDataManager Manager) { try { DataCleanup.Cleanup(DataCleanup.CleanupVerbose.Silent); } catch (Exception) { Debug.LogError("InAudio: Problem cleaning data before creating project.\nPlease report bug to [email protected] or via the feedback window."); } int levelSize = 3; GameObject audioGO = new GameObject(); GameObject eventGO = new GameObject(); GameObject bankGO = new GameObject(); GameObject musicGO = new GameObject(); Manager.BankLinkTree = AudioBankWorker.CreateTree(bankGO); Manager.AudioTree = AudioNodeWorker.CreateTree(audioGO, levelSize); Manager.MusicTree = MusicWorker.CreateTree(musicGO, levelSize); Manager.EventTree = AudioEventWorker.CreateTree(eventGO, levelSize); SaveAndLoad.CreateDataPrefabs(Manager.AudioTree.gameObject, Manager.MusicTree.gameObject, Manager.EventTree.gameObject, Manager.BankLinkTree.gameObject); Manager.Load(true); if (Manager.BankLinkTree != null) { var bankLink = Manager.BankLinkTree._children[0]; bankLink._name = "Default - Auto loaded"; bankLink._autoLoad = true; NodeWorker.AssignToNodes(Manager.AudioTree, node => { var data = (node._nodeData as InFolderData); if (data != null) { data.BankLink = Manager.BankLinkTree._getChildren[0]; } }); NodeWorker.AssignToNodes(Manager.MusicTree, musicNode => { var folder = musicNode as InMusicFolder; if (folder != null) { folder._bankLink = Manager.BankLinkTree._getChildren[0]; } }); var firstAudioFolder = Manager.AudioTree._children[0]; AudioNodeWorker.CreateChild(firstAudioFolder, AudioNodeType.Audio, "Empty Example Audio Node"); var random = AudioNodeWorker.CreateChild(firstAudioFolder, AudioNodeType.Random); random.Name = "Random Node Example"; AudioNodeWorker.CreateChild(random, AudioNodeType.Audio, "Empty Example Audio Node"); AudioNodeWorker.CreateChild(random, AudioNodeType.Audio, "Empty Example Audio Node"); AudioNodeWorker.CreateChild(random, AudioNodeType.Audio, "Empty Example Audio Node"); var multi = AudioNodeWorker.CreateChild(firstAudioFolder, AudioNodeType.Multi, "Multi-Sound Example"); AudioNodeWorker.CreateChild(multi, AudioNodeType.Audio, "Played simultaneously"); AudioNodeWorker.CreateChild(multi, AudioNodeType.Audio, "Played simultaneously"); var sequence = AudioNodeWorker.CreateChild(firstAudioFolder, AudioNodeType.Sequence, "Sequence-Sound Example"); AudioNodeWorker.CreateChild(sequence, AudioNodeType.Audio, "Played first"); AudioNodeWorker.CreateChild(sequence, AudioNodeType.Audio, "Played secondly"); var firstEventFolder = Manager.EventTree._children[0]; firstEventFolder.FoldedOut = true; var audioEvent = AudioEventWorker.CreateNode(firstEventFolder, EventNodeType.Event); audioEvent.Name = "Playing Random Audio Event"; var action = AudioEventWorker.AddEventAction <InEventAudioAction>(audioEvent, EventActionTypes.Play); audioEvent.FoldedOut = true; action.Node = random; var firstMusicFolder = Manager.MusicTree._children[0]; var musicGroup = MusicWorker.CreateMusicGroup(firstMusicFolder, "Empty Music Group"); firstMusicFolder.FoldedOut = true; MusicWorker.CreateMusicGroup(musicGroup, "Empty Music Group - Child 1"); MusicWorker.CreateMusicGroup(musicGroup, "Empty Music Group - Child 2"); musicGroup.FoldedOut = true; AssetDatabase.Refresh(); DataCleanup.Cleanup(DataCleanup.CleanupVerbose.Silent); #if !UNITY_5_2 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene()); EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo(); #else EditorApplication.MarkSceneDirty(); EditorApplication.SaveCurrentSceneIfUserWantsTo(); #endif } else { Debug.LogError("InAudio: There was a problem creating the data.\nPlease report this bug to [email protected] or via the feedback window."); } }
public static void Draw(InAudioNode node) { var nodeData = node._nodeData; EditorGUILayout.BeginVertical(); var data = node._nodeData as InFolderData; #region Bank InUndoHelper.GUIUndo(node, "Name Change", ref node.Name, () => EditorGUILayout.TextField("Name", node.Name)); if (node._type == AudioNodeType.Folder) { bool overrideparent = EditorGUILayout.Toggle("Override Parent Bank", data.OverrideParentBank); if (overrideparent != data.OverrideParentBank) { AudioBankWorker.ChangeBankOverride(node); } } else { EditorGUILayout.LabelField(""); //To fill out the area from the toggle } if (data.OverrideParentBank == false && node._type != AudioNodeType.Root) { GUI.enabled = false; } EditorGUILayout.BeginHorizontal(); var parentLink = FindParentBank(node); if (data.OverrideParentBank) { if (data.BankLink != null) { EditorGUILayout.LabelField("Bank", data.BankLink.GetName); } else { if (parentLink != null) { EditorGUILayout.LabelField("Bank", "Missing Bank, using parent bank" + parentLink.GetName); } else { EditorGUILayout.LabelField("Bank", "Missing Banks, no bank found"); } } } else { if (parentLink != null) { EditorGUILayout.LabelField("Using Bank", parentLink.GetName); } else { EditorGUILayout.LabelField("Using Bank", "Missing"); } } bool wasEnabled = GUI.enabled; GUI.enabled = true; if (GUILayout.Button("Find", GUILayout.Width(50))) { EditorWindow.GetWindow <AuxWindow>().FindBank(parentLink); } Rect findArea = GUILayoutUtility.GetLastRect(); findArea.y += 20; if (GUI.Button(findArea, "Find")) { EditorWindow.GetWindow <AuxWindow>().FindBank(data.BankLink); } GUI.enabled = wasEnabled; GUILayout.Button("Drag new bank here", GUILayout.Width(140)); var newBank = OnDragging.BusDragging(GUILayoutUtility.GetLastRect()); if (newBank != null) { AudioBankWorker.ChangeAudioNodeBank(node, newBank); } GUI.enabled = true; EditorGUILayout.EndHorizontal(); GUI.enabled = false; if (data.BankLink != null) { EditorGUILayout.LabelField("Node Bank", data.BankLink.GetName); } else { EditorGUILayout.LabelField("Node Bank", "Missing Bank"); } GUI.enabled = true; if (Application.isPlaying) { EditorGUILayout.Toggle("Is Loaded", BankLoader.IsLoaded(parentLink)); } #endregion if (data.ExternalPlacement) { EditorGUILayout.Separator(); GUI.enabled = false; EditorGUILayout.ObjectField("Placed on", node.gameObject, typeof(GameObject), false); GUI.enabled = true; EditorGUILayout.Separator(); } #region Mixer DataDrawerHelper.DrawMixer(node); #endregion EditorGUILayout.Separator(); #region Volume if (Application.isPlaying) { InUndoHelper.GUIUndo(nodeData, "Folder volume", ref data.runtimeVolume, () => EditorGUILayout.Slider("Runtime Volume", data.runtimeVolume, 0, 1)); } else { InUndoHelper.GUIUndo(nodeData, "Folder volume", ref data.VolumeMin, () => EditorGUILayout.Slider("Initial Volume", data.VolumeMin, 0, 1)); } #endregion EditorGUILayout.EndVertical(); }
public static void Draw(InAudioNode node) { EditorGUILayout.BeginVertical(); #region Bank UndoHelper.GUIUndo(node, "Name Change", ref node.Name, () => EditorGUILayout.TextField("Name", node.Name)); var data = node.NodeData as InFolderData; if (node.Type == AudioNodeType.Folder) { bool overrideparent = EditorGUILayout.Toggle("Override Parent Bank", data.OverrideParentBank); if (overrideparent != data.OverrideParentBank) { AudioBankWorker.ChangeBankOverride(node, InAudioInstanceFinder.DataManager.BankLinkTree, InAudioInstanceFinder.DataManager.AudioTree); } } else { EditorGUILayout.LabelField(""); //To fill out the area from the toggle } if (data.OverrideParentBank == false && node.Type != AudioNodeType.Root) { GUI.enabled = false; } EditorGUILayout.BeginHorizontal(); var parentLink = FindParentBank(node); if (data.OverrideParentBank) { if (data.BankLink != null) { EditorGUILayout.LabelField("Bank", data.BankLink.GetName); } else { if (parentLink != null) { EditorGUILayout.LabelField("Bank", "Missing Bank, using parent bank" + parentLink.GetName); } else { EditorGUILayout.LabelField("Bank", "Missing Banks, no bank found"); } } } else { if (parentLink != null) { EditorGUILayout.LabelField("Using Bank", parentLink.GetName); } else { EditorGUILayout.LabelField("Using Bank", "Missing"); } } bool wasEnabled = GUI.enabled; GUI.enabled = true; if (GUILayout.Button("Find", GUILayout.Width(50))) { EditorWindow.GetWindow <AuxWindow>().FindBank(parentLink); } Rect findArea = GUILayoutUtility.GetLastRect(); findArea.y += 20; if (GUI.Button(findArea, "Find")) { EditorWindow.GetWindow <AuxWindow>().FindBank(data.BankLink); } GUI.enabled = wasEnabled; GUILayout.Button("Drag new bank here", GUILayout.Width(140)); var newBank = HandleDragging(GUILayoutUtility.GetLastRect()); if (newBank != null) { AudioBankWorker.ChangeBank(node, newBank, InAudioInstanceFinder.DataManager.BankLinkTree, InAudioInstanceFinder.DataManager.AudioTree); } GUI.enabled = true; EditorGUILayout.EndHorizontal(); GUI.enabled = false; if (data.BankLink != null) { EditorGUILayout.LabelField("Node Bank", data.BankLink.GetName); } else { EditorGUILayout.LabelField("Node Bank", "Missing Bank"); } GUI.enabled = true; #endregion EditorGUILayout.Separator(); EditorGUILayout.Separator(); #region Bus DataDrawerHelper.DrawBus(node); #endregion EditorGUILayout.EndVertical(); }
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 { InUndoHelper.DoInGroup(() => { node.IsFoldedOut = true; var nodeToMove = objects[0] as InAudioNode; if (node.gameObject != nodeToMove.gameObject) { if (EditorUtility.DisplayDialog("Move?", "Warning, this will break all external references to this and all child nodes!\n" + "Move node from\"" + nodeToMove.gameObject.name + "\" to \"" + node.gameObject.name + "\"?", "Ok", "Cancel")) { treeDrawer.SelectedNode = treeDrawer.SelectedNode._getParent; isDirty = false; AudioNodeWorker.CopyTo(nodeToMove, node); AudioNodeWorker.DeleteNodeNoGroup(nodeToMove); } } else { MoveNode(node, nodeToMove); } }); } else if (node._type != AudioNodeType.Audio) //Create new audio nodes when we drop clips { InUndoHelper.DoInGroup(() => { InUndoHelper.RecordObject(InUndoHelper.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"; } var audioData = (child._nodeData as InAudioData); audioData._clip = clip; AudioBankWorker.AddNodeToBank(child); Event.current.UseEvent(); } }); } else //Then it must be an audio clip dropped on an audio node, so assign the clip to that node { InUndoHelper.DoInGroup(() => { var nodeData = (node._nodeData as InAudioData); if (nodeData != null) { InUndoHelper.RecordObject(InUndoHelper.NodeUndo(node), "Change Audio Clip In " + node.Name); nodeData._clip = objects[0] as AudioClip; } }); Event.current.UseEvent(); } }