private void OnEnable() { CheckUpdateTaskStatus(); logoTexture = EditorUtils.LoadImage(EditorGUIUtility.isProSkin ? logoWhite : logoBlack); crossTexture = EditorUtils.LoadImage("CrossYellow.png"); tickTexture = EditorUtils.LoadImage("TickGreen.png"); titleStyle = new GUIStyle(); titleStyle.normal.textColor = EditorGUIUtility.isProSkin ? Color.white : Color.black; titleStyle.wordWrap = true; titleStyle.fontStyle = FontStyle.Bold; titleStyle.alignment = TextAnchor.MiddleCenter; bodyStyle = new GUIStyle(titleStyle); crumbStyle = new GUIStyle(titleStyle); crumbDefault = EditorGUIUtility.isProSkin ? Color.gray : Color.gray; crumbHighlight = EditorGUIUtility.isProSkin ? Color.white : Color.black; scroll1 = scroll2 = new Vector2(); iconStyle = new GUIStyle(); iconStyle.alignment = TextAnchor.MiddleCenter; CheckUpdatesComplete(); CheckStudioLinked(); CheckListeners(); CheckSources(); CheckUnityAudio(); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { Texture browseIcon = EditorUtils.LoadImage("SearchIconBlack.png"); SerializedProperty pathProperty = property; EditorGUI.BeginProperty(position, label, property); Event e = Event.current; if (e.type == EventType.DragPerform && position.Contains(e.mousePosition)) { if (DragAndDrop.objectReferences.Length > 0 && DragAndDrop.objectReferences[0] != null && DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef)) { pathProperty.stringValue = ((EditorBankRef)DragAndDrop.objectReferences[0]).Name; e.Use(); } } if (e.type == EventType.DragUpdated && position.Contains(e.mousePosition)) { if (DragAndDrop.objectReferences.Length > 0 && DragAndDrop.objectReferences[0] != null && DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef)) { DragAndDrop.visualMode = DragAndDropVisualMode.Move; DragAndDrop.AcceptDrag(); e.Use(); } } float baseHeight = GUI.skin.textField.CalcSize(new GUIContent()).y; position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); var buttonStyle = new GUIStyle(GUI.skin.button); buttonStyle.padding.top = buttonStyle.padding.bottom = 1; Rect searchRect = new Rect(position.x + position.width - browseIcon.width - 15, position.y, browseIcon.width + 10, baseHeight); Rect pathRect = new Rect(position.x, position.y, searchRect.x - position.x - 5, baseHeight); EditorGUI.PropertyField(pathRect, pathProperty, GUIContent.none); if (GUI.Button(searchRect, new GUIContent(browseIcon, "Select FMOD Bank"), buttonStyle)) { var eventBrowser = ScriptableObject.CreateInstance <EventBrowser>(); eventBrowser.ChooseBank(property); var windowRect = position; windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position); windowRect.height = searchRect.height + 1; eventBrowser.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 400)); } EditorGUI.EndProperty(); }
public override void OnInspectorGUI() { if (NotFoundWarning == null) { Texture warningIcon = EditorUtils.LoadImage("NotFound.png"); NotFoundWarning = new GUIContent("Parameter Not Found", warningIcon); } EditorGUILayout.PropertyField(trigger, new GUIContent("Trigger")); if (trigger.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && trigger.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D) { tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); } EditorGUILayout.PropertyField(param, new GUIContent("Parameter")); if (param.stringValue != currentPath) { currentPath = param.stringValue; if (string.IsNullOrEmpty(param.stringValue)) { editorParamRef = null; } else { editorParamRef = EventManager.ParamFromPath(param.stringValue); value.floatValue = Mathf.Clamp(value.floatValue, editorParamRef.Min, editorParamRef.Max); } } if (editorParamRef != null) { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.PrefixLabel("Override Value"); value.floatValue = EditorUtils.DrawParameterValueLayout(value.floatValue, editorParamRef); } } else { Rect rect = EditorGUILayout.GetControlRect(); rect.xMin += EditorGUIUtility.labelWidth; GUI.Label(rect, NotFoundWarning); } serializedObject.ApplyModifiedProperties(); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { if (buttonStyle == null) { buttonStyle = new GUIStyle(GUI.skin.button); buttonStyle.padding.top = 1; buttonStyle.padding.bottom = 1; } Texture browseIcon = EditorUtils.LoadImage("SearchIconBlack.png"); Texture openIcon = EditorUtils.LoadImage("BrowserIcon.png"); Texture addIcon = EditorUtils.LoadImage("AddIcon.png"); Texture copyIcon = EditorUtils.LoadImage("CopyIcon.png"); using (new EditorGUI.PropertyScope(position, label, property)) { HandleDragEvents(position, property); EventReference eventReference = property.GetEventReference(); EditorEventRef editorEventRef = GetEditorEventRef(eventReference); float baseHeight = GetBaseHeight(); Rect headerRect = position; headerRect.width = EditorGUIUtility.labelWidth; headerRect.height = baseHeight; if (editorEventRef != null) { property.isExpanded = EditorGUI.Foldout(headerRect, property.isExpanded, label, true); } else { EditorGUI.LabelField(headerRect, label); } Rect addRect = new Rect(position.xMax - addIcon.width - 7, position.y, addIcon.width + 7, baseHeight); Rect openRect = new Rect(addRect.x - openIcon.width - 7, position.y, openIcon.width + 6, baseHeight); Rect searchRect = new Rect(openRect.x - browseIcon.width - 9, position.y, browseIcon.width + 8, baseHeight); Rect pathRect = position; pathRect.xMin = headerRect.xMax; pathRect.xMax = searchRect.x - 3; pathRect.height = baseHeight; SerializedProperty pathProperty = GetPathProperty(property); using (var scope = new EditorGUI.ChangeCheckScope()) { EditorGUI.PropertyField(pathRect, pathProperty, GUIContent.none); if (scope.changed) { SetEvent(property, pathProperty.stringValue); } } if (GUI.Button(searchRect, new GUIContent(browseIcon, "Search"), buttonStyle)) { var eventBrowser = ScriptableObject.CreateInstance <EventBrowser>(); eventBrowser.ChooseEvent(property); var windowRect = position; windowRect.xMin = pathRect.xMin; windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position); windowRect.height = openRect.height + 1; eventBrowser.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 400)); } if (GUI.Button(addRect, new GUIContent(addIcon, "Create New Event in Studio"), buttonStyle)) { var addDropdown = EditorWindow.CreateInstance <CreateEventPopup>(); addDropdown.SelectEvent(property); var windowRect = position; windowRect.xMin = pathRect.xMin; windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position); windowRect.height = openRect.height + 1; addDropdown.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 500)); } if (GUI.Button(openRect, new GUIContent(openIcon, "Open In Browser"), buttonStyle) && !string.IsNullOrEmpty(pathProperty.stringValue) && EventManager.EventFromPath(pathProperty.stringValue) != null ) { EventBrowser.ShowWindow(); EventBrowser eventBrowser = EditorWindow.GetWindow <EventBrowser>(); eventBrowser.FrameEvent(pathProperty.stringValue); } if (editorEventRef != null) { float labelY = headerRect.y + baseHeight; MismatchInfo mismatch = GetMismatch(eventReference, editorEventRef); if (mismatch != null) { Rect warningRect = pathRect; warningRect.xMax = position.xMax; warningRect.y = labelY; warningRect.height = WarningSize().y; DrawMismatchUI(warningRect, openRect.x, openRect.width, mismatch, property); labelY = warningRect.yMax; } if (property.isExpanded) { using (new EditorGUI.IndentLevelScope()) { Rect labelRect = EditorGUI.IndentedRect(headerRect); labelRect.y = labelY; Rect valueRect = labelRect; valueRect.xMin = labelRect.xMax; valueRect.xMax = position.xMax - copyIcon.width - 7; GUI.Label(labelRect, new GUIContent("GUID")); GUI.Label(valueRect, eventReference.Guid.ToString()); Rect copyRect = valueRect; copyRect.xMin = valueRect.xMax; copyRect.xMax = position.xMax; if (GUI.Button(copyRect, new GUIContent(copyIcon, "Copy To Clipboard"))) { EditorGUIUtility.systemCopyBuffer = eventReference.Guid.ToString(); } valueRect.xMax = position.xMax; labelRect.y += baseHeight; valueRect.y += baseHeight; GUI.Label(labelRect, new GUIContent("Banks")); GUI.Label(valueRect, string.Join(", ", editorEventRef.Banks.Select(x => x.Name).ToArray())); labelRect.y += baseHeight; valueRect.y += baseHeight; GUI.Label(labelRect, new GUIContent("Panning")); GUI.Label(valueRect, editorEventRef.Is3D ? "3D" : "2D"); labelRect.y += baseHeight; valueRect.y += baseHeight; GUI.Label(labelRect, new GUIContent("Stream")); GUI.Label(valueRect, editorEventRef.IsStream.ToString()); labelRect.y += baseHeight; valueRect.y += baseHeight; GUI.Label(labelRect, new GUIContent("Oneshot")); GUI.Label(valueRect, editorEventRef.IsOneShot.ToString()); labelRect.y += baseHeight; valueRect.y += baseHeight; } } } else { EditorEventRef renamedEvent = GetRenamedEventRef(eventReference); if (renamedEvent != null) { MismatchInfo mismatch = new MismatchInfo() { Message = string.Format("Moved to {0}", renamedEvent.Path), HelpText = string.Format( "This event has been moved in FMOD Studio.\n" + "You can click the repair button to update the path to the new location, or run " + "the <b>{0}</b> command to scan your project for similar issues and fix them all.", EventReferenceUpdater.MenuPath), RepairTooltip = string.Format("Repair: set path to {0}", renamedEvent.Path), RepairAction = (p) => { p.FindPropertyRelative("Path").stringValue = renamedEvent.Path; }, }; using (new EditorGUI.IndentLevelScope()) { Rect mismatchRect = pathRect; mismatchRect.xMin = position.xMin; mismatchRect.xMax = position.xMax; mismatchRect.y += baseHeight; mismatchRect.height = baseHeight; mismatchRect = EditorGUI.IndentedRect(mismatchRect); DrawMismatchUI(mismatchRect, openRect.x, openRect.width, mismatch, property); } } else { Rect labelRect = pathRect; labelRect.xMax = position.xMax; labelRect.y += baseHeight; labelRect.height = WarningSize().y; GUI.Label(labelRect, NotFoundWarning); } } } }
public void OnGUI() { var borderIcon = EditorUtils.LoadImage("Border.png"); var border = new GUIStyle(GUI.skin.box); border.normal.background = borderIcon; GUI.Box(new Rect(1, 1, position.width - 1, position.height - 1), GUIContent.none, border); if (Event.current.type == EventType.Layout) { isConnected = EditorUtils.IsConnectedToStudio(); } if (!isConnected) { this.ShowNotification(new GUIContent("FMOD Studio not running")); return; } this.RemoveNotification(); if (rootFolder == null) { BuildTree(); currentFolder = rootFolder; } var arrowIcon = EditorUtils.LoadImage("ArrowIcon.png"); var hoverIcon = EditorUtils.LoadImage("SelectedAlt.png"); var titleIcon = EditorGUIUtility.Load("IN BigTitle") as Texture2D; var nextEntry = currentFolder; var filteredEntries = currentFolder.entries.FindAll((x) => x.name.StartsWith(currentFilter, StringComparison.CurrentCultureIgnoreCase)); // Process key strokes for the folder list { if (Event.current.keyCode == KeyCode.UpArrow) { if (Event.current.type == EventType.KeyDown) { lastHover = Math.Max(lastHover - 1, 0); if (filteredEntries[lastHover].rect.y < scrollPos.y) { scrollPos.y = filteredEntries[lastHover].rect.y; } } Event.current.Use(); } if (Event.current.keyCode == KeyCode.DownArrow) { if (Event.current.type == EventType.KeyDown) { lastHover = Math.Min(lastHover + 1, filteredEntries.Count - 1); if (filteredEntries[lastHover].rect.y + filteredEntries[lastHover].rect.height > scrollPos.y + scrollRect.height) { scrollPos.y = filteredEntries[lastHover].rect.y - scrollRect.height + filteredEntries[lastHover].rect.height * 2; } } Event.current.Use(); } if (Event.current.keyCode == KeyCode.RightArrow) { if (Event.current.type == EventType.KeyDown) { nextEntry = filteredEntries[lastHover]; } Event.current.Use(); } if (Event.current.keyCode == KeyCode.LeftArrow) { if (Event.current.type == EventType.KeyDown) { if (currentFolder.parent != null) { nextEntry = currentFolder.parent; } } Event.current.Use(); } } bool disabled = eventName.Length == 0; EditorGUI.BeginDisabledGroup(disabled); if (GUILayout.Button("Create Event")) { CreateEventInStudio(); this.Close(); } EditorGUI.EndDisabledGroup(); { GUI.SetNextControlName("name"); EditorGUILayout.LabelField("Name"); eventName = EditorGUILayout.TextField(eventName); } { EditorGUILayout.LabelField("Bank"); selectedBank = EditorGUILayout.Popup(selectedBank, banks.Select(x => x.name).ToArray()); } bool updateEventPath = false; { GUI.SetNextControlName("folder"); EditorGUI.BeginChangeCheck(); EditorGUILayout.LabelField("Path"); eventFolder = GUILayout.TextField(eventFolder); if (EditorGUI.EndChangeCheck()) { updateEventPath = true; } } if (resetCursor) { resetCursor = false; var textEditor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); if (textEditor != null) { textEditor.MoveCursorToPosition(new Vector2(9999, 9999)); } } // Draw the current folder as a title bar, click to go back one level { Rect currentRect = EditorGUILayout.GetControlRect(); var bg = new GUIStyle(GUI.skin.box); bg.normal.background = titleIcon; Rect bgRect = new Rect(currentRect); bgRect.x = 2; bgRect.width = position.width - 4; GUI.Box(bgRect, GUIContent.none, bg); Rect textureRect = currentRect; textureRect.width = arrowIcon.width; if (currentFolder.name != null) { GUI.DrawTextureWithTexCoords(textureRect, arrowIcon, new Rect(1, 1, -1, -1)); } Rect labelRect = currentRect; labelRect.x += arrowIcon.width + 50; labelRect.width -= arrowIcon.width + 50; GUI.Label(labelRect, currentFolder.name != null ? currentFolder.name : "Folders", EditorStyles.boldLabel); if (Event.current.type == EventType.MouseDown && currentRect.Contains(Event.current.mousePosition) && currentFolder.parent != null) { nextEntry = currentFolder.parent; Event.current.Use(); } } var normal = new GUIStyle(GUI.skin.label); normal.padding.left = 14; var hover = new GUIStyle(normal); hover.normal.background = hoverIcon; scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false); for (int i = 0; i < filteredEntries.Count; i++) { var entry = filteredEntries[i]; var content = new GUIContent(entry.name); var rect = EditorGUILayout.GetControlRect(); if ((rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseMove) || i == lastHover) { lastHover = i; GUI.Label(rect, content, hover); if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown) { nextEntry = entry; } } else { GUI.Label(rect, content, normal); } Rect textureRect = rect; textureRect.x = textureRect.width - arrowIcon.width; textureRect.width = arrowIcon.width; GUI.DrawTexture(textureRect, arrowIcon); if (Event.current.type == EventType.Repaint) { entry.rect = rect; } } EditorGUILayout.EndScrollView(); if (Event.current.type == EventType.Repaint) { scrollRect = GUILayoutUtility.GetLastRect(); } if (currentFolder != nextEntry) { lastHover = 0; currentFolder = nextEntry; UpdateTextFromList(); Repaint(); } if (updateEventPath) { UpdateListFromText(); } if (Event.current.type == EventType.MouseMove) { Repaint(); } }
public override void OnInspectorGUI() { var load = serializedObject.FindProperty("LoadEvent"); var unload = serializedObject.FindProperty("UnloadEvent"); var tag = serializedObject.FindProperty("CollisionTag"); var banks = serializedObject.FindProperty("Banks"); var preload = serializedObject.FindProperty("PreloadSamples"); EditorGUILayout.PropertyField(load, new GUIContent("Load")); EditorGUILayout.PropertyField(unload, new GUIContent("Unload")); if ((load.enumValueIndex >= 3 && load.enumValueIndex <= 6) || (unload.enumValueIndex >= 3 && unload.enumValueIndex <= 6)) { tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); } EditorGUILayout.PropertyField(preload, new GUIContent("Preload Sample Data")); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Banks"); EditorGUILayout.BeginVertical(); if (GUILayout.Button("Add Bank", GUILayout.ExpandWidth(false))) { banks.InsertArrayElementAtIndex(banks.arraySize); SerializedProperty newBank = banks.GetArrayElementAtIndex(banks.arraySize - 1); newBank.stringValue = ""; EventBrowser browser = CreateInstance <EventBrowser>(); browser.titleContent = new GUIContent("Select FMOD Bank"); browser.ChooseBank(newBank); browser.ShowUtility(); } Texture deleteTexture = EditorUtils.LoadImage("Delete.png"); GUIContent deleteContent = new GUIContent(deleteTexture, "Delete Bank"); var buttonStyle = new GUIStyle(GUI.skin.button); buttonStyle.padding.top = buttonStyle.padding.bottom = 1; buttonStyle.margin.top = 2; buttonStyle.padding.left = buttonStyle.padding.right = 4; buttonStyle.fixedHeight = GUI.skin.textField.CalcSize(new GUIContent()).y; for (int i = 0; i < banks.arraySize; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(banks.GetArrayElementAtIndex(i), GUIContent.none); if (GUILayout.Button(deleteContent, buttonStyle, GUILayout.ExpandWidth(false))) { banks.DeleteArrayElementAtIndex(i); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); Event e = Event.current; if (e.type == EventType.DragPerform) { if (DragAndDrop.objectReferences.Length > 0 && DragAndDrop.objectReferences[0] != null && DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef)) { int pos = banks.arraySize; banks.InsertArrayElementAtIndex(pos); var pathProperty = banks.GetArrayElementAtIndex(pos); pathProperty.stringValue = ((EditorBankRef)DragAndDrop.objectReferences[0]).Name; e.Use(); } } if (e.type == EventType.DragUpdated) { if (DragAndDrop.objectReferences.Length > 0 && DragAndDrop.objectReferences[0] != null && DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef)) { DragAndDrop.visualMode = DragAndDropVisualMode.Move; DragAndDrop.AcceptDrag(); e.Use(); } } serializedObject.ApplyModifiedProperties(); }