CapersProject/Assets/02.Scripts/Ui/Tycoon/BalloonUi.cs
2024-09-10 19:25:05 +09:00

158 lines
4.3 KiB
C#

using BlueWater.Interfaces;
using BlueWater.Items;
using BlueWater.Tycoons;
using DG.Tweening;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.UI;
namespace BlueWater.Uis
{
public class BalloonUi : MonoBehaviour
{
[Title("컴포넌트")]
[SerializeField, Required]
private Image _fillImage;
[SerializeField, Required]
private Image _itemImage;
[SerializeField]
private GameObject _panel;
[Title("주문 정보")]
[SerializeField, DisableIf("@true")]
private bool _isOrdered;
[SerializeField, DisableIf("@true")]
private bool _isWaitTimeOver;
[SerializeField, DisableIf("@true")]
private bool _isItemReceived;
private Tween _tween;
private TableSeat _tableSeat;
private ItemData _orderItemData;
private void Awake()
{
InitializeComponents();
}
private void Start()
{
TycoonEvents.OnCocktailCompleted += SetItemImage;
TycoonEvents.OnCocktailDiscarded += DiscardItem;
}
private void OnDestroy()
{
TycoonEvents.OnCocktailCompleted -= SetItemImage;
TycoonEvents.OnCocktailDiscarded -= DiscardItem;
_tween.Kill();
}
[Button("컴포넌트 초기화")]
private void InitializeComponents()
{
_fillImage = transform.Find("Panel/FillImage").GetComponent<Image>();
_itemImage = transform.Find("Panel/FoodImage").GetComponent<Image>();
_panel = transform.Find("Panel").gameObject;
}
public void Initialize(TableSeat tableSeat)
{
_tableSeat = tableSeat;
HideUi();
}
public void ShowUi() => _panel.SetActive(true);
public void HideUi() => _panel.SetActive(false);
public void SetItemImage(IPickup item)
{
//_orderItemData = ItemManager.Instance.GetItemDataByIdx(foodIdx);
// if (_orderItemData == null)
// {
// Debug.LogError($"{foodIdx} 해당 음식을 등록할 수 없습니다.");
// return;
// }
if (!item.Sprite)
{
Debug.LogWarning($"{item.Sprite} 해당 음식의 이미지가 없습니다.");
}
SetItemSprite(item.Sprite);
ShowUi();
}
public void SetItemSprite(Sprite sprite)
{
_itemImage.sprite = sprite;
}
public void DiscardItem()
{
HideUi();
SetItemImage(null);
}
public void OrderItem(string itemIdx, int waitTime, int hurryTime)
{
_orderItemData = ItemManager.Instance.GetItemDataByIdx(itemIdx);
_isOrdered = true;
_isWaitTimeOver = false;
_isItemReceived = false;
SetItemImage(_orderItemData);
ShowUi();
_tween = _fillImage.DOFillAmount(1f, hurryTime)
.From(0f)
.SetEase(Ease.Linear)
.SetDelay(waitTime)
.OnComplete(OnTweenComplete)
.SetAutoKill(false);
_tween.Restart();
}
public void PayMoney(int waitTime, int hurryTime)
{
_isOrdered = true;
_isWaitTimeOver = false;
_isItemReceived = false;
SetItemSprite(DataManager.Instance.SpriteDataSo.Gold);
ShowUi();
_tween = _fillImage.DOFillAmount(1f, hurryTime)
.From(0f)
.SetEase(Ease.Linear)
.SetDelay(waitTime)
.OnComplete(OnTweenComplete)
.SetAutoKill(false);
_tween.Restart();
}
private void OnTweenComplete()
{
_isWaitTimeOver = true;
HideUi();
}
public bool IsWaitTimeOver() => _isOrdered && _isWaitTimeOver;
public bool IsFoodReceive() => _isItemReceived;
public void CancelOrder()
{
_tableSeat.VacateSeat();
}
public void ReceiveFood()
{
_tableSeat.DirtyTable();
_tween.Kill();
HideUi();
_isItemReceived = true;
}
}
}