コード例 #1
0
ファイル: IntegrityGUI.cs プロジェクト: 1888games/Angry-Words
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: AuxWindow.cs プロジェクト: 1888games/Angry-Words
        private void CreateBankLinkPrefab()
        {
            GameObject go = new GameObject();

            Manager.BankLinkTree = AudioBankWorker.CreateTree(go);
            SaveAndLoad.CreateAudioBankLinkPrefab(go);
        }
コード例 #4
0
        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);
                    }
                });
            });
        }
コード例 #5
0
ファイル: MissingDataHelper.cs プロジェクト: vildninja/ngj15
        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.");
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
ファイル: AudioCreatorGUI.cs プロジェクト: vildninja/ngj15
        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);
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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();
        }
コード例 #10
0
 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());
     }
 }
コード例 #11
0
        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);
            });
        }
コード例 #12
0
        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);
                }
            });
        }
コード例 #13
0
ファイル: AudioCreatorGUI.cs プロジェクト: vildninja/ngj15
        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);
                }
            }
        }
コード例 #14
0
ファイル: AudioDataDrawer.cs プロジェクト: vildninja/ngj15
        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);
        }
コード例 #15
0
        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);
                        }
                    });
                }
            }
        }
コード例 #16
0
        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();
        }
コード例 #17
0
        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.");
            }
        }
コード例 #18
0
        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();
        }
コード例 #19
0
ファイル: FolderDrawer.cs プロジェクト: vildninja/ngj15
        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();
        }
コード例 #20
0
        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();
            }
        }