88 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|