CapersProject/Assets/02.Scripts/DDD/Ui/Tycoon/MealKitButton.cs
2025-02-18 06:47:56 +09:00

88 lines
2.3 KiB
C#

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);
}
}