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 CocktailData _orderCocktailData; private bool _isUnfinishedCocktailPickedUp; private void Awake() { InitializeComponents(); } private void OnDestroy() { _tween.Kill(); } [Button("컴포넌트 초기화")] private void InitializeComponents() { _fillImage = transform.Find("Panel/FillImage").GetComponent(); _itemImage = transform.Find("Panel/FoodImage").GetComponent(); _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 PickupUnfinishedCocktail() { _isUnfinishedCocktailPickedUp = true; } public void SetItemImage(IPickup item) { //_orderItemData = ItemManager.Instance.GetItemDataByIdx(foodIdx); // if (_orderItemData == null) // { // Debug.LogError($"{foodIdx} 해당 음식을 등록할 수 없습니다."); // return; // } if (!item.Sprite) { Debug.LogWarning($"{item.Sprite} 해당 음식의 이미지가 없습니다."); } _isUnfinishedCocktailPickedUp = false; SetItemSprite(item.Sprite); ShowUi(); } public void SetEmpty() { SetItemSprite(null); } public void SetItemSprite(Sprite sprite) { _itemImage.sprite = sprite; } public void DiscardItem() { _isUnfinishedCocktailPickedUp = false; HideUi(); SetEmpty(); } public void GiveItem(IPickup item) { _isUnfinishedCocktailPickedUp = false; HideUi(); SetEmpty(); } public void OrderItem(string itemIdx, int waitTime, int hurryTime) { _orderCocktailData = ItemManager.Instance.CocktailDataSo.GetDataByIdx(itemIdx); _isOrdered = true; _isWaitTimeOver = false; _isItemReceived = false; SetItemImage(_orderCocktailData); _tween = _fillImage.DOFillAmount(1f, hurryTime) .From(0f) .SetEase(Ease.Linear) .SetDelay(waitTime) .OnComplete(OnTweenComplete) .SetAutoKill(false); } public void OrderItem(Sprite sprite, int waitTime, int hurryTime) { _isOrdered = true; _isWaitTimeOver = false; _isItemReceived = false; SetItemSprite(sprite); ShowUi(); _tween = _fillImage.DOFillAmount(1f, hurryTime) .From(0f) .SetEase(Ease.Linear) .SetDelay(waitTime) .OnComplete(OnTweenComplete) .SetAutoKill(false); } 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); } private void OnTweenComplete() { _isWaitTimeOver = true; HideUi(); } public bool IsWaitTimeOver() => _isOrdered && _isWaitTimeOver; public bool IsFoodReceive() => _isItemReceived; public void ReceiveItem(IPickup pickupItem) { _tween.Kill(); HideUi(); _isItemReceived = true; } } }