using System; using System.Linq; using UnityEditor; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; namespace RPGCoreCommon.Helpers { public static class VisualElementExtensions { public static void Click(this VisualElement visualElement) { using var clickEvent = ClickEvent.GetPooled(); clickEvent.target = visualElement; visualElement.panel.visualTree.SendEvent(clickEvent); if (visualElement is not Button button) return; using var ev = new NavigationSubmitEvent(); ev.target = button; button.SendEvent(ev); } public static void DisableDefaultAligning(this VisualElement visualElement) { const string class1 = "unity-base-field__inspector-field"; const string class2 = "unity-base-field__aligned"; visualElement.RegisterCallback(_ => { visualElement.Query(className: class1).ForEach(el => el.RemoveFromClassList(class1)); visualElement.Query(className: class2).ForEach(el => el.RemoveFromClassList(class2)); }, TrickleDown.TrickleDown); } public static void SetContextAligningHere(this VisualElement visualElement) { visualElement.AddToClassList("unity-inspector-element"); visualElement.AddToClassList("unity-inspector-main-container"); } /// /// Only for that has array element as . /// By default, those s always draw inside . /// When this function is called only content of foldout will be displayed (foldout will be hidden). /// /// Property field that will draw array element public static void HideFoldoutAndLabel(this PropertyField propertyField) { propertyField.RegisterCallback(_ => { propertyField.label = ""; if (propertyField.Q(name: "unity-foldout-" + propertyField.bindingPath) is {} foldout2) { foldout2.Q().style.display = DisplayStyle.None; foldout2.Q().value = true; foldout2.Q(name: "unity-content").style.marginLeft = 0; } else if (propertyField.Q