using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using Random = System.Random; namespace BlueWater.Tycoons { public class CustomerTable : MonoBehaviour { [SerializeField] private Collider _collider; [SerializeField] private GameObject _visualLookObject; [SerializeField] private SpriteRenderer _carpetRenderer; [field: SerializeField] public List TableSeats { get; private set; } [SerializeField] private int _tableNumber; [SerializeField] private Sprite _carpetOnSprite; [SerializeField] private Sprite _carpetOffSprite; private TableSeat _tableSeat; private Random _random = new(); private TycoonManager _tycoonManager; private void OnDestroy() { if (_tycoonManager && _tycoonManager.CustomerTableController) { _tycoonManager.CustomerTableController.UnregisterTable(this); } } public TableSeat FindEmptySeat() { var seatCount = TableSeats.Count; var indices = new List(Enumerable.Range(0, seatCount)); while (indices.Count > 0) { var randomIndex = _random.Next(indices.Count); var seatIndex = indices[randomIndex]; indices.RemoveAt(randomIndex); var tableSeat = TableSeats[seatIndex]; if (!tableSeat.IsReserved && !tableSeat.IsOccupied && tableSeat.IsCleaned) { return tableSeat; } } return null; } public void Show() { _collider.enabled = true; _carpetRenderer.sprite = _carpetOnSprite; _visualLookObject.SetActive(true); foreach (var element in TableSeats) { element.SetTableNumber(_tableNumber); } _tycoonManager = TycoonManager.Instance; _tycoonManager.CustomerTableController.RegisterTable(this); } public void Hide() { _collider.enabled = false; _carpetRenderer.sprite = _carpetOffSprite; _visualLookObject.SetActive(false); } } }