Example #1
0
    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);
            }
        }
    }
Example #4
0
    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);
        }
    }