_random.Shuffle(tradePads);
var freePads = GetFreeCargoPallets(trade, tradePads);
-
- foreach (var pad in freePads)
+ if (freePads.Count >= order.OrderQuantity) //check if the station has enough free pallets
{
- var coordinates = new EntityCoordinates(trade, pad.Transform.LocalPosition);
-
- if (FulfillOrder(order, coordinates, orderDatabase.PrinterOutput))
+ foreach (var pad in freePads)
{
- tradeDestination = trade;
- break;
+ var coordinates = new EntityCoordinates(trade, pad.Transform.LocalPosition);
+
+ if (FulfillOrder(order, coordinates, orderDatabase.PrinterOutput))
+ {
+ tradeDestination = trade;
+ order.NumDispatched++;
+ if (order.OrderQuantity <= order.NumDispatched) //Spawn a crate on free pellets until the order is fulfilled.
+ break;
+ }
}
}
return _pads;
}
- private IEnumerable<(EntityUid Entity, CargoPalletComponent Component, TransformComponent Transform)>
+ private List<(EntityUid Entity, CargoPalletComponent Component, TransformComponent Transform)>
GetFreeCargoPallets(EntityUid gridUid,
List<(EntityUid Entity, CargoPalletComponent Component, TransformComponent Transform)> pallets)
{
_setEnts.Clear();
+ List<(EntityUid Entity, CargoPalletComponent Component, TransformComponent Transform)> outList = new();
+
foreach (var pallet in pallets)
{
var aabb = _lookup.GetAABBNoContainer(pallet.Entity, pallet.Transform.LocalPosition, pallet.Transform.LocalRotation);
if (_lookup.AnyLocalEntitiesIntersecting(gridUid, aabb, LookupFlags.Dynamic))
continue;
- yield return pallet;
+ outList.Add(pallet);
}
+
+ return outList;
}
#endregion