using DDD.ScriptableObjects; using Sirenix.OdinInspector; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; namespace DDD.Uis.Tycoon { public class MealKitButton : MonoBehaviour { [field: Title("컴포넌트")] [field: SerializeField] public Button Button { get; private set; } [SerializeField] private Image _image; [SerializeField] private TMP_Text _countText; [Title("연출")] [SerializeField] private Color _enableColor = Color.white; [SerializeField] private Color _disableColor = Color.gray; [field: Title("레시피 데이터")] [field: SerializeField] public CraftRecipeData CraftRecipeData { get; private set; } [field: SerializeField] public int Count { get; private set; } private UnityAction _clickAction; private void OnDestroy() { UnregisterButtonListener(); } public void RegisterButtonListener(UnityAction clickAction) { _clickAction = clickAction; Button.onClick.AddListener(_clickAction); } private void UnregisterButtonListener() { if (_clickAction == null) return; Button.onClick.RemoveListener(_clickAction); _clickAction = null; } public void SetMealKit(CraftRecipeData craftRecipeData, int count) { CraftRecipeData = craftRecipeData; Count = count; UpdateUi(); } private void UpdateUi() { Button.interactable = Count > 0; _image.sprite = CraftRecipeData?.Sprite; _countText.text = Count.ToString(); Button.targetGraphic.color = Button.interactable ? _enableColor : _disableColor; _image.color = Button.interactable ? _enableColor : _disableColor; } public bool CanInteraction() { return CraftRecipeData != null && Count > 0 && Button.interactable; } public void PickupMealKit() { Count--; UpdateUi(); } public void ShowUi() => gameObject.SetActive(true); public void HideUi() => gameObject.SetActive(false); } }