106 lines
3.1 KiB
C#
106 lines
3.1 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;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
EventManager.OnCocktailStarted -= PickupUnfinishedCocktail;
|
|
EventManager.OnCocktailCompleted -= PickupItem;
|
|
EventManager.OnCocktailDiscarded -= DiscardItem;
|
|
}
|
|
|
|
[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()
|
|
{
|
|
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;
|
|
}
|
|
} |