using System; using System.Collections.Generic; using IronMountain.StandardAnimations.RectTransforms; using SpellBoundAR.Selections; using UnityEngine; namespace SpellBoundAR.CustomTextures.UI { public class CustomTextureIndex : MonoBehaviour { public event Action OnOpen; public event Action OnClose; public readonly SelectionManager SelectionManager = new (); [Header("References")] [SerializeField] private Drawer drawer; [SerializeField] private TexturePreview prefab; [SerializeField] private Transform parent; [Header("Cache")] private ISavedCustomTexturesManager _savedCustomTexturesManager; private void Awake() { _savedCustomTexturesManager = GetComponentInParent(); if (drawer) drawer.CloseImmediate(); RefreshIndex(); } public CustomTextureIndex Initialize(ISavedCustomTexturesManager savedCustomTexturesManager) { _savedCustomTexturesManager = savedCustomTexturesManager; if (drawer) drawer.CloseImmediate(); RefreshIndex(); return this; } public void Open() { if (drawer) drawer.Open(); OnOpen?.Invoke(); } public void Close() { if (drawer) { drawer.Close(); Destroy(gameObject, drawer.Seconds); } else Destroy(gameObject); OnClose?.Invoke(); } private void ClearButtons() { if (!prefab) return; foreach (Transform child in parent) { Destroy(child.gameObject); } } private void RefreshIndex() { ClearButtons(); if (!prefab || _savedCustomTexturesManager == null) return; foreach (KeyValuePair entry in _savedCustomTexturesManager.CustomTextures) { if (entry.Value is not {Saved: true}) continue; TexturePreview texturePreview = Instantiate(prefab, parent); texturePreview.SavedCustomTexture = entry.Value; texturePreview.Index = this; } } } }