Example #1
0
 private void PlayPauseItem(AkWwiseTreeViewItem item)
 {
     if (m_treeView != null && m_treeView.CheckWaapi())
     {
         AkWaapiUtilities.TogglePlayEvent(item.objectType, item.objectGuid);
     }
 }
 /// <summary>
 /// Subscribes to nameChanged, childAdded, childRemoved, and selectionChanged WAAPI events in order to keep the picker in sync with the Wwise project explorer.
 /// </summary>
 public void SubscribeTopics()
 {
     AkWaapiUtilities.Subscribe([email protected], OnWaapiRenamed, SubscriptionHandshake);
     AkWaapiUtilities.Subscribe([email protected], OnWaapiChildAdded, SubscriptionHandshake);
     AkWaapiUtilities.Subscribe([email protected], OnWaapiChildRemoved, SubscriptionHandshake);
     AkWaapiUtilities.Subscribe(ak.wwise.ui.selectionChanged, OnWwiseSelectionChanged, SubscriptionHandshake);
 }
    public void AddItemWithAncestors(List <WwiseObjectInfo> infoItems, bool selectAfterCreated = false)
    {
        var parent = ProjectRoot;

        //Items obtained from the WAAPI call are sorted by path so we can simply iterate over them
        foreach (var infoItem in infoItems)
        {
            var newItem = Find(infoItem.objectGUID);
            if (newItem == null)
            {
                newItem = new AkWwiseTreeViewItem(infoItem, GenerateUniqueID(), parent.depth + 1);
                Data.Add(newItem);
                parent.AddWwiseItemChild(newItem);
            }

            if (!CheckIfFullyLoaded(parent))
            {
                System.Guid guid = new System.Guid(parent.objectGuid.ToString());
                AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
                {
                    UpdateParentWithLoadedChildren(guid, AkWaapiUtilities.ParseObjectInfo(items));
                };
                AkWaapiUtilities.GetChildren(parent.objectGuid, waapiWwiseObjectOptions, callback);
            }
            parent = newItem;
        }

        if (selectAfterCreated)
        {
            treeviewCommandQueue.Enqueue(new TreeViewCommand(() => Expand(parent.objectGuid, true)));
        }
    }
    void Preload(AkWwiseTreeViewItem parent, TreeViewState treeState)
    {
        if (parent == null)
        {
            return;
        }

        if (!CheckIfFullyLoaded(parent))
        {
            AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
            {
                UpdateParentWithLoadedChildren(parent.objectGuid, AkWaapiUtilities.ParseObjectInfo(items));
            };
            AkWaapiUtilities.GetChildren(parent.objectGuid, waapiWwiseObjectOptions, callback);
        }

        //Preload one level of hidden items.
        if (IsExpanded(treeState, parent.id) || (parent.parent != null && IsExpanded(treeState, parent.parent.id)) ||
            parent.id == ProjectRoot.id)
        {
            foreach (AkWwiseTreeViewItem childItem in parent.children)
            {
                Preload(childItem, treeState);
            }
        }
    }
    public override void SelectItem(System.Guid itemGuid)
    {
        if (TreeView == null)
        {
            return;
        }

        if (TreeView.m_storedSearchString != string.Empty)
        {
            return;
        }

        if (!TreeView.ExpandItem(itemGuid, true))
        {
            var item = Find(itemGuid);
            treeviewCommandQueue.Enqueue(new TreeViewCommand(() => Expand(itemGuid, true)));

            if (item == null)
            {
                AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
                {
                    AddItemWithAncestors(AkWaapiUtilities.ParseObjectInfo(items));
                };
                AkWaapiUtilities.GetWwiseObjectAndAncestors(itemGuid, waapiWwiseObjectOptions, callback);
            }
        }
    }
Example #6
0
    protected override void RenameEnded(RenameEndedArgs args)
    {
        var item = Find(args.itemID);

        if (ValidateNameChange(item, args.newName))
        {
            var name = args.newName.Replace(" ", "_");
            AkWaapiUtilities.Rename(item.objectGuid, name);
            item.displayName = args.newName;
        }
    }
    void OnWaapiChildAdded(string json)
    {
        var added = AkWaapiUtilities.ParseChildAddedOrRemoved(json);

        if (added.childInfo.type == WwiseObjectType.None)
        {
            return;
        }

        var parent = Find(added.parentInfo.objectGUID);

        // New object created, but parent is not loaded yet, so we can ignore it
        if (parent == null)
        {
            return;
        }

        var child = Find(added.childInfo.objectGUID);

        if (child == null)
        {
            child = new AkWwiseTreeViewItem(added.childInfo, GenerateUniqueID(), parent.depth + 1);
        }
        else
        {
            child.numChildren = added.childInfo.childrenCount;
            child.displayName = added.childInfo.name;
        }

        parent.AddWwiseItemChild(child);
        Data.Add(child);
        parent.numChildren = added.parentInfo.childrenCount;
        child.depth        = parent.depth + 1;

        if (!CheckIfFullyLoaded(parent))
        {
            AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
            {
                UpdateParentWithLoadedChildren(parent.objectGuid, AkWaapiUtilities.ParseObjectInfo(items));
            };
            AkWaapiUtilities.GetChildren(parent.objectGuid, waapiWwiseObjectOptions, callback);
        }

        if (!CheckIfFullyLoaded(child))
        {
            AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
            {
                UpdateParentWithLoadedChildren(child.objectGuid, AkWaapiUtilities.ParseObjectInfo(items));
            };
            AkWaapiUtilities.GetChildren(child.objectGuid, waapiWwiseObjectOptions, callback);
        }
        ScheduleRebuild();
    }
    /// <summary>
    /// Unsubscribes from currently active subscriptions.
    /// </summary>
    void UnsubscribeTopics()
    {
        var tSubs = subscriptions;

        foreach (var sub in tSubs)
        {
            if (sub.SubscriptionId != 0)
            {
                AkWaapiUtilities.Unsubscribe(sub.SubscriptionId);
            }
        }
        subscriptions.Clear();
    }
 void OnWwiseSelectionChanged(string json)
 {
     if (AutoSyncSelection)
     {
         var objects = AkWaapiUtilities.ParseSelectedObjects(json);
         if (objects.Count > 0)
         {
             if (FilterPath(objects[0].path))
             {
                 treeviewCommandQueue.Enqueue(new TreeViewCommand(() => SelectItem(objects[0].objectGUID)));
             }
         }
     }
 }
    public override void FetchData()
    {
        Data.Clear();
        m_MaxID     = 0;
        ProjectRoot = CreateProjectRootItem();

        foreach (var type in FolderNames.Keys)
        {
            AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
            {
                AddBaseFolder(AkWaapiUtilities.ParseObjectInfo(items), type);
            };
            AkWaapiUtilities.GetWwiseObjectAndDescendants(FolderNames[type], waapiWwiseObjectOptions, 2, callback);
        }
        Changed();
    }
    private void FireSearch(object sender, System.Timers.ElapsedEventArgs e)
    {
        if (SearchRoot == null)
        {
            SearchRoot = new AkWwiseTreeViewItem(ProjectRoot);
        }

        SearchRoot.children.Clear();
        SearchItems = new List <AkWwiseTreeViewItem>(new[] { SearchRoot });
        TreeUtility.TreeToList(SearchRoot, SearchItems);
        AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
        {
            AddSearchResults(AkWaapiUtilities.ParseObjectInfo(items));
        };
        AkWaapiUtilities.Search(searchString, searchObjectTypeFilter, waapiWwiseObjectOptions, callback);
    }
 public void LoadComponentDataDelayed()
 {
     //Delay call until data has been fetched
     if (!wwiseObjectFolders.ContainsKey(componentObjectType))
     {
         UnityEditor.EditorApplication.delayCall += LoadComponentDataDelayed;
     }
     else
     {
         AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
         {
             AddItems(AkWaapiUtilities.ParseObjectInfo(items));
         };
         AkWaapiUtilities.GetWwiseObjectAndDescendants(wwiseObjectFolders[componentObjectType].objectGuid,
                                                       waapiWwiseObjectOptions, -1, callback);
     }
 }
    public void AddSearchResults(IEnumerable <WwiseObjectInfo> matchList)
    {
        try
        {
            foreach (var info in matchList)
            {
                if (!FilterPath(info.path))
                {
                    continue;
                }

                var match = Find(SearchItems, info.objectGUID);
                if (match != null)
                {
                    continue;
                }

                var matchItem = Find(info.objectGUID);
                if (matchItem == null)
                {
                    AkWaapiUtilities.GetResultListDelegate <WwiseObjectInfoJsonObject> callback = (List <WwiseObjectInfoJsonObject> items) =>
                    {
                        AddItemWithAncestorsToSearch(AkWaapiUtilities.ParseObjectInfo(items));
                    };
                    AkWaapiUtilities.GetWwiseObjectAndAncestors(info.objectGUID, waapiWwiseObjectOptions, callback);
                    continue;
                }

                AddItemToSearch(matchItem);
                treeviewCommandQueue.Enqueue(new TreeViewCommand(() => Expand(matchItem.objectGuid, false)));
            }
        }
        catch (System.Exception e)
        {
            UnityEngine.Debug.LogError("Search died");
            UnityEngine.Debug.LogError(e.Message);
        }
    }
Example #14
0
    public void OnGUI()
    {
        AkWwiseProjectInfo.DataSourceType ds;
        var buttonWidth = 150;

        using (new UnityEngine.GUILayout.HorizontalScope("box"))
        {
            ds = (AkWwiseProjectInfo.DataSourceType)UnityEditor.EditorGUILayout.EnumPopup(
                AkWwiseProjectInfo.GetData().currentDataSource, UnityEngine.GUILayout.Width(buttonWidth));
            UnityEngine.GUILayout.Space(5);

            var projectData = AkWwiseProjectInfo.GetData();

            if (ds != projectData.currentDataSource)
            {
                projectData.currentDataSource = ds;
                m_treeView.SetDataSource(AkWwiseProjectInfo.GetTreeData());
            }

            if (ds == AkWwiseProjectInfo.DataSourceType.FileSystem)
            {
                projectData.autoPopulateEnabled =
                    UnityEngine.GUILayout.Toggle(projectData.autoPopulateEnabled, "Auto populate");
            }
            else
            {
                projectData.AutoSyncSelection =
                    UnityEngine.GUILayout.Toggle(projectData.AutoSyncSelection, "Autosync selection");
                AkWwiseProjectInfo.WaapiPickerData.AutoSyncSelection = projectData.AutoSyncSelection;
            }

            UnityEngine.GUILayout.FlexibleSpace();

            if (UnityEngine.GUILayout.Button("Refresh Project", UnityEngine.GUILayout.Width(buttonWidth)))
            {
                if (ds == AkWwiseProjectInfo.DataSourceType.FileSystem)
                {
                    AkWwiseProjectInfo.Populate();
                }
                Refresh();
            }


            if (UnityEngine.GUILayout.Button("Generate SoundBanks", UnityEngine.GUILayout.Width(buttonWidth)))
            {
                if (AkUtilities.IsSoundbankGenerationAvailable())
                {
                    AkUtilities.GenerateSoundbanks();
                }
                else
                {
                    UnityEngine.Debug.LogError("Access to Wwise is required to generate the SoundBanks. Please go to Edit > Project Settings... and set the Wwise Application Path found in the Wwise Editor view.");
                }
            }

            if (projectData.autoPopulateEnabled && AkUtilities.IsWwiseProjectAvailable)
            {
                AkWwiseWWUBuilder.StartWWUWatcher();
            }
            else
            {
                AkWwiseWWUBuilder.StopWWUWatcher();
            }
        }

        using (new UnityEngine.GUILayout.HorizontalScope("box"))
        {
            var search_width = System.Math.Max(position.width / 3, buttonWidth * 2);

            if (ds == AkWwiseProjectInfo.DataSourceType.FileSystem)
            {
                m_treeView.StoredSearchString = m_SearchField.OnGUI(UnityEngine.GUILayoutUtility.GetRect(search_width, 20), m_treeView.StoredSearchString);
                UnityEngine.GUILayout.FlexibleSpace();
            }

            else
            {
                m_treeView.StoredSearchString = m_SearchField.OnGUI(UnityEngine.GUILayoutUtility.GetRect(search_width, 20), m_treeView.StoredSearchString);
                UnityEngine.GUILayout.FlexibleSpace();

                var labelStyle = new UnityEngine.GUIStyle();
                labelStyle.richText = true;
                UnityEngine.GUILayout.Label(AkWaapiUtilities.GetStatusString(), labelStyle);
            }
        }

        UnityEngine.GUILayout.Space(UnityEditor.EditorGUIUtility.standardVerticalSpacing);


        UnityEngine.GUILayout.FlexibleSpace();
        UnityEngine.Rect lastRect = UnityEngine.GUILayoutUtility.GetLastRect();
        m_treeView.OnGUI(new UnityEngine.Rect(lastRect.x, lastRect.y, position.width, lastRect.height));

        if (UnityEngine.GUI.changed && AkUtilities.IsWwiseProjectAvailable)
        {
            UnityEditor.EditorUtility.SetDirty(AkWwiseProjectInfo.GetData());
        }
    }
    void OnWaapiRenamed(string json)
    {
        var renamedItem = AkWaapiUtilities.ParseRenameObject(json);

        treeviewCommandQueue.Enqueue(new TreeViewCommand(() => Rename(renamedItem.objectInfo.objectGUID, renamedItem.newName)));
    }
    void OnWaapiChildRemoved(string json)
    {
        var removed = AkWaapiUtilities.ParseChildAddedOrRemoved(json);

        toRequeue.Enqueue(new TreeViewCommand(() => Remove(removed.parentInfo, removed.childInfo)));
    }
Example #17
0
    protected override void KeyEvent()
    {
        var selected = GetSelection();

        if (selected.Count == 0)
        {
            return;
        }
        var item = Find(GetSelection()[0]);

        if (UnityEngine.Event.current.type == UnityEngine.EventType.KeyDown)
        {
            switch (UnityEngine.Event.current.keyCode)
            {
            case UnityEngine.KeyCode.KeypadEnter:
                DoubleClickedItem(item.id);
                UnityEngine.Event.current.Use();
                break;

            case UnityEngine.KeyCode.Space:
                if (CanPlay(item))
                {
                    AkWaapiUtilities.TogglePlayEvent(item.objectType, item.objectGuid);
                }
                UnityEngine.Event.current.Use();
                break;

            case UnityEngine.KeyCode.Delete:
                if (CanDelete(item))
                {
                    AkWaapiUtilities.Delete(item.objectGuid);
                }
                UnityEngine.Event.current.Use();
                break;

            case UnityEngine.KeyCode.F2:
                if (CanRename(item))
                {
                    BeginRename(item);
                }
                UnityEngine.Event.current.Use();
                break;

            case UnityEngine.KeyCode.O:
                if (UnityEngine.Event.current.shift)
                {
                    if (CanOpen(item))
                    {
                        AkWaapiUtilities.OpenWorkUnitInExplorer(item.objectGuid);
                    }
                    UnityEngine.Event.current.Use();
                }
                break;

            case UnityEngine.KeyCode.F:
                if (UnityEngine.Event.current.shift)
                {
                    if (CanSelect(item))
                    {
                        m_dataSource.SelectObjectInAuthoring(item.objectGuid);
                    }
                    UnityEngine.Event.current.Use();
                }
                break;

            case UnityEngine.KeyCode.R:
                if (UnityEngine.Event.current.shift)
                {
                    FindReferencesInScene(item);
                    UnityEngine.Event.current.Use();
                }
                break;
            }
        }
    }
Example #18
0
    protected override void ContextClickedItem(int id)
    {
        UnityEditor.GenericMenu menu = new UnityEditor.GenericMenu();
        var item = Find(id);

        if (CheckWaapi())
        {
            if (CanPlay(item))
            {
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Play \u2215 Stop _SPACE"), false,
                             () => AkWaapiUtilities.TogglePlayEvent(item.objectType, item.objectGuid));
            }
            else
            {
                menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Play \u2215 Stop _Space"));
            }

            menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Stop All"), false,
                         () => AkWaapiUtilities.StopAllTransports());

            menu.AddSeparator("");

            if (CanRenameWithLog(item, false))
            {
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Rename _F2"), false,
                             () => BeginRename(item));
            }
            else
            {
                menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Rename"));
            }

            if (CanDelete(item, false))
            {
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Delete _Delete"), false,
                             () => AkWaapiUtilities.Delete(item.objectGuid));
            }
            else
            {
                menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Delete"));
            }

            menu.AddSeparator("");
            if (item.objectType == WwiseObjectType.Soundbank)
            {
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Open Folder/WorkUnit #O"), false,
                             () => AkWaapiUtilities.OpenWorkUnitInExplorer(item.objectGuid));
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Open Folder/SoundBank "), false,
                             () => AkWaapiUtilities.OpenSoundBankInExplorer(item.objectGuid));
            }
            else
            {
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Open Containing Folder #O"), false,
                             () => AkWaapiUtilities.OpenWorkUnitInExplorer(item.objectGuid));
            }

            menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Find in Project Explorer #F"), false,
                         () => m_dataSource.SelectObjectInAuthoring(item.objectGuid));
        }
        else
        {
            if (AkWwiseProjectInfo.GetData().currentDataSource == AkWwiseProjectInfo.DataSourceType.WwiseAuthoring)
            {
                menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Wwise Connection Settings"), false,
                             OpenSettings);
                menu.AddSeparator("");
            }

            menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Play \u2215 Stop"));
            menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Stop all"));
            menu.AddSeparator("");
            menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Rename"));
            menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Delete"));
            menu.AddSeparator("");
            menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Open Containing Folder"));
            menu.AddDisabledItem(UnityEditor.EditorGUIUtility.TrTextContent("Find in Project Explorer"));
        }

        menu.AddItem(UnityEditor.EditorGUIUtility.TrTextContent("Find References in Scene #R"), false,
                     () => FindReferencesInScene(item));

        menu.ShowAsContext();
    }
Example #19
0
 public bool CheckWaapi()
 {
     return(AkWwiseEditorSettings.Instance.UseWaapi && AkWaapiUtilities.IsConnected() &&
            AkWwiseProjectInfo.GetData().currentDataSource == AkWwiseProjectInfo.DataSourceType.WwiseAuthoring);
 }
 private void FireSelect(object sender, System.Timers.ElapsedEventArgs e)
 {
     AkWaapiUtilities.SelectObjectInAuthoring(guidToSelect);
 }