CapersProject/Assets/02.Scripts/Prop/Tycoon/TableSeat.cs

127 lines
3.5 KiB
C#
Raw Normal View History

using System;
2024-10-06 23:41:09 +00:00
using BlueWater.Interfaces;
using UnityEngine;
namespace BlueWater.Tycoons
{
[Serializable]
2024-10-06 23:41:09 +00:00
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;
2024-10-06 23:41:09 +00:00
2024-10-08 13:44:20 +00:00
[field: SerializeField]
public int TableNumber;
2024-10-06 23:41:09 +00:00
[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<IDamageable>();
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 = "치우기";
}
2024-10-08 13:44:20 +00:00
public void SetTableNumber(int number) => TableNumber = number;
2024-10-06 23:41:09 +00:00
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;
2024-10-06 23:41:09 +00:00
public void CleanTable()
{
2024-10-06 23:41:09 +00:00
Food.sprite = null;
Food.enabled = false;
IsCleaned = true;
_isInteracting = false;
InteractionCanvas.BalloonUi.HideUi();
}
2024-10-06 23:41:09 +00:00
public void DirtyTable()
{
2024-10-06 23:41:09 +00:00
Food.sprite = _dirtyImage;
Food.enabled = true;
InteractionCanvas.BalloonUi.OrderItem(_dirtyImage, 0, TycoonManager.Instance.TycoonStageController.StageDataSo.DirtyTableWaitTime);
IsCleaned = false;
}
}
}