using System.Collections.Generic; using UnityEngine; namespace YachtDice.Shop { [CreateAssetMenu(fileName = "ShopCatalog", menuName = "YachtDice/Shop/Catalog")] public class ShopCatalog : ScriptableObject { [SerializeField] private List items = new(); private List _cachedItems; public IReadOnlyList All { get { if (_cachedItems == null) RebuildCache(); return _cachedItems; } } public IShopItem FindById(string id) { var all = All; for (int i = 0; i < all.Count; i++) { if (all[i] != null && all[i].Id == id) return all[i]; } return null; } private void RebuildCache() { _cachedItems = new List(); for (int i = 0; i < items.Count; i++) { if (items[i] is IShopItem shopItem) _cachedItems.Add(shopItem); } } private void OnValidate() => _cachedItems = null; } }