using System; using BlueWater.Interfaces; using UnityEngine; namespace BlueWater.Tycoons { [Serializable] public class TableSeat : InteractionFurniture { [field: SerializeField] public bool IsOccupied { get; private set; } [field: SerializeField] public bool IsReserved { get; private set; } [field: SerializeField] public bool IsCleaned { get; private set; } = true; [field: SerializeField] public Transform SeatTransform { get; private set; } [field: SerializeField] public SpriteRenderer Food { get; private set; } [field: SerializeField] public Vector3 TableDirection; [SerializeField] private Sprite _foodImage; [SerializeField] private Sprite _dirtyImage; private bool _isInteracting; private float _elapsedTime; protected override void OnEnable() { base.OnEnable(); Initialize(); } private void Update() { if (_isInteracting) { if (InteractionCanvas.BalloonUi.IsWaitTimeOver()) { var damageable = GameManager.Instance.CurrentTycoonPlayer.GetComponent(); damageable?.TakeDamage(1); CleanTable(); } var clamp = Mathf.Clamp(_elapsedTime / 3f, 0f, 1f); EventManager.OnInteracting?.Invoke(clamp); if (_elapsedTime > 3f) { CleanTable(); } _elapsedTime += Time.deltaTime; } } public void Initialize() { UnreserveSeat(); VacateSeat(); CleanTable(); Food.enabled = false; InteractionMessage = "치우기"; } public void SetFood(Sprite sprite) { Food.sprite = _foodImage; Food.enabled = true; } public override void Interaction() { _elapsedTime = 0f; EventManager.OnInteracting?.Invoke(_elapsedTime); _isInteracting = true; } public override void CancelInteraction() { _elapsedTime = 0f; EventManager.OnInteracting?.Invoke(_elapsedTime); _isInteracting = false; } public override bool CanInteraction() { return !GameManager.Instance.CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpCocktail() && !IsCleaned; } public void ReserveSeat() => IsReserved = true; public void UnreserveSeat() => IsReserved = false; public void OccupySeat() => IsOccupied = true; public void VacateSeat() => IsOccupied = false; public void CleanTable() { Food.sprite = null; Food.enabled = false; IsCleaned = true; _isInteracting = false; InteractionCanvas.BalloonUi.HideUi(); } public void DirtyTable() { Food.sprite = _dirtyImage; Food.enabled = true; InteractionCanvas.BalloonUi.OrderItem(_dirtyImage, 0, TycoonManager.Instance.TycoonStageController.StageDataSo.DirtyTableWaitTime); IsCleaned = false; } } }