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

86 lines
2.4 KiB
C#
Raw Normal View History

2024-11-25 12:36:48 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Random = System.Random;
namespace BlueWater.Tycoons
{
2024-10-06 23:41:09 +00:00
public class CustomerTable : MonoBehaviour
{
2024-11-25 12:36:48 +00:00
[SerializeField]
private Collider _collider;
[SerializeField]
private GameObject _visualLookObject;
[SerializeField]
private SpriteRenderer _carpetRenderer;
2024-11-26 08:22:26 +00:00
[field: SerializeField]
public List<TableSeat> TableSeats { get; private set; }
2024-10-08 13:44:20 +00:00
[SerializeField]
private int _tableNumber;
2024-11-25 12:36:48 +00:00
[SerializeField]
private Sprite _carpetOnSprite;
[SerializeField]
private Sprite _carpetOffSprite;
private TableSeat _tableSeat;
private Random _random = new();
2024-10-06 23:41:09 +00:00
private TycoonManager _tycoonManager;
2024-11-25 12:36:48 +00:00
private void OnDestroy()
2024-10-06 23:41:09 +00:00
{
2024-11-25 12:36:48 +00:00
if (_tycoonManager && _tycoonManager.CustomerTableController)
2024-10-08 13:44:20 +00:00
{
2024-11-25 12:36:48 +00:00
_tycoonManager.CustomerTableController.UnregisterTable(this);
2024-10-08 13:44:20 +00:00
}
}
public TableSeat FindEmptySeat()
{
2024-11-26 08:22:26 +00:00
var seatCount = TableSeats.Count;
var indices = new List<int>(Enumerable.Range(0, seatCount));
while (indices.Count > 0)
{
var randomIndex = _random.Next(indices.Count);
var seatIndex = indices[randomIndex];
indices.RemoveAt(randomIndex);
2024-11-26 08:22:26 +00:00
var tableSeat = TableSeats[seatIndex];
if (!tableSeat.IsReserved && !tableSeat.IsOccupied && tableSeat.IsCleaned)
{
return tableSeat;
}
}
return null;
}
2024-11-07 06:13:57 +00:00
public void Show()
{
2024-11-25 12:36:48 +00:00
_collider.enabled = true;
_carpetRenderer.sprite = _carpetOnSprite;
_visualLookObject.SetActive(true);
2024-11-26 08:22:26 +00:00
foreach (var element in TableSeats)
2024-11-25 12:36:48 +00:00
{
element.SetTableNumber(_tableNumber);
}
_tycoonManager = TycoonManager.Instance;
_tycoonManager.CustomerTableController.RegisterTable(this);
2024-11-07 06:13:57 +00:00
}
public void Hide()
{
2024-11-25 12:36:48 +00:00
_collider.enabled = false;
_carpetRenderer.sprite = _carpetOffSprite;
_visualLookObject.SetActive(false);
2024-11-07 06:13:57 +00:00
}
}
}