using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.UIElements; using UnityEditor.UIElements; namespace BITKit.Editors { [CustomPropertyDrawer(typeof(IntervalUpdate))] public class IntervalUpdateInspector : PropertyDrawer { public override VisualElement CreatePropertyGUI(SerializedProperty property) { IntervalUpdate intervalUpdate = null; try { intervalUpdate = property.serializedObject .GetType() .GetProperty(property.name)? .GetValue(property.serializedObject) as IntervalUpdate; } catch (System.Exception e) { Debug.LogException(e); } // Create property container element. var container = new VisualElement(); // Create property fields. var enable = new Toggle("Enabled"); var updateInterval = new PropertyField(property.FindPropertyRelative(nameof(IntervalUpdate.updateInterval))); enable.BindProperty(property.FindPropertyRelative(nameof(IntervalUpdate.enable))); // Add fields to the container. container.Add(enable); container.Add(updateInterval); #if UNITY_EDITOR enable.RegisterValueChangedCallback(x => { if (UnityEditor.EditorApplication.isPlaying) { intervalUpdate?.SetActive(x.newValue); } }); #endif return container; } public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var enabled = property.FindPropertyRelative("enable"); var updateInterval = property.FindPropertyRelative("updateInterval"); EditorGUI.BeginProperty(position, label, property); EditorGUI.PropertyField(position, enabled, label); EditorGUI.PropertyField(position, updateInterval, label); EditorGUI.EndProperty(); } } }