101 lines
3.0 KiB
C#
101 lines
3.0 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using TMPro;
|
|
using DG.Tweening;
|
|
using System;
|
|
|
|
namespace Ashwild.Crafting
|
|
{
|
|
public class RecipeButtonUI : MonoBehaviour
|
|
{
|
|
[Header("References")]
|
|
[SerializeField] private Button selectButton;
|
|
[SerializeField] private Image iconImage;
|
|
[SerializeField] private TextMeshProUGUI nameText;
|
|
[SerializeField] private Button minusButton;
|
|
[SerializeField] private Button plusButton;
|
|
[SerializeField] private Image highlightImage;
|
|
[SerializeField] private CanvasGroup canvasGroup;
|
|
|
|
[Header("Animation")]
|
|
[SerializeField] private float selectedScale = 1.05f;
|
|
[SerializeField] private float scaleDuration = 0.15f;
|
|
[SerializeField] private Ease scaleEase = Ease.OutQuad;
|
|
|
|
private CraftingRecipe recipe;
|
|
private int craftCount = 1;
|
|
private Action<RecipeButtonUI> onSelected;
|
|
private Action<RecipeButtonUI> onCountChanged;
|
|
private Tweener scaleTween;
|
|
|
|
public CraftingRecipe Recipe => recipe;
|
|
public int CraftCount => craftCount;
|
|
|
|
public void Initialize(CraftingRecipe recipe, Action<RecipeButtonUI> onSelected, Action<RecipeButtonUI> onCountChanged)
|
|
{
|
|
this.recipe = recipe;
|
|
this.onSelected = onSelected;
|
|
this.onCountChanged = onCountChanged;
|
|
|
|
iconImage.sprite = recipe.Icon;
|
|
nameText.text = recipe.RecipeName;
|
|
craftCount = 1;
|
|
|
|
selectButton.onClick.AddListener(() => onSelected?.Invoke(this));
|
|
minusButton.onClick.AddListener(OnMinus);
|
|
plusButton.onClick.AddListener(OnPlus);
|
|
|
|
if (highlightImage != null)
|
|
highlightImage.gameObject.SetActive(false);
|
|
|
|
minusButton.gameObject.SetActive(false);
|
|
plusButton.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void SetSelected(bool selected)
|
|
{
|
|
if (highlightImage != null)
|
|
highlightImage.gameObject.SetActive(selected);
|
|
|
|
minusButton.gameObject.SetActive(selected);
|
|
plusButton.gameObject.SetActive(selected);
|
|
|
|
scaleTween?.Kill();
|
|
float target = selected ? selectedScale : 1f;
|
|
scaleTween = transform.DOScale(target, scaleDuration).SetEase(scaleEase).SetUpdate(true);
|
|
|
|
if (!selected)
|
|
craftCount = 1;
|
|
}
|
|
|
|
public void ResetCount()
|
|
{
|
|
craftCount = 1;
|
|
onCountChanged?.Invoke(this);
|
|
}
|
|
|
|
public void UpdateCraftability(bool canCraft)
|
|
{
|
|
canvasGroup.alpha = canCraft ? 1f : 0.5f;
|
|
}
|
|
|
|
private void OnMinus()
|
|
{
|
|
if (craftCount <= 1) return;
|
|
craftCount--;
|
|
onCountChanged?.Invoke(this);
|
|
}
|
|
|
|
private void OnPlus()
|
|
{
|
|
craftCount++;
|
|
onCountChanged?.Invoke(this);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
scaleTween?.Kill();
|
|
}
|
|
}
|
|
}
|