public void ConnectFreightTo(Agora agora) { FreightAreaData agoraFreight = agora.GetComponent <FreightAreaData>(); FreightAreaIn agoraAreaIn = agoraFreight.freightAreaIn; FreightAreaOut agoraAreaOut = agoraFreight.freightAreaOut; HashSet <Collider2D> agoraTreatedColliders = agoraFreight.treatedColliders; FreightAreaData freightData = GetComponent <FreightAreaData>(); freightData.freightAreaIn = agoraAreaIn; freightData.freightAreaOut = agoraAreaOut; freightData.treatedColliders = agoraTreatedColliders; }
private IEnumerator ManageWarehouseDispatching() { FreightAreaData freightData = _currentStock.freightAreaData; RoadLock freightOutLock = freightData.freightAreaOut.road.roadLock; while (true) { if (!orderManager.SendOrderIfPossible() && _warehouseOrders.Count <= WAREHOUSE_ORDERS_LIMIT) //L'appel à la méthode envoie une commande si elle retourne true, d'où l'aspect un peu étrange de la condition { foreach (ResourceShipment productionShipment in production) //TODO: si on produit plusieurs ressources et qu'on veut définir l'ordre dans lequel elles partent, c'est ici { int resourceStock = _currentStock.StockFor(productionShipment.resourceName); for (int i = 0; i < freightData.availableCarriers && resourceStock > 0; i++) { int amountToShip = Math.Min(freightData.carrierPrefab.capacity, resourceStock); ResourceShipment toShip = new ResourceShipment(productionShipment.resourceName, amountToShip); Cell <FreightAreaIn> nestedCoroutineReturnHelper = new Cell <FreightAreaIn>(); yield return(StartCoroutine(freightData.freightAreaOut.road.FindNearestFreeWarehouseFor(toShip, nestedCoroutineReturnHelper, new HashSet <FreightAreaIn>()))); FreightAreaIn nearestFreeWarehouse = nestedCoroutineReturnHelper.value; if (nearestFreeWarehouse != null) { while (!freightOutLock.IsFree(Orientation.SOUTH))//TODO orientation { yield return(new WaitForSeconds(0.2f)); } _warehouseOrders.Enqueue(new ResourceOrder(new ResourceShipment(productionShipment.resourceName, amountToShip), nearestFreeWarehouse.GetComponentInParent <BuildingStock>())); } resourceStock = _currentStock.StockFor(productionShipment.resourceName); } } } yield return(new WaitForSeconds(0.5f)); } }
/** * Coroutine se chargeant d'envoyer tout ce qui a été produit par le bâtiment * et se trouve contenu dans son stock à l'entrepôt le plus proche capable * de l'accueillir ou à un bâtiment l'ayant commandé. Tout cela se voit bien * entendu diviser entre les transporteurs * disponibles pour le bâtiment. **/ private IEnumerator ManageProductionStorage() { FreightAreaData freightData = orderManager.freightAreaData; while (true) { if (!orderManager.SendOrderIfPossible() && !orderManager.OrdersToTreat() && _warehouseOrders.Count > 0)//L'appel à la méthode envoie une commande si elle retourne true, d'où l'aspect un peu étrange de la condition { ResourceOrder warehouseOrder = _warehouseOrders.Dequeue(); ResourceShipment orderShipment = warehouseOrder.shipment; FreightAreaIn destinationIn = warehouseOrder.deliveryPlace.freightAreaData.freightAreaIn; if (orderManager.stock.StockFor(orderShipment.resourceName) >= orderShipment.amount && RoadsPathfinding.RouteStar(destinationIn.road, freightData.freightAreaOut.road, 10, Orientation.SOUTH) != null)//TODO orientation { _currentStock.RemoveFromStock(orderShipment.resourceName, orderShipment.amount); freightData.SendCarrier(warehouseOrder.deliveryPlace, Orientation.SOUTH, orderShipment);//TODO orientation } } yield return(new WaitForSeconds(0.5f)); } }
protected override bool RequirementsMet() { if (!base.RequirementsMet()) { return(false); } foreach (ResourceShipment shipment in production) { if (!_currentStock.stockLock.AvailableFor(shipment)) { return(false); } } FreightAreaData freightData = _currentStock.freightAreaData; int carrierCapacity = freightData.carrierCapacity; return((_currentStock.totalStock + (freightData.carriersNber) * carrierCapacity - (freightData.availableCarriers) * carrierCapacity) <= _currentStock.stockLock.totalStockLimit); }
protected void Awake() { stockLock = GetComponent <StockLock>(); freightAreaData = GetComponent <FreightAreaData>(); }
protected void Awake() { freightAreaData = GetComponent <FreightAreaData>(); }
protected void Awake() { placementData = GetComponent <PlacementData>(); buildingStock = GetComponent <BuildingStock>(); freightAreaData = GetComponent <FreightAreaData>(); }