public void NewOrder() { // IF no available foods if (m_InactiveFoods.Count == 0) { Debug.LogWarning("No available food"); return; } // Get Random Food Food food = RandomFood(); // Add to Active Food Count int index = m_FoodsIndexByName[food.m_sFoodName]; m_nActiveFoodCount[index]++; // Create New Order Order newOrder; // IF there are inactive orders if (m_InActiveOrders.Count > 0) { // make the inactive order into the new order newOrder = m_InActiveOrders[0]; // remove it from the inactive list m_InActiveOrders.RemoveAt(0); } // ELSE no inactive orders else { // Create a new order newOrder = new Order(); } // Get Random DropOff Point int nTimeOut = 0; bool bFindingDropOff = true; while (bFindingDropOff) { int nRandomIndex = Random.Range(0, m_DropOffZones.Count); var randomDropOff = m_DropOffZones[nRandomIndex]; bool available = true; if (m_ActiveOrders.Contains(randomDropOff.m_ActiveOrder)) { available = false; } if (available) { newOrder.m_DropOffZone = randomDropOff; bFindingDropOff = false; } else { nTimeOut++; if (nTimeOut > 5) { m_nActiveFoodCount[index]--; m_InActiveOrders.Add(newOrder); return; } } } // Set Order variables newOrder.m_OrderManager = this; newOrder.m_Food = Instantiate(food); newOrder.m_fStartTime = Time.time; newOrder.m_fOrderExiryTime = m_fOrderExpiryTime; // Add Order to active order list m_ActiveOrders.Add(newOrder); // Activate Pickup zone ActivatePickup(newOrder.m_Food); // Activate Dropoff zone newOrder.m_DropOffZone.Activate(newOrder); // UI STUFF m_TicketManager.ActivateTicket(newOrder); }