using System; using System.Collections; using System.Collections.Generic; using BITKit.UX; using UnityEngine; using UnityEngine.UIElements; // ReSharper disable MemberCanBePrivate.Global public class UXBuilder : MonoBehaviour { [SerializeReference, SubclassSelector] private IVisualElementProvider visualElementProvider; [SerializeField] private VisualTreeAsset visualTreeAsset; [SerializeField] private bool clearOnStart; private readonly List instances = new(); public VisualElement VisualElement => visualElementProvider.GetVisualElement(); private IList ItemSource { get => _itemSource; set => OnBindItemSource(value); } private IList _itemSource; public T Build() where T : VisualElement,new() { var clone =visualTreeAsset is not null ? visualTreeAsset.CloneTree()[0] : new T(); visualElementProvider.GetVisualElement().Add(clone); instances.Add(clone); return clone as T; } public T Build(Func createFactory) where T : VisualElement { var clone = createFactory.Invoke(); visualElementProvider.GetVisualElement().Add(clone); instances.Add(clone); return clone as T; } public UXContainer BuildAsContainer(Func createFactory) => new(Build(createFactory)); public UXContainer BuildAsContainer() => new(Build()); public void Clear() { foreach (var x in instances) { visualElementProvider.GetVisualElement().Remove(x); } instances.Clear(); } private void OnBindItemSource(IList source) { _itemSource = source; } public void Rebuild() { } private void Start() { if (clearOnStart) { visualElementProvider.GetVisualElement().Clear(); } } }