CapersProject/Assets/02.Scripts/BlueWater/Character/Player/Tycoon/TycoonPickupHandler.cs

170 lines
5.1 KiB
C#
Raw Normal View History

2025-02-10 02:13:46 +00:00
using DDD.Interfaces;
2025-02-17 21:47:56 +00:00
using DDD.ScriptableObjects;
using Sirenix.OdinInspector;
using UnityEngine;
2025-02-10 02:13:46 +00:00
namespace DDD.Players.Tycoons
{
2024-09-10 10:52:32 +00:00
public class TycoonPickupHandler : MonoBehaviour
{
[SerializeField]
private SpriteRenderer _itemRenderer;
2024-11-04 12:22:07 +00:00
[field: SerializeField]
public bool IsUnfinishedCocktailPickedUp { get; private set; }
2024-09-23 02:00:21 +00:00
2024-11-04 12:22:07 +00:00
[field: SerializeField]
public bool IsPickedUpItem { get; private set; }
2024-11-26 08:22:26 +00:00
2025-02-17 21:47:56 +00:00
[field: SerializeField]
public bool IsPickedUpCook { get; private set; }
2024-11-26 08:22:26 +00:00
public IPickup CurrentPickupItem { get; private set; }
2025-02-17 21:47:56 +00:00
public CraftRecipeData CurrentCraftRecipeData { get; private set; }
private void Awake()
{
InitializeComponents();
}
private void Start()
{
2024-10-29 12:17:00 +00:00
EventManager.OnMakeCocktailStarted += PickupUnfinishedCocktail;
2024-09-10 10:25:05 +00:00
}
private void OnDestroy()
{
2024-10-29 12:17:00 +00:00
EventManager.OnMakeCocktailStarted -= PickupUnfinishedCocktail;
}
[Button("컴포넌트 초기화")]
private void InitializeComponents()
{
_itemRenderer = transform.Find("VisualLook/Item").GetComponent<SpriteRenderer>();
}
2024-09-23 02:00:21 +00:00
private void PickupUnfinishedCocktail()
{
2024-11-04 12:22:07 +00:00
IsUnfinishedCocktailPickedUp = true;
2024-09-23 02:00:21 +00:00
}
2024-10-29 12:17:00 +00:00
public void PickupItem(IPickup item, bool isMadePlayer)
{
2024-10-29 12:17:00 +00:00
if (!isMadePlayer) return;
2024-11-04 12:22:07 +00:00
if (IsPickedUpItem)
{
Debug.Log("이미 아이템을 들고 있습니다.");
return;
}
2024-11-04 12:22:07 +00:00
IsUnfinishedCocktailPickedUp = false;
2024-11-26 08:22:26 +00:00
SetCurrentPickupItem(item);
2024-09-10 10:25:05 +00:00
_itemRenderer.enabled = false;
//_itemRenderer.sprite = item.Sprite;
2024-11-04 12:22:07 +00:00
IsPickedUpItem = true;
}
2024-10-29 12:17:00 +00:00
public void ServedItem(IPickup item)
{
2024-11-26 08:22:26 +00:00
if (!IsPickedUpItem || CurrentPickupItem == null)
{
Debug.Log("들고있는 아이템이 없거나, 현재 아이템 데이터가 비어있습니다.");
return;
}
2024-11-26 08:22:26 +00:00
SetCurrentPickupItem(null);
_itemRenderer.sprite = null;
2024-11-04 12:22:07 +00:00
IsPickedUpItem = false;
}
public void DiscardItem()
{
2024-11-04 12:22:07 +00:00
if (!IsPickedUpItem && !IsUnfinishedCocktailPickedUp)
{
2024-09-23 02:00:21 +00:00
Debug.Log("들고있는 아이템이 없습니다.");
return;
}
2024-09-23 02:00:21 +00:00
2024-11-04 12:22:07 +00:00
IsUnfinishedCocktailPickedUp = false;
2024-11-26 08:22:26 +00:00
SetCurrentPickupItem(null);
_itemRenderer.sprite = null;
2024-11-04 12:22:07 +00:00
IsPickedUpItem = false;
}
2024-11-11 02:02:24 +00:00
public void ChangeItem(IPickup item)
{
IsUnfinishedCocktailPickedUp = false;
2024-11-26 08:22:26 +00:00
SetCurrentPickupItem(item);
2024-11-11 02:02:24 +00:00
_itemRenderer.enabled = false;
IsPickedUpItem = true;
}
2024-11-26 08:22:26 +00:00
public bool IsServablePickupItem() => IsPickedUpItem && CurrentPickupItem.Idx != "Cocktail000";
2024-09-23 02:00:21 +00:00
/// <summary>
/// 제조중인 칵테일이 있거나, 아이템이 있는 경우
/// </summary>
2024-11-04 12:22:07 +00:00
public bool IsPickedUpAnything() => IsPickedUpItem || IsUnfinishedCocktailPickedUp;
2024-11-26 08:22:26 +00:00
public void SetCurrentPickupItem(IPickup item)
{
CurrentPickupItem = item;
EventManager.InvokeChangedPickupItem(CurrentPickupItem?.Idx);
}
2025-02-17 21:47:56 +00:00
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());
}
}
}
}