Пример #1
0
 public static void UnloadBank(AudioBankLink bank)
 {
     if (bank != null)
     {
         BankLoader.Unload(bank);
     }
 }
Пример #2
0
        public static void SetNewBank(AudioNode node, AudioBankLink newBankLink)
        {
            MoveBetweenBanks(node, GetParentBank(node), newBankLink);

            node.BankLink = newBankLink;
            SetNewBankLink(node, newBankLink);
        }
Пример #3
0
        public static AudioBankLink CreateBank(GameObject go, AudioBankLink parent, int guid)
        {
            AudioBankLink link = CreateBankLink(go, parent, guid);

            SaveAndLoad.CreateAudioBank(guid);
            return(link);
        }
Пример #4
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();
    }
Пример #5
0
        private static AudioBankLink CreateBankLink(GameObject go, AudioBankLink parent, int guid)
        {
            var node = CreateNode(go, parent, guid);

            node.Name = "BankLink";
            node.Type = AudioBankTypes.Link;
            return(node);
        }
Пример #6
0
        public static AudioBankLink CreateFolder(GameObject go, AudioBankLink parent, int guid)
        {
            var node = CreateNode(go, parent, guid);

            node.Name = "folder";
            node.Type = AudioBankTypes.Folder;
            return(node);
        }
Пример #7
0
        private static AudioBankLink CreateNode(GameObject go, AudioBankLink parent, int guid)
        {
            var node = go.AddComponent <AudioBankLink>();

            node.GUID        = guid;
            node.Parent      = parent;
            node.IsFoldedOut = true;
            node.Name        = "Name";
            NodeWorker.AssignParent(node, parent);
            return(node);
        }
Пример #8
0
 public AudioBank GetLoadedBank(AudioBankLink link)
 {
     for (int i = 0; i < LoadedBanks.Count; ++i)
     {
         if (LoadedBanks[i].GUID == link.GUID)
         {
             return LoadedBanks[i];
         }
     }
     return null;
 }
Пример #9
0
    public static void Unload(AudioBankLink bankLink)
    {
        AudioBank bank = InstanceFinder.DataManager.GetLoadedBank(bankLink);

        if (bank != null)
        {
            for (int i = 0; i < bank.Clips.Count; i++)
            {
                (bank.Clips[i].Node.NodeData as AudioData).Clip = null;
            }
            Resources.UnloadUnusedAssets();
        }
    }
Пример #10
0
    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);
        }
    }
Пример #11
0
 public void Load(bool forceReload = false)
 {
     if (AudioRoot == null || BankLinkRoot == null || BusRoot == null || EventRoot == null || forceReload)
     {
         Component[] audioData;
         Component[] eventData;
         Component[] busData;
         Component[] bankLinkData;
         HDRAudio.SaveAndLoad.LoadManagerData(out audioData, out eventData, out busData, out bankLinkData);
         BusRoot         = CheckData<AudioBus>(busData);
         AudioRoot       = CheckData<AudioNode>(audioData);
         EventRoot       = CheckData<AudioEvent>(eventData);
         BankLinkTree    = CheckData<AudioBankLink>(bankLinkData);
     }
 }
Пример #12
0
    private static void LoadAuto(AudioBankLink bankLink)
    {
        if (bankLink == null)
        {
            return;
        }
        if (bankLink.AutoLoad)
        {
            Load(bankLink);
        }

        for (int i = 0; i < bankLink.Children.Count; ++i)
        {
            LoadAuto(bankLink.Children[i]);
        }
    }
Пример #13
0
        private static void MoveBetweenBanks(AudioNode node, AudioBankLink oldBank, AudioBankLink newBankLink)
        {
            var currentBank = oldBank.LazyBankFetch.Clips;
            var newBank     = newBankLink.LazyBankFetch.Clips;
            var nodeSet     = new HashSet <AudioNode>();

            BuildMoveSet(nodeSet, node);
            for (int i = 0; i < currentBank.Count; ++i)
            {
                if (nodeSet.Contains(currentBank[i].Node))
                {
                    newBank.Add(currentBank[i]);
                    currentBank.SwapRemoveAt(i);
                }
            }
        }
Пример #14
0
    public static AudioBank Load(AudioBankLink bankLink)
    {
        if (bankLink == null)
        {
            return(null);
        }
        var bank = SaveAndLoad.LoadAudioBank(bankLink.ID);

        if (Application.isPlaying && InstanceFinder.DataManager != null)
        {
            InstanceFinder.DataManager.BankIsLoaded(bank);
            for (int i = 0; i < bank.Clips.Count; i++)
            {
                (bank.Clips[i].Node.NodeData as AudioData).Clip = bank.Clips[i].Clip;
            }
        }
        return(bank);
    }
Пример #15
0
 private static void SetNewBankLink(AudioNode node, AudioBankLink newBankLink)
 {
     for (int i = 0; i < node.Children.Count; ++i)
     {
         var child = node.Children[i];
         if (child.Type == AudioNodeType.Folder && child.OverrideParentBank)
         {
             continue;
         }
         else
         {
             if (child.Type != AudioNodeType.Folder)
             {
                 child.BankLink = newBankLink;
             }
             SetNewBankLink(child, newBankLink);
         }
     }
 }
Пример #16
0
        public static void ChangeBankOverriding(AudioNode node)
        {
            AudioBankLink newBank;
            AudioBankLink currentBank = GetParentBank(node);

            if (node.OverrideParentBank)
            {
                newBank = GetParentBank(node.Parent);
            }
            else
            {
                newBank = node.BankLink;
            }

            node.OverrideParentBank = !node.OverrideParentBank;

            MoveBetweenBanks(node, currentBank, newBank);

            SetNewBankLink(node, newBank);
        }
Пример #17
0
 public void FindBank(AudioBankLink bankLink)
 {
     selectedToolbar = 1;
     bankGUI.Find(bankLink);
 }
Пример #18
0
    public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
    {
        var   labelPos        = pos;
        Color backgroundColor = GUI.color;

        GUI.skin.label.alignment = TextAnchor.UpperLeft;
        var labelStyle = GUI.skin.GetStyle("label");
        //int fontSize = labelStyle.fontSize;
        var eventTypeStyle = new GUIStyle(GUI.skin.GetStyle("label"));

        //eventTypeStyle.fontSize = fontSize + 1;

        //labelStyle.fontSize = fontSize;
        //eventTypeStyle.fontSize = 12;
        labelPos.height          = 14;
        eventTypeStyle.fontStyle = FontStyle.Bold;
        GUI.Label(labelPos, BankAttribute.EventType, eventTypeStyle);
        GUI.skin.label.alignment = TextAnchor.MiddleLeft;
        for (int i = 0; i < prop.arraySize; ++i)
        {
            labelPos.y     += LineHeight;
            labelPos.height = 20;
            AudioBankLink bankLink = prop.GetArrayElementAtIndex(i).objectReferenceValue as AudioBankLink;
            if (bankLink != null)
            {
                GUI.Label(labelPos, bankLink.GetName, labelStyle);
            }
            else
            {
                GUI.Label(labelPos, "Missing event", labelStyle);
            }

            Rect buttonPos = labelPos;
            buttonPos.x     = pos.width - 100; //Align to right side
            buttonPos.width = 50;

            if (bankLink == null)
            {
                GUI.enabled = false;
            }

            if (GUI.Button(buttonPos, "Find"))
            {
                EditorWindow.GetWindow <AuxWindow>().FindBank(bankLink);
            }
            GUI.enabled     = true;
            buttonPos.x     = pos.width - 44;
            buttonPos.width = 35;
            if (GUI.Button(buttonPos, "X"))
            {
                DeleteAtIndex(prop, i);
            }
        }
        labelPos.y              += DragHeight + 4;
        labelPos.height          = DragHeight;
        GUI.skin.label.alignment = TextAnchor.MiddleCenter;
        GUI.color = backgroundColor;
        GUI.Button(labelPos, "Drag event here to add to " + BankAttribute.EventType.ToLower() + " event");
        if (labelPos.Contains(Event.current.mousePosition))
        {
            HandleDrag(prop);
        }

        GUI.color = backgroundColor;
    }
Пример #19
0
    private static bool DrawContent(AudioEvent audioevent, Rect area)
    {
        Rect selectedBackground = drawArea;

        selectedBackground.y += 2;
        DrawBackground(selectedBackground);
        GUI.skin.label.alignment = TextAnchor.MiddleCenter;
        bool repaint = false;

        EditorGUILayout.BeginVertical();
        for (int i = 0; i < audioevent.ActionList.Count; ++i)
        {
            var  currentAction = audioevent.ActionList[i];
            Rect lastArea      = EditorGUILayout.BeginHorizontal(GUILayout.Height(20));

            if (i == 0)
            {
                Rect actionArea = lastArea;
                actionArea.width  = 100;
                actionArea.height = 20;
                actionArea.y     -= 20;

                EditorGUI.LabelField(actionArea, "Action", EditorStyles.boldLabel);
            }

            if (currentAction != null)
            {
                if (GUILayout.Button(
                        Enum.GetName(typeof(EventActionTypes), (int)currentAction.EventActionType)
                        .AddSpacesToSentence(),
                        GUILayout.Width(110)))
                {
                    ShowChangeContext(audioevent, currentAction);
                    Event.current.Use();
                }
            }
            else
            {
                EditorGUILayout.LabelField("Missing");

                GUI.enabled = false;
            }

            EditorGUILayout.BeginVertical(GUILayout.Height(20));
            GUILayout.Label("", GUILayout.Height(0)); //Aligns it to the center by creating a small vertical offset, by setting the height to zero
            if (currentAction != null && currentAction.EventActionType != EventActionTypes.StopAll)
            {
                EditorGUILayout.LabelField(currentAction.ObjectName);
            }
            EditorGUILayout.EndHorizontal();

            Rect dragArea = GUILayoutUtility.GetLastRect();

            if (i == 0)
            {
                Rect actionArea = dragArea;
                actionArea.width  = 100;
                actionArea.height = 20;
                actionArea.y     -= 20;

                EditorGUI.LabelField(actionArea, "Data", EditorStyles.boldLabel);
            }

            if (currentAction is EventAudioAction)
            {
                AudioNode dragged = OnDragging.DraggingObject <AudioNode>(dragArea, node => node.IsPlayable);

                if (dragged != null)
                {
                    (currentAction as EventAudioAction).Node = dragged;
                }
            }
            else if (currentAction is EventBankAction)
            {
                AudioBankLink dragged = OnDragging.DraggingObject <AudioBankLink>(dragArea, bank => bank.Type == AudioBankTypes.Link);
                if (dragged != null)
                {
                    (currentAction as EventBankAction).BankLink = dragged;
                }
            }
            else if (currentAction is EventBusAction)
            {
                AudioBus dragged = OnDragging.DraggingObject <AudioBus>(dragArea, bus => true);
                if (dragged != null)
                {
                    (currentAction as EventBusAction).Bus = dragged;
                }
            }

            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            Rect rightArea = EditorGUILayout.BeginHorizontal(GUILayout.Width(area.width - 100));
            rightArea.x    -= 150;
            rightArea.y    += 3;
            rightArea.width = 80;
            //rightARea.height -= 6;
            if (GUI.Button(rightArea, "Find"))
            {
                SearchHelper.SearchFor(currentAction);
            }

            rightArea.x    += 90;
            rightArea.width = 30;
            if (GUI.Button(rightArea, "X"))
            {
                if (audioevent.ActionList[i] != null)
                {
                    AudioEventWorker.DeleteActionAtIndex(audioevent, i);
                }
                else
                {
                    audioevent.ActionList.SwapRemoveAt(i);
                    --i;
                }
            }

            if (Event.current.ClickedWithin(lastArea))
            {
                drawArea         = lastArea;
                audioEventAction = currentAction;
                Event.current.Use();
            }
            //if (audioEventAction == null || ( Event.current.type == EventType.MouseDown && lastArea.Contains(Event.current.mousePosition)))
            //{
            //    drawArea = lastArea;
            //    audioEventAction = currentAction;
            //}
            GUILayout.Label("");
            //EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.EndHorizontal();

            GUI.enabled = true;
        }
        EditorGUILayout.EndVertical();
        return(repaint);
    }
Пример #20
0
 public static void MoveNode(AudioNode movedNode, AudioBankLink oldParent)
 {
     MoveBetweenBanks(movedNode, oldParent, GetParentBank(movedNode));
 }