Пример #1
0
    // Here: verify user choices
    public void SubmitDecisions()
    {
        UnityEngine.Debug.Log("Submitted");

        // Check employee decisions (Has at least 2 employees working)
        for (int i = 0; i < 3; i++)
        {
            Store.ShiftInfo shift          = (Store.ShiftInfo)Shifts[i];
            int             totalEmployees = shift.TotalEmployees;

            if (totalEmployees < Store.MinEmployeesWorking)
            {
                Page5.SetActive(false);
                switch (i)
                {
                case 0:
                    Page1.SetActive(true);
                    CurrentPage = 1;
                    SetButtons();
                    break;

                case 1:
                    Page2.SetActive(true);
                    CurrentPage = 2;
                    SetButtons();
                    break;

                case 2:
                    Page3.SetActive(true);
                    CurrentPage = 3;
                    SetButtons();
                    break;
                }


                Error.Show("You must have at least " + Store.MinEmployeesWorking + " employees working each shift");
                return;
            }
        }

        SimController.Day.SetShifts(Shifts);
        // reset shifts arraylist. Precaution, shouldn't be necessary in final treatment
        Shifts = new ArrayList();
        for (int i = 0; i < 3; i++)
        {
            Shifts.Add(new Store.ShiftInfo());
        }

        SimController.Day.SetDeliveries(Deliveries, DeliveryCost);
        Deliveries = new ArrayList();

        SimController.Day.RunDay();
    }
Пример #2
0
    public void RunDay()
    {
        int      i, j;
        Delivery delivery;

        UnityEngine.Debug.Log("Before RunDay: " + SimController.DayNum);

        // print shifts
        UnityEngine.Debug.Log("Shifts:");
        for (i = 0; i < 3; i++)
        {
            UnityEngine.Debug.Log("Shift" + (i + 1) + " --> " + ((ShiftInfo)Shifts[i]).ToString());
        }
        // print deliveries
        for (i = 0; i < Deliveries.Count; i++)
        {
            Delivery temp = (Delivery)Deliveries[i];
            UnityEngine.Debug.Log("Delivery Item: " + temp.foodItem.Name + " Quantity: " + temp.Quantity + " Exp: " + temp.Expedited + " ArrivalDate: " + temp.ArrivalDate);
        }
        // print BOH stock
        for (i = 0; i < Stock.Count; i++)
        {
            FoodItem food = (FoodItem)Stock[i];
            UnityEngine.Debug.Log("BOH " + food.Name + ": " + food.StockBOH);
        }

        // simulate day
        DailyEmployeePayout = 0.0m;
        DailyDeliveryCost   = 0.0m;
        DailyRevenue        = 0;
        ShiftRevenue        = new decimal[3];
        DailyItemsSold      = 0;
        ShiftItemsSold      = new int[3];
        RegUT          = new double[3];
        StartOfDayCash = Cash;

        for (i = 0; i < 3; i++)
        {
            ShiftRevenue[i]   = 0;
            ShiftItemsSold[i] = 0;
        }
        CheckoutsPerformed = 0;
        CheckoutsPossible  = 0;
        DeliveriesOrdered  = 0;
        // pay for deliveries ordered today
        for (i = 0; i < Deliveries.Count; i++)
        {
            delivery = (Delivery)Deliveries[i];

            // check for expedited is redundant (thus not here)
            if (delivery.OrderDate == SimController.DayNum)
            {
                Cash -= delivery.Cost;
                DailyDeliveryCost += delivery.Cost;
                DeliveriesOrdered++;
            }
        }

        // get standard deliveries
        for (i = 0; i < Deliveries.Count; i++)
        {
            delivery = (Delivery)Deliveries[i];

            // check for expedited is redundant (thus not here)
            if (delivery.ArrivalDate == SimController.DayNum && delivery.Expedited)
            {
                ProcessDelivery(delivery.foodItem, delivery.Quantity);
                Deliveries.RemoveAt(i);
                i--;
            }
        }

        // For each shift
        for (i = 0; i < 3; i++)
        {
            Store.ShiftInfo shift = (Store.ShiftInfo)Shifts[i];

            // pay employees
            DailyEmployeePayout += (decimal)shift.TotalEmployees * HourlyPay;

            // 1. process expedited deliveries --> Expedited deliveries come during shift 2
            if (i == 1)
            {
                for (j = 0; j < Deliveries.Count; j++)
                {
                    delivery = (Delivery)Deliveries[j];

                    // check for expedited is redundant (thus not here)
                    if (delivery.ArrivalDate == SimController.DayNum)
                    {
                        ProcessDelivery(delivery.foodItem, delivery.Quantity);
                        Deliveries.RemoveAt(j);
                        j--;
                    }
                }
            }

            // 2. restock before "shift"
            Restock(i);

            // 3. during shift, people buy goods
            // modeled closely to Real-Time AR tablet logic
            // IMPORTANT: if Simulation.TimeBetweenCheckouts == 10, numCheckoutsPerHour MUST equal 6
            //               for checkouts to be balanced
            for (j = 0; j < NUM_CHECKOUTS_PER_HOUR; j++)
            {
                PullItemsOffShelves(i);
                checkoutFoods(i);
            }

            // items that are not checked out but are brought to registers need to be returned
            ReturnItemsToShelves();

            RegUT[i] = 100.0 * CheckoutsPerformed / CheckoutsPossible;

            UnityEngine.Debug.Log("Register UT for shift " + (i + 1) + " is " + RegUT[i]);

            // 4. restock after "shift"
            Restock(i);
        }

        // expire foods
        ExpireFoods();

        // print BOH stock
        UnityEngine.Debug.Log("After RunDay" + SimController.DayNum);
        for (i = 0; i < Stock.Count; i++)
        {
            FoodItem food = (FoodItem)Stock[i];
            UnityEngine.Debug.Log("BOH " + food.Name + ": " + food.StockBOH);
        }

        // Deduct today's orders (set by SetDeliveries() )
        Cash -= DeliveryCost;

        Cash -= DailyEmployeePayout;
        UnityEngine.Debug.Log("Cash: " + Cash);

        // load PostDayReport
        SimController.LoadResults();
    }