using System.Collections.Generic; using System.Linq; using UnityEngine; using Random = System.Random; namespace BlueWater.Tycoons { public class CustomerTable : MonoBehaviour { [SerializeField] private List _tableSeats; [SerializeField] private int _tableNumber; private TableSeat _tableSeat; private Random _random = new(); private TycoonManager _tycoonManager; private void OnEnable() { foreach (var element in _tableSeats) { element.SetTableNumber(_tableNumber); } _tycoonManager = TycoonManager.Instance; _tycoonManager.CustomerTableController.RegisterTable(this); } private void OnDisable() { _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() { gameObject.SetActive(true); } public void Hide() { gameObject.SetActive(false); } } }