using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace SpellBoundAR.Items.Inventories.UI { [DisallowMultipleComponent] [RequireComponent(typeof(Text))] public class InventoryEntryDisplayQuantityText : MonoBehaviour { [SerializeField] private string prefix = string.Empty; [SerializeField] private int minimumQuantityToAppear = 2; [SerializeField] private List controlledGraphics; [Header("Cache")] private Text _text; private InventoryEntryDisplay _display; private IInventoryEntry _entry; private IInventoryEntry Entry { get => _entry; set { if (_entry == value) return; if (_entry != null) _entry.OnQuantityChanged -= RefreshText; _entry = value; if (_entry != null && isActiveAndEnabled) _entry.OnQuantityChanged += RefreshText; RefreshText(); } } private void Awake() { _text = GetComponent(); _display = GetComponentInParent(); } private void OnEnable() { if (_display) _display.OnEntryChanged += RefreshEntry; RefreshEntry(); RefreshText(); } private void OnDisable() { if (_display) _display.OnEntryChanged -= RefreshEntry; Entry = null; } private void RefreshEntry() { Entry = _display ? _display.Entry : null; } private void RefreshText() { if (!_text) return; int quantity = Entry?.Quantity ?? 0; bool shouldEnable = quantity >= minimumQuantityToAppear; if (_text) { _text.text = prefix + quantity; _text.enabled = shouldEnable; } foreach (Graphic graphic in controlledGraphics) { if (graphic) graphic.enabled = shouldEnable; } } #if UNITY_EDITOR private void OnValidate() { if (minimumQuantityToAppear < 0) minimumQuantityToAppear = 0; } #endif } }