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); } } }
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); } }
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))); }
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; } } }
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(); }
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); }