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(); _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 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.ItemDataSo.GetDataByIdx(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; } } }