IEnumerator GenerateArrivals() { while (gameController.generatingArrivals == true) { float inter_arrival_time_in_seconds = Queue_Utilities.ExpDist(arrival_rate); //this is in hours //float inter_arrival_time_in_seconds = Queue_Utilities.ObservedDist(); //this is in sec inter_arrival_time_in_seconds *= 60 * 60 / gameController.timeScale; // from hours //print("Next arrival in: " + inter_arrival_time_in_seconds + " (s)"); //StartCoroutine(GenerateArrivals()); //yield return new WaitForSeconds(inter_arrival_time_in_seconds); for (int x = (int)inter_arrival_time_in_seconds; x > 0; x--) { arrivalTimeLeft.text = x.ToString(); yield return(new WaitForSeconds(1)); } GameObject go = Instantiate(customerPrefab, customerSpawnPlace.position, Quaternion.identity); go.GetComponent <CustomerController>().SetDestination(lastPlaceInQueue); lastPlaceInQueue = go.transform; //go.GetComponent<CustomerController>().SetDestination() arrivalQueue.Enqueue(go); //print("Arrival Queue Length: " + arrivalQueue.Count); } }
IEnumerator DoService() { while (gameController.isServicing) { GameObject go = arrivalQueueController.GetFirstCustomer(); if (go == null) { yield return(new WaitForSeconds(waitForCustomer)); // wait one frame } else { CustomerController customerController = go.GetComponent <CustomerController>(); customerController.SetDestination(serviceSpot); // Wait till customer reached service spot while (!customerController.atServiceSpot) { yield return(new WaitForSeconds(waitForCustomer)); } float service_time_in_seconds = Queue_Utilities.ExpDist(serviceRate); //this is in min service_time_in_seconds *= 60 * 60 / gameController.timeScale; //print("Next service in: " + service_time_in_seconds + " (s)"); for (int x = (int)service_time_in_seconds; x > 0; x--) { serviceTimeLeft.text = x.ToString(); yield return(new WaitForSeconds(1)); } customerController.SetDestination(exitSpot); } } }
IEnumerator DoService() { while (isServicing) { int randExit = GenerateRandomExit(); int randCounter = GenerateRandomCounter(); GameObject go = arrivalQueueController.GetFirstCustomer(); print(go); if (go == null) { yield return(new WaitForSeconds(waitForCustomer)); // wait one frame } else { bool ticket = go.GetComponent <StudentController>().hasTicket; bool serviced = go.GetComponent <StudentController>().isServiced; float get_ticket_time_in_seconds = Queue_Utilities.ExpDist(1f / getTicket_rate); go.GetComponent <StudentController>().SetDestination(go.GetComponent <StudentController>().getTicketCounter.transform); yield return(new WaitForSeconds(get_ticket_time_in_seconds)); ticket = true; float service_time_in_seconds = Queue_Utilities.ExpDist(1f / service_rate); //this is in sec print("service_time_in_seconds:" + service_time_in_seconds); if (ticket && !serviced) { go.GetComponent <StudentController>().SetDestination(counters[randCounter].transform); } yield return(new WaitForSeconds(service_time_in_seconds)); go.GetComponent <StudentController>().isServiced = true; go.GetComponent <StudentController>().SetDestination(exits[randExit].transform); } } }
IEnumerator GenerateArrivals() { while (generatingArrivals == true) { int rand = GenerateRandom(); print(rand); //float inter_arrival_time_in_seconds = Queue_Utilities.ExpDist(1f / arrival_rate); //this is in min float inter_arrival_time_in_seconds = Queue_Utilities.ObservedDist(); //this is in min //inter_arrival_time_in_seconds *= 60; print("inter_arrival_time_in_seconds:" + inter_arrival_time_in_seconds); //StartCoroutine(GenerateArrivals()); yield return(new WaitForSeconds(inter_arrival_time_in_seconds)); GameObject go = Instantiate(customerPrefab, customerSpawnPlace[rand].transform.position, Quaternion.identity); go.GetComponent <StudentController>().SetDestination(lastPlaceInQueue); lastPlaceInQueue = go.transform; print("Arrival Queue Length=" + arrivalQueue.Count); } }