using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Threading; using Cysharp.Threading.Tasks; using UnityEngine.UIElements; #if UNITY_EDITOR using UnityEditor; using UnityEditor.UIElements; #endif namespace BITKit.UX { public interface IDataComponent : IStart, IStop { void SetKey(string value); } [System.Serializable] public sealed class MonoDataComponent : MonoBehaviour, IDataComponent { public MonoBehaviour mono; IDataComponent component => mono as IDataComponent; public void OnStart() { component.OnStart(); } public void OnStop() { component.OnStop(); } public void SetKey(string value) { component.SetKey(value); } } public abstract class DataComponents : IDataComponent { protected string key; public virtual void OnStart() { } public virtual void SetKey(string key) { this.key = key; } public virtual void OnStop() { } } public class UXData : MonoBehaviour { [SerializeReference, SubclassSelector] private IReference key; [SerializeReference, SubclassSelector] private IDataComponent dataParser; private async void Start() { await UniTask.NextFrame(); if (destroyCancellationToken.IsCancellationRequested) return; dataParser.SetKey(key.Value); dataParser.OnStart(); destroyCancellationToken.Register(dataParser.OnStop); } // #if UNITY_EDITOR // [UnityEditor.CustomEditor(typeof(UXData))] // public class UXDataInspector : BITInspector // { // public override VisualElement CreateInspectorGUI() // { // CreateSubTitle(Constant.Header.Settings); // var key = root.Create(); // CreateSubTitle(Constant.Header.Reference); // var dataParser = root.Create(); // // key.bindingPath = nameof(UXData.key); // dataParser.bindingPath = nameof(UXData.dataParser); // return root; // } // } // #endif } }