示例#1
0
文件: OrderCache.cs 项目: forkme7/MT
 public ImmutableArray <Order> GetAll()
 {
     using (_contextFactory.GetReadSyncContext($"{nameof(OrdersCache)}.{nameof(GetAll)}"))
         return(ActiveOrders.GetAllOrders()
                .Union(WaitingForExecutionOrders.GetAllOrders())
                .Union(ClosingOrders.GetAllOrders()).ToImmutableArray());
 }
        public void RefreshView()
        {
            Menu.Clear();
            Clients.Clear();
            ActiveOrders.Clear();
            CompletedOrders.Clear();
            ActiveDelivery.Clear();
            CompletedDeliveries.Clear();
            foreach (Dish dish in restaurantManager.GetMenu())
            {
                Menu.Add(dish);
            }

            foreach (Client client in restaurantManager.GetAllClients())
            {
                Clients.Add(client);
            }
            foreach (Order order in restaurantManager.GetActiveOrders())
            {
                ActiveOrders.Add(order);
            }
            foreach (Order order in restaurantManager.GetCompletedOrders())
            {
                CompletedOrders.Add(order);
            }
            foreach (Order order in restaurantManager.GetActiveDeliveries())
            {
                ActiveDelivery.Add(order);
            }
            foreach (Order order in restaurantManager.GetCompletedDeliveries())
            {
                CompletedDeliveries.Add(order);
            }
        }
        public void RefreshView()
        {
            Menu.Clear();
            Clients.Clear();
            ActiveOrders.Clear();
            CompletedOrders.Clear();
            ActiveDelivery.Clear();
            CompletedDeliveries.Clear();
            foreach (DishDTG dish in restaurantManager.GetMenu())
            {
                Menu.Add(new DishModel(dish));
            }

            foreach (ClientDTG client in restaurantManager.GetAllClients())
            {
                Clients.Add(new ClientModel(client));
            }
            foreach (OrderDTG order in restaurantManager.GetActiveOrders())
            {
                ActiveOrders.Add(new OrderModel(order));
            }
            foreach (OrderDTG order in restaurantManager.GetCompletedOrders())
            {
                CompletedOrders.Add(new OrderModel(order));
            }
            foreach (OrderDTG order in restaurantManager.GetActiveDeliveries())
            {
                ActiveDelivery.Add(new OrderModel(order));
            }
            foreach (OrderDTG order in restaurantManager.GetCompletedDeliveries())
            {
                CompletedDeliveries.Add(new OrderModel(order));
            }
        }
示例#4
0
        public void CompleteOrder(int Id)
        {
            Order tmp = ActiveOrders.Find(x => x.Id == Id);

            CompletedOrders.Add(new Order(tmp.Id, tmp.Client, tmp.OrderDate, tmp.Dishes, tmp.Delivery, tmp.DeliveryAdress, tmp.DeliveryEndTime));
            CompletedOrders[CompletedOrders.Count - 1].CompleteOrderDate = DateTime.Now;
            ActiveOrders.RemoveAll(x => x.Id == Id);
        }
示例#5
0
 public void DeliveringProcess()                                              // Процесс доставки
 {
     for (int i = 0; i < DelayedOrders.Count; i++)
     {
         try
         {
             if (DelayedOrders[i].WeatherCheck())
             {
                 DelayedOrders.Remove(DelayedOrders[i]);
             }
         }
         catch { }
     }
     for (int i = 0; i < ActiveOrders.Count; i++)
     {
         string tmp = ActiveOrders[i].OrderInProgress();
         if (tmp == "Delivered")
         {
             if (ActiveOrders.Count != 0 && ActiveOrders[i].Highway && ActiveOrders[i].TransportType != "Plane")
             {
                 totalHighwayDistance += ActiveOrders[i].DeliveringDistance;
                 totalHighwayWeight   += ActiveOrders[i].Weight;
                 totalHighwayIncome   += ActiveOrders[i].Price;
             }
             else if (!ActiveOrders[i].Highway && ActiveOrders[i].TransportType != "Plane")
             {
                 totalRegularDistance += ActiveOrders[i].DeliveringDistance;
                 totalRegularWeight   += ActiveOrders[i].Weight;
                 totalRegularIncome   += ActiveOrders[i].Price;
             }
             ActiveOrders.Remove(ActiveOrders[i]);
             if (i == ActiveOrders.Count)
             {
                 break;
             }
         }
         else if (tmp == "Accident")
         {
             if (ActiveOrders.Count != 0 && ActiveOrders[i].Highway && ActiveOrders[i].TransportType != "Plane")
             {
                 totalHighwayIncome -= ActiveOrders[i].Price;
             }
             else if (!ActiveOrders[i].Highway && ActiveOrders[i].TransportType != "Plane")
             {
                 totalRegularIncome -= ActiveOrders[i].Price;
             }
             ActiveOrders.Remove(ActiveOrders[i]);
             if (i == ActiveOrders.Count)
             {
                 break;
             }
         }
     }
 }
示例#6
0
        public void Update(float deltaTime)
        {
            foreach (Pair <Order, float> order in ActiveOrders)
            {
                order.Second -= deltaTime;
            }
            ActiveOrders.RemoveAll(o => o.Second <= 0.0f);

            UpdateConversations(deltaTime);
            UpdateProjectSpecific(deltaTime);
        }
示例#7
0
        public void CreateOrder(int currentOrderIndex, Client client, DateTime orderDate, List <DishDTG> dishes, bool delivery, Address deliveryAddress, DateTime deliveryEndTime)
        {
            List <Dish> dataDishes = new List <Dish>();

            foreach (DishDTG dtg in dishes)
            {
                int cat = Convert.ToInt32(dtg.Category);
                dataDishes.Add(new Dish(dtg.Id, dtg.Name, dtg.Description, null, (Category)cat, dtg.Price));
            }
            Order order = new Order(currentOrderIndex, client, orderDate, dataDishes, delivery, deliveryAddress, deliveryEndTime);

            ActiveOrders.Add(order);
        }
示例#8
0
文件: OrderCache.cs 项目: forkme7/MT
        public Order GetOrderById(string orderId)
        {
            if (WaitingForExecutionOrders.TryGetOrderById(orderId, out var result))
            {
                return(result);
            }

            if (ActiveOrders.TryGetOrderById(orderId, out result))
            {
                return(result);
            }

            throw new Exception(string.Format(MtMessages.OrderNotFound, orderId));
        }
        public bool AddOrder(Order order, float?fadeOutTime)
        {
            if (order.TargetEntity == null)
            {
                DebugConsole.ThrowError("Attempted to add an order with no target entity to CrewManager!\n" + Environment.StackTrace.CleanupStackTrace());
                return(false);
            }

            // Ignore orders work a bit differently since the "unignore" order counters the "ignore" order
            var isUnignoreOrder = order.Identifier == "unignorethis";
            var orderPrefab     = !isUnignoreOrder ? order.Prefab : Order.GetPrefab("ignorethis");
            Pair <Order, float?> existingOrder = ActiveOrders.Find(o =>
                                                                   o.First.Prefab == orderPrefab && MatchesTarget(o.First.TargetEntity, order.TargetEntity) &&
                                                                   (o.First.TargetType != Order.OrderTargetType.WallSection || o.First.WallSectionIndex == order.WallSectionIndex));

            if (existingOrder != null)
            {
                if (!isUnignoreOrder)
                {
                    existingOrder.Second = fadeOutTime;
                    return(false);
                }
                else
                {
                    ActiveOrders.Remove(existingOrder);
                    return(true);
                }
            }
            else if (!isUnignoreOrder)
            {
                ActiveOrders.Add(new Pair <Order, float?>(order, fadeOutTime));
                return(true);
            }

            bool MatchesTarget(Entity existingTarget, Entity newTarget)
            {
                if (existingTarget == newTarget)
                {
                    return(true);
                }
                if (existingTarget is Hull existingHullTarget && newTarget is Hull newHullTarget)
                {
                    return(existingHullTarget.linkedTo.Contains(newHullTarget));
                }
                return(false);
            }

            return(false);
        }
示例#10
0
 public NodeOrderService(IContainer container)
 {
     this.container = container;
     orderRoot      = container.GetById(OrderRootId);
     if (orderRoot == null)
     {
         container.RootNode.Add(new HiddenNode()
         {
             Id = OrderRootId
         });
     }
     else
     {
         foreach (var order in orderRoot.Children.OfType <NodeOrder>())
         {
             ActiveOrders.Add(order);
         }
     }
 }
        public void Update(float deltaTime)
        {
            foreach (Pair <Order, float?> order in ActiveOrders)
            {
                if (order.Second.HasValue)
                {
                    order.Second -= deltaTime;
                }
            }
            ActiveOrders.RemoveAll(o => o.Second.HasValue && o.Second <= 0.0f);

            UpdateConversations(deltaTime);
            UpdateProjectSpecific(deltaTime);
            ActiveReadyCheck?.Update(deltaTime);
            if (ActiveReadyCheck != null && ActiveReadyCheck.IsFinished)
            {
                ActiveReadyCheck = null;
            }
        }
示例#12
0
        public bool AddOrder(Order order, float fadeOutTime)
        {
            if (order.TargetEntity == null)
            {
                DebugConsole.ThrowError("Attempted to add an order with no target entity to CrewManager!\n" + Environment.StackTrace.CleanupStackTrace());
                return(false);
            }

            Pair <Order, float> existingOrder = ActiveOrders.Find(o => o.First.Prefab == order.Prefab && o.First.TargetEntity == order.TargetEntity);

            if (existingOrder != null)
            {
                existingOrder.Second = fadeOutTime;
                return(false);
            }
            else
            {
                ActiveOrders.Add(new Pair <Order, float>(order, fadeOutTime));
                return(true);
            }
        }
示例#13
0
        // Removes the order where OrderNumber == orderNumber from ActiveOrders
        // Returns true if successful, false otherwise
        public static bool FillOrder(long orderNumber)
        {
            int orderIndex = 0;

            for (int i = 0; i < ActiveOrders.Count; i++)
            {
                if (ActiveOrders[i].OrderNumber == orderNumber)
                {
                    orderIndex = i;
                }
            }

            // Order found
            if (orderIndex > 0)
            {
                ActiveOrders.RemoveAt(orderIndex);
                return(true);
            }

            // Order not found
            return(false);
        }
示例#14
0
        public void ServerWriteActiveOrders(IWriteMessage msg)
        {
            ushort count = (ushort)ActiveOrders.Count(o => o.First != null && !o.Second.HasValue);

            msg.Write(count);
            if (count > 0)
            {
                foreach (var activeOrder in ActiveOrders)
                {
                    if (!(activeOrder?.First is Order order) || activeOrder.Second.HasValue)
                    {
                        continue;
                    }
                    OrderChatMessage.WriteOrder(msg, order, null, order.TargetSpatialEntity, null, 0, order.WallSectionIndex);
                    bool hasOrderGiver = order.OrderGiver != null;
                    msg.Write(hasOrderGiver);
                    if (hasOrderGiver)
                    {
                        msg.Write(order.OrderGiver.ID);
                    }
                }
            }
        }
示例#15
0
文件: OrderCache.cs 项目: forkme7/MT
 public ImmutableArray <Order> GetActive()
 {
     return(ActiveOrders.GetAllOrders().ToImmutableArray());
 }
 public Order FindOrder(int orderID)
 {
     return(ActiveOrders.FirstOrDefault(o => o.OrderID == orderID));
 }
示例#17
0
 public void RemoveOrder(Order order)
 {
     ActiveOrders.RemoveAll(o => o.First == order);
 }
示例#18
0
 public bool TryGetOrderById(string orderId, out Order order)
 {
     return(WaitingForExecutionOrders.TryGetOrderById(orderId, out order) ||
            ActiveOrders.TryGetOrderById(orderId, out order));
 }
示例#19
0
 public Order GetActiveOrderById(int Id)
 {
     return(ActiveOrders.Find(o => o.Id == Id));
 }
示例#20
0
 public static void AddOrder(Order newOrder)
 {
     ActiveOrders.Add(newOrder);
 }