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); } }
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; } }