Untitled
unknown
plain_text
a year ago
2.5 kB
17
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CustomerManager : MonoBehaviour
{
[SerializeField] private Transform entryPos;
[SerializeField] private Transform exitPos;
[SerializeField] private Transform[] seatPoses;
[SerializeField] private CustomerAI[] customerAIs;
[SerializeField] private Transform[] queuePoints;
public static CustomerManager Instance { get; private set; }
private Queue<CustomerAI> waitingCustomerQueue = new();
private CustomerAI currentHandledCustomer;
private List<Transform> availableSeatPoses = new();
private void Awake()
{
Instance = this;
}
IEnumerator Start()
{
foreach (var customer in customerAIs)
{
customer.AssignData(entryPos, null, exitPos);
customer.gameObject.SetActive(true);
yield return null;
}
}
public void RegisterCustomerToQueue(CustomerAI customer)
{
if (waitingCustomerQueue.Count < queuePoints.Length)
{
waitingCustomerQueue.Enqueue(customer);
UpdateCustomerInQueue();
}
}
private void UpdateCustomerInQueue()
{
int index = 0;
foreach (var waitingCustomer in waitingCustomerQueue)
{
waitingCustomer.GoToQueue(queuePoints[index]);
index++;
}
}
[ContextMenu("ACC")]
private void AcceptQueue()
{
if (waitingCustomerQueue.Count == 0) return;
foreach (var seat in seatPoses)
{
if (seat.gameObject.activeInHierarchy)
{
if (!availableSeatPoses.Contains(seat))
{
availableSeatPoses.Add(seat);
}
}
}
if (availableSeatPoses.Count == 0) return;
currentHandledCustomer = waitingCustomerQueue.Dequeue();
currentHandledCustomer.currentQueuePoint.gameObject.SetActive(false);
currentHandledCustomer.GoToSeat(availableSeatPoses[0]);
availableSeatPoses[0].gameObject.SetActive(false);
availableSeatPoses.RemoveAt(0);
UpdateCustomerInQueue();
}
public void TriggerDoneUsingSeat(Transform seatPoint)
{
seatPoint.gameObject.SetActive(true);
if (!availableSeatPoses.Contains(seatPoint))
{
availableSeatPoses.Add(seatPoint);
}
}
}
Editor is loading...
Leave a Comment