Пример #1
0
    private void CreateBankLinkPrefab()
    {
        GameObject go = new GameObject();

        Manager.BankLinkTree = AudioBankWorker.CreateTree(go);
        SaveAndLoad.CreateAudioBankLinkPrefab(go);
    }
Пример #2
0
    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 Banks should work every time, it can happen that audio nodes gets deattached from their bank when working in the editor. \nThis will reassign all nodes to their correct bank.", MessageType.Info);
        if (GUILayout.Button("Fix Bank integrity"))
        {
            AudioBankWorker.RebuildBanks(InAudioInstanceFinder.DataManager.BankLinkTree, InAudioInstanceFinder.DataManager.AudioTree);
            Debug.Log("All Banks rebuild");
        }

        EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.Separator();
        if (!UndoHelper.IsNewUndo)
        {
            EditorGUILayout.HelpBox("As you are not using Unity 4.3 or later, there is likely unused audio data stored." +
                                    "\nThis is because data is not always deleted since the Undo system does not support undo of deletion." +
                                    "\nCleanup will remove all unused data.", MessageType.Info);
        }
        else
        {
            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);
    }
Пример #3
0
    public static void Draw(AudioBankLink node)
    {
        UndoHandler.CheckUndo(node);
        //UndoCheck.Instance.CheckUndo(node, "Audio Bank:" + node.Name);
        EditorGUILayout.BeginVertical();
        node.Name = EditorGUILayout.TextField("Name", node.Name);
        if (node.Type != AudioBankTypes.Folder)
        {
            EditorGUILayout.IntField("ID", node.GUID);
            EditorGUILayout.Separator();
            node.AutoLoad = EditorGUILayout.Toggle("Auto load", node.AutoLoad);
        }


        Rect lastArea = GUILayoutUtility.GetLastRect();

        lastArea.y    += 28;
        lastArea.width = 200;
        if (GUI.Button(lastArea, "Find Folders using this bank"))
        {
            EditorWindow.GetWindow <AudioWindow>().Find(audioNode => AudioBankWorker.GetParentBank(audioNode) != node);
        }

        EditorGUILayout.EndVertical();
        //UndoCheck.Instance.CheckDirty(node);
        UndoHandler.CheckGUIChange();
    }
    private void CreateChild(AudioNode parent, AudioNodeType type)
    {
        var newNode = AudioNodeWorker.CreateChild(parent, type);

        if (type == AudioNodeType.Audio)
        {
            AudioBankWorker.AddNodeToBank(newNode, null);
        }
    }
Пример #5
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();
            }
        }
    }
Пример #6
0
 private void CreateBank(AudioBankLink parent, AudioBankTypes type)
 {
     if (type == AudioBankTypes.Folder)
     {
         AudioBankWorker.CreateFolder(parent.gameObject, parent, GUIDCreator.Create());
     }
     else
     {
         AudioBankWorker.CreateBank(parent.gameObject, parent, GUIDCreator.Create());
     }
 }
    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);
        }
    }
    public static void Draw(AudioNode node)
    {
        UndoHandler.CheckUndo(new Object[] { node, node.NodeData });
        node.Name = EditorGUILayout.TextField("Name", node.Name);
        UndoHandler.CheckGUIChange();
        EditorGUILayout.Separator();
        AudioData audio = node.NodeData as AudioData;
        var       clip  = (AudioClip)EditorGUILayout.ObjectField(audio.Clip, typeof(AudioClip), false);

        if (clip != audio.EditorClip) //Assign new clip
        {
            Undo.RegisterUndo(new Object[] { node.NodeData, AudioBankWorker.GetParentBank(node).LazyBankFetch }, "Changed " + node.Name + " Clip");
            audio.EditorClip = clip;
            AudioBankWorker.SwapClipInBank(node, clip);
        }

        NodeTypeDataDrawer.Draw(node);
    }
Пример #9
0
    public static void Draw(AudioNode node)
    {
        EditorGUILayout.BeginVertical();
        UndoHandler.CheckUndo(new UnityEngine.Object[] { node, node.NodeData });
        node.Name = EditorGUILayout.TextField("Name", node.Name);
        UndoHandler.CheckGUIChange();

        if (node.Type != AudioNodeType.Root)
        {
            bool overrideparent = EditorGUILayout.Toggle("Override Parent", node.OverrideParentBank);
            if (overrideparent != node.OverrideParentBank)
            {
                AudioBankWorker.ChangeBankOverriding(node);
            }
        }
        else
        {
            EditorGUILayout.LabelField(""); //To fill out the area from the toggle
        }
        if (node.OverrideParentBank == false && node.Type != AudioNodeType.Root)
        {
            GUI.enabled = false;
        }

        EditorGUILayout.BeginHorizontal();

        var parentLink = FindParentBank(node);

        if (node.OverrideParentBank)
        {
            if (node.BankLink != null)
            {
                EditorGUILayout.LabelField("Bank", node.BankLink.GetName);
            }
            else
            {
                EditorGUILayout.LabelField("Bank", "Missing Bank, using parent bank" + parentLink.GetName);
            }
        }
        else
        {
            EditorGUILayout.LabelField("Using Bank", parentLink.GetName);
        }

        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 = HandleDragging(GUILayoutUtility.GetLastRect());

        if (newBank != null)
        {
            if (node.OverrideParentBank)
            {
                AudioBankWorker.SetNewBank(node, newBank);
            }
            else
            {
                node.BankLink = newBank;
            }
        }
        GUI.enabled = true;
        EditorGUILayout.EndHorizontal();
        GUI.enabled = false;
        EditorGUILayout.LabelField("Node Bank", node.BankLink.GetName);
        GUI.enabled = true;
        EditorGUILayout.EndVertical();
    }