示例#1
0
        public void AddPurchaseOrder(ItemOrder order)
        {
            var isFirstOrder = !HasPurchaseOrders && !HasSaleOrders;

            this.Log($"CartAgent got {(isFirstOrder ? "first " : "")}purchase order for {order.Amount} {order.Item}");

            var targetExchange = Locator.Market.GetExchange(order.Item);

            if (!targetExchange)
            {
                this.Log(
                    $"Cart {Cart.name} cannot fullfill order {order}: Market {Locator.Market} does not have a matching exchange",
                    LogType.Error);
                return;
            }

            PurchaseOrders.Enqueue(order);
            PurchaseOrderPlaced?.Invoke(this, new ItemOrderEventArgs(order));

            if (isFirstOrder && State == CartState.Idle && Entity.Location == Cart.Company.Location)
            {
                this.Log($"CartAgent will fulfill the placed purchase order");
                ChangeState(CartState.Market);
            }
        }
示例#2
0
        public void AddOrders(List <ItemOrder> purchaseOrders, List <ItemOrder> saleOrders)
        {
            var isFirstOrder = !HasPurchaseOrders && !HasSaleOrders;

            this.Log($"CartAgent got {(isFirstOrder ? "first " : "")} orders");

            foreach (var order in saleOrders)
            {
                var targetExchange = Locator.Market.GetExchange(order.Item);

                if (!targetExchange)
                {
                    this.Log(
                        $"Cart {Cart.name} cannot fullfill order {order}: Market {Locator.Market} does not have a matching exchange",
                        LogType.Error);
                    continue;
                }

                SaleOrders.Enqueue(order);
                SaleOrderPlaced?.Invoke(this, new ItemOrderEventArgs(order));
            }

            foreach (var order in purchaseOrders)
            {
                var targetExchange = Locator.Market.GetExchange(order.Item);

                if (!targetExchange)
                {
                    this.Log(
                        $"Cart {Cart.name} cannot fullfill order {order}: Market {Locator.Market} does not have a matching exchange",
                        LogType.Error);
                    continue;
                }

                PurchaseOrders.Enqueue(order);
                PurchaseOrderPlaced?.Invoke(this, new ItemOrderEventArgs(order));
            }

            if (isFirstOrder &&
                State == CartState.Idle &&
                Entity.Location == Cart.Company.Location &&
                (FulfillableSaleOrder != null || HasPurchaseOrders))
            {
                this.Log($"CartAgent will fulfill the placed orders");
                ChangeState(CartState.Market);
            }
            else if (HasSaleOrders && !HasPurchaseOrders && FulfillableSaleOrder != null)
            {
                Cart.Company.Production.Registry.RecipeFinished += OnRecipeFinished;
            }
        }