private void CreateAudioPrefab(int levelSize, AudioBus bus) { GameObject go = new GameObject(); Manager.AudioTree = AudioNodeWorker.CreateTree(go, levelSize, bus); SaveAndLoad.CreateAudioNodeRootPrefab(go); }
private void CreateChild(AudioNode parent, AudioNodeType type) { var newNode = AudioNodeWorker.CreateChild(parent, type); if (type == AudioNodeType.Audio) { AudioBankWorker.AddNodeToBank(newNode, null); } }
private void DrawStartFromScratch() { EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("Start over from scratch", GUILayout.Height(30))) { if (EditorUtility.DisplayDialog("Create new project?", "This will delete ALL data!", "Start from scratch", "Do nothing")) { FolderSettings.DeleteFolderContent(Application.dataPath + FolderSettings.BankDeleteFolder); int levelSize = 3; GameObject go1 = new GameObject(); GameObject go2 = new GameObject(); GameObject go3 = new GameObject(); GameObject go4 = new GameObject(); Manager.BusTree = AudioBusWorker.CreateTree(go3); Manager.BankLinkTree = AudioBankWorker.CreateTree(go4); Manager.AudioTree = AudioNodeWorker.CreateTree(go1, levelSize, Manager.BusTree); Manager.EventTree = AudioEventWorker.CreateTree(go2, levelSize); SaveAndLoad.CreateDataPrefabs(Manager.AudioTree.gameObject, Manager.EventTree.gameObject, Manager.BusTree.gameObject, Manager.BankLinkTree.gameObject); Manager.Load(true); if (Manager.BankLinkTree != null) { var bankLink = AudioBankWorker.CreateBank(Manager.BankLinkTree.gameObject, Manager.BankLinkTree, GUIDCreator.Create()); bankLink.Name = "Default - Auto loaded"; bankLink.AutoLoad = true; var bankLink2 = AudioBankWorker.CreateBank(Manager.BankLinkTree.gameObject, Manager.BankLinkTree, GUIDCreator.Create()); bankLink2.Name = "Extra"; NodeWorker.AssignToNodes(Manager.AudioTree, node => node.BankLink = Manager.BankLinkTree.GetChildren[0]); } else { Debug.LogError("There was a problem creating the data."); } NodeWorker.AssignToNodes(Manager.AudioTree, node => node.Bus = Manager.BusTree); AssetDatabase.Refresh(); EditorApplication.SaveCurrentSceneIfUserWantsTo(); } } }
protected override void OnDrop(AudioNode node, UnityEngine.Object[] objects) { if (objects[0] as AudioNode != null) //Drag N Drop internally in the tree, change the parent { node.IsFoldedOut = true; var nodeToMove = objects[0] as AudioNode; var oldBank = AudioBankWorker.GetParentBank(nodeToMove); AudioBankLink newBank = null; if (nodeToMove.OverrideParentBank) { newBank = AudioBankWorker.GetParentBank(nodeToMove); } else { newBank = AudioBankWorker.GetParentBank(node); } Undo.RegisterUndo(new UnityEngine.Object[] { node, nodeToMove, nodeToMove.Parent, oldBank, newBank }, "Audio Node Move"); NodeWorker.ReasignNodeParent(nodeToMove, node); AudioBankWorker.MoveNode(nodeToMove, oldBank); } else if (node.Type != AudioNodeType.Audio) //Create new audio nodes when we drop clips { for (int i = 0; i < objects.Length; ++i) { var clip = objects[i] as AudioClip; 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 AudioData).EditorClip = 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 bank = AudioBankWorker.GetParentBank(node); Undo.RegisterUndo(new UnityEngine.Object[] { node, bank.LazyBankFetch, node.NodeData }, "Undo Changing Node In Bank"); (node.NodeData as AudioData).EditorClip = objects[0] as AudioClip; AudioBankWorker.SwapClipInBank(node, objects[0] as AudioClip); } }
protected override void OnContext(AudioNode node) { var menu = new GenericMenu(); #region Duplicate if (!node.IsRoot) { menu.AddItem(new GUIContent("Duplicate"), false, data => AudioNodeWorker.Duplicate(node), node); } else { menu.AddDisabledItem(new GUIContent("Duplicate")); } #endregion menu.AddSeparator(""); #region Create child if (node.Type == AudioNodeType.Audio || node.Type == AudioNodeType.Voice) //If it is a an audio source, it cannot have any children { menu.AddDisabledItem(new GUIContent(@"Create Child/Folder")); menu.AddDisabledItem(new GUIContent(@"Create Child/Audio")); menu.AddDisabledItem(new GUIContent(@"Create Child/Random")); menu.AddDisabledItem(new GUIContent(@"Create Child/Sequence")); menu.AddDisabledItem(new GUIContent(@"Create Child/Multi")); //menu.AddDisabledItem(new GUIContent(@"Create Child/Track")); //menu.AddDisabledItem(new GUIContent(@"Create Child/Voice")); } else { if (node.Type == AudioNodeType.Root || node.Type == AudioNodeType.Folder) { menu.AddItem(new GUIContent(@"Create Child/Folder"), false, (obj) => CreateChild(node, AudioNodeType.Folder), node); } else { menu.AddDisabledItem(new GUIContent(@"Create Child/Folder")); } menu.AddItem(new GUIContent(@"Create Child/Audio"), false, (obj) => CreateChild(node, AudioNodeType.Audio), node); menu.AddItem(new GUIContent(@"Create Child/Random"), false, (obj) => CreateChild(node, AudioNodeType.Random), node); menu.AddItem(new GUIContent(@"Create Child/Sequence"), false, (obj) => CreateChild(node, AudioNodeType.Sequence), node); menu.AddItem(new GUIContent(@"Create Child/Multi"), false, (obj) => CreateChild(node, AudioNodeType.Multi), node); //menu.AddItem(new GUIContent(@"Create Child/Track"), false, (obj) => CreateChild(node, AudioNodeType.Track), node); //menu.AddItem(new GUIContent(@"Create Child/Voice"), false, (obj) => CreateChild(node, AudioNodeType.Voice), node); } #endregion menu.AddSeparator(""); #region Add new parent if (node.Parent != null && (node.Parent.Type == AudioNodeType.Folder || node.Parent.Type == AudioNodeType.Root)) { menu.AddItem(new GUIContent(@"Add Parent/Folder"), false, (obj) => AudioNodeWorker.AddNewParent(node, AudioNodeType.Folder), node); } else { menu.AddDisabledItem(new GUIContent(@"Add Parent/Folder")); } menu.AddDisabledItem(new GUIContent(@"Add Parent/Audio")); if (node.Parent != null && node.Type != AudioNodeType.Folder) { menu.AddItem(new GUIContent(@"Add Parent/Random"), false, (obj) => AudioNodeWorker.AddNewParent(node, AudioNodeType.Random), node); menu.AddItem(new GUIContent(@"Add Parent/Sequence"), false, (obj) => AudioNodeWorker.AddNewParent(node, AudioNodeType.Sequence), node); menu.AddItem(new GUIContent(@"Add Parent/Multi"), false, (obj) => AudioNodeWorker.AddNewParent(node, AudioNodeType.Multi), node); //menu.AddItem(new GUIContent(@"Add Parent/Track"), false, (obj) => AudioNodeWorker.AddNewParent(node, AudioNodeType.Track), node); } else { menu.AddDisabledItem(new GUIContent(@"Add Parent/Random")); menu.AddDisabledItem(new GUIContent(@"Add Parent/Sequence")); menu.AddDisabledItem(new GUIContent(@"Add Parent/Multi")); //menu.AddDisabledItem(new GUIContent(@"Add Parent/Track")); } //menu.AddDisabledItem(new GUIContent(@"Add Parent/Voice")); #endregion menu.AddSeparator(""); #region Convert to if (node.Children.Count == 0) { menu.AddItem(new GUIContent(@"Convert To/Audio"), false, (obj) => AudioNodeWorker.ConvertNodeType(node, AudioNodeType.Audio), node); } else { menu.AddDisabledItem(new GUIContent(@"Convert To/Audio")); } if (node.Type != AudioNodeType.Root) { menu.AddItem(new GUIContent(@"Convert To/Random"), false, (obj) => AudioNodeWorker.ConvertNodeType(node, AudioNodeType.Random), node); menu.AddItem(new GUIContent(@"Convert To/Sequence"), false, (obj) => AudioNodeWorker.ConvertNodeType(node, AudioNodeType.Sequence), node); menu.AddItem(new GUIContent(@"Convert To/Multi"), false, (obj) => AudioNodeWorker.ConvertNodeType(node, AudioNodeType.Multi), node); //menu.AddItem(new GUIContent(@"Convert To/Track"), false, (obj) => AudioNodeWorker.ConvertNodeType(node, AudioNodeType.Track), node); } else { menu.AddDisabledItem(new GUIContent(@"Convert To/Random")); menu.AddDisabledItem(new GUIContent(@"Convert To/Sequence")); menu.AddDisabledItem(new GUIContent(@"Convert To/Multi")); //menu.AddDisabledItem(new GUIContent(@"Add Parent/Track")); } /*if (node.Children.Count == 0) * menu.AddItem(new GUIContent(@"Convert To/Voice"), false, (obj) => AudioNodeWorker.ConvertNodeType(node, AudioNodeType.Audio), node); * else * menu.AddDisabledItem(new GUIContent(@"Convert To/Voice"));*/ #endregion menu.AddSeparator(""); #region Delete if (node.Type != AudioNodeType.Root) { menu.AddItem(new GUIContent("Delete"), false, obj => AudioNodeWorker.DeleteNode(node), node); } else { menu.AddDisabledItem(new GUIContent("Delete")); } #endregion menu.ShowAsContext(); }