Пример #1
0
    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);
        }
    }
Пример #3
0
    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();
    }