using DDD.Managers;
using DDD.ScriptableObjects;
using Sirenix.OdinInspector;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace DDD.Uis.Tycoon
{
public class SelectedCraftRecipeIngredient : MonoBehaviour
{
[Title("컴포넌트")]
[SerializeField]
private Image _boxImage;
[SerializeField]
private Image _itemImage;
[SerializeField]
private TMP_Text _countText;
[Title("효과")]
[SerializeField]
private Color _craftableColor = Color.black;
[SerializeField]
private Color _uncraftableColor = Color.red;
[SerializeField]
private Sprite _craftableSprite;
[SerializeField]
private Sprite _uncraftableSprite;
[field: Title("실시간 데이터")]
[field: SerializeField]
public bool IsCraftable { get; private set; }
[SerializeField]
private CraftingIngredient _currentCraftingIngredient;
private void Start()
{
DataManager.Instance.Inventory.OnChangedInventoryItemSlot += UpdateIngredients;
}
private void OnDestroy()
{
if (!DataManager.Instance || DataManager.Instance.Inventory == null) return;
DataManager.Instance.Inventory.OnChangedInventoryItemSlot -= UpdateIngredients;
}
public void UpdateIngredients(CraftingIngredient craftingIngredient)
{
_currentCraftingIngredient = craftingIngredient;
ItemData itemData = ItemManager.Instance.ItemDataSo.GetDataByIdx(_currentCraftingIngredient.Idx);
_itemImage.sprite = itemData.Sprite;
int inventoryCount = DataManager.Instance.Inventory.GetItemByIdx(itemData.Idx)?.Count ?? 0;
int requiredCount = _currentCraftingIngredient.Count;
_countText.text = requiredCount.ToString();
IsCraftable = inventoryCount >= requiredCount;
_boxImage.sprite = IsCraftable ? _craftableSprite : _uncraftableSprite;
_countText.color = IsCraftable ? _craftableColor : _uncraftableColor;
}
///
/// 인벤토리 이벤트용 재료 업데이트 함수
///
///
///
private void UpdateIngredients(InventoryItemSlot inventoryItemSlot, bool addOrRemove)
{
UpdateIngredients(_currentCraftingIngredient);
}
public void UpdateCraftableCount(int craftableCount)
{
ItemData itemData = ItemManager.Instance.ItemDataSo.GetDataByIdx(_currentCraftingIngredient.Idx);
int inventoryCount = DataManager.Instance.Inventory.GetItemByIdx(itemData.Idx)?.Count ?? 0;
int requiredCount = _currentCraftingIngredient.Count * craftableCount;
_countText.text = requiredCount.ToString();
}
public void ShowUi() => gameObject.SetActive(true);
public void HideUi() => gameObject.SetActive(false);
}
}