CapersProject/Assets/02.Scripts/Character/Player/Tycoon/TycoonPickupHandler.cs
2024-09-30 21:05:19 +09:00

108 lines
3.2 KiB
C#

using BlueWater.Interfaces;
using Sirenix.OdinInspector;
using UnityEngine;
namespace BlueWater.Players.Tycoons
{
public class TycoonPickupHandler : MonoBehaviour
{
[SerializeField]
private SpriteRenderer _itemRenderer;
[SerializeField]
private bool _isUnfinishedCocktailPickedUp;
[SerializeField]
private bool _isPickedUpItem;
private IPickup _currentPickupItem;
private void Awake()
{
InitializeComponents();
}
private void Start()
{
EventManager.OnCocktailStarted += PickupUnfinishedCocktail;
EventManager.OnCocktailCompleted += PickupItem;
EventManager.OnCocktailDiscarded += DiscardItem;
EventManager.OnCocktailServedToCustomer += GiveItem;
}
private void OnDestroy()
{
EventManager.OnCocktailStarted -= PickupUnfinishedCocktail;
EventManager.OnCocktailCompleted -= PickupItem;
EventManager.OnCocktailDiscarded -= DiscardItem;
EventManager.OnCocktailServedToCustomer -= GiveItem;
}
[Button("컴포넌트 초기화")]
private void InitializeComponents()
{
_itemRenderer = transform.Find("VisualLook/Item").GetComponent<SpriteRenderer>();
}
private void PickupUnfinishedCocktail()
{
_isUnfinishedCocktailPickedUp = true;
}
public void PickupItem(IPickup item)
{
if (_isPickedUpItem)
{
Debug.Log("이미 아이템을 들고 있습니다.");
return;
}
_isUnfinishedCocktailPickedUp = false;
_currentPickupItem = item;
_itemRenderer.enabled = false;
//_itemRenderer.sprite = item.Sprite;
_isPickedUpItem = true;
}
public void GiveItem(IPickup item)
{
if (!_isPickedUpItem || _currentPickupItem == null)
{
Debug.Log("들고있는 아이템이 없거나, 현재 아이템 데이터가 비어있습니다.");
return;
}
_currentPickupItem = null;
_itemRenderer.sprite = null;
_isPickedUpItem = false;
}
public void DiscardItem()
{
if (!_isPickedUpItem && !_isUnfinishedCocktailPickedUp)
{
Debug.Log("들고있는 아이템이 없습니다.");
return;
}
_isUnfinishedCocktailPickedUp = false;
_currentPickupItem = null;
_itemRenderer.sprite = null;
_isPickedUpItem = false;
}
public IPickup GetCurrentPickupItem() => _currentPickupItem;
public bool IsServablePickupItem() => _isPickedUpItem && _currentPickupItem.Idx != "Cocktail000";
/// <summary>
/// 완성된 아이템이 있는 경우
/// </summary>
public bool IsPickedUpItem() => _isPickedUpItem;
/// <summary>
/// 제조중인 칵테일이 있거나, 아이템이 있는 경우
/// </summary>
public bool IsPickedUpCocktail() => _isPickedUpItem || _isUnfinishedCocktailPickedUp;
}
}