using DDD.Interfaces; using DDD.ScriptableObjects; using Sirenix.OdinInspector; using UnityEngine; namespace DDD.Players.Tycoons { public class TycoonPickupHandler : MonoBehaviour { [SerializeField] private SpriteRenderer _itemRenderer; [field: SerializeField] public bool IsUnfinishedCocktailPickedUp { get; private set; } [field: SerializeField] public bool IsPickedUpItem { get; private set; } [field: SerializeField] public bool IsPickedUpCook { get; private set; } public IPickup CurrentPickupItem { get; private set; } public CraftRecipeData CurrentCraftRecipeData { get; private set; } private void Awake() { InitializeComponents(); } private void Start() { EventManager.OnMakeCocktailStarted += PickupUnfinishedCocktail; } private void OnDestroy() { EventManager.OnMakeCocktailStarted -= PickupUnfinishedCocktail; } [Button("컴포넌트 초기화")] private void InitializeComponents() { _itemRenderer = transform.Find("VisualLook/Item").GetComponent(); } private void PickupUnfinishedCocktail() { IsUnfinishedCocktailPickedUp = true; } public void PickupItem(IPickup item, bool isMadePlayer) { if (!isMadePlayer) return; if (IsPickedUpItem) { Debug.Log("이미 아이템을 들고 있습니다."); return; } IsUnfinishedCocktailPickedUp = false; SetCurrentPickupItem(item); _itemRenderer.enabled = false; //_itemRenderer.sprite = item.Sprite; IsPickedUpItem = true; } public void ServedItem(IPickup item) { if (!IsPickedUpItem || CurrentPickupItem == null) { Debug.Log("들고있는 아이템이 없거나, 현재 아이템 데이터가 비어있습니다."); return; } SetCurrentPickupItem(null); _itemRenderer.sprite = null; IsPickedUpItem = false; } public void DiscardItem() { if (!IsPickedUpItem && !IsUnfinishedCocktailPickedUp) { Debug.Log("들고있는 아이템이 없습니다."); return; } IsUnfinishedCocktailPickedUp = false; SetCurrentPickupItem(null); _itemRenderer.sprite = null; IsPickedUpItem = false; } public void ChangeItem(IPickup item) { IsUnfinishedCocktailPickedUp = false; SetCurrentPickupItem(item); _itemRenderer.enabled = false; IsPickedUpItem = true; } public bool IsServablePickupItem() => IsPickedUpItem && CurrentPickupItem.Idx != "Cocktail000"; /// /// 제조중인 칵테일이 있거나, 아이템이 있는 경우 /// public bool IsPickedUpAnything() => IsPickedUpItem || IsUnfinishedCocktailPickedUp; public void SetCurrentPickupItem(IPickup item) { CurrentPickupItem = item; EventManager.InvokeChangedPickupItem(CurrentPickupItem?.Idx); } public bool PickupCook(CraftRecipeData craftRecipeData) { if (IsPickedUpCook) { Debug.Log("이미 밀키트를 들고 있습니다."); return false; } SetCurrentCraftRecipeData(craftRecipeData); IsUnfinishedCocktailPickedUp = false; _itemRenderer.enabled = false; //_itemRenderer.sprite = item.Sprite; IsPickedUpCook = true; return true; } public void InteractionCraftingTool() { CurrentCraftRecipeData.CraftingToolQueue.Dequeue(); if (CurrentCraftRecipeData.CraftingToolQueue.Count <= 0) { // TODO : 요리 완성 처리 EventManager.InvokeChangedCraftingTool(null); } else { EventManager.InvokeChangedCraftingTool(CurrentCraftRecipeData.CraftingToolQueue.Peek()); } } public void DiscardCook() { SetCurrentCraftRecipeData(null); _itemRenderer.sprite = null; IsPickedUpCook = false; } public void SetCurrentCraftRecipeData(CraftRecipeData craftRecipeData) { CurrentCraftRecipeData = craftRecipeData; EventManager.InvokeChangedPickupItem(CurrentCraftRecipeData?.Idx); if (CurrentCraftRecipeData == null || CurrentCraftRecipeData.CraftingToolQueue.Count <= 0) { EventManager.InvokeChangedCraftingTool(null); } else { EventManager.InvokeChangedCraftingTool(CurrentCraftRecipeData.CraftingToolQueue.Peek()); } } } }