/** * Retourne true ssi le stock associé à ce StockLock peut accueillir le * chargement passé en paramètre sans violer les limitations qu'il impose. **/ public bool AvailableFor(ResourceShipment shipment) { bool stockNotFull = _stock.totalStock + shipment.amount <= totalStockLimit; bool resourceLimitOk = _stock.StockFor(shipment.resourceName) <= LimitFor(shipment.resourceName); return(stockNotFull && resourceLimitOk); }
/** * Vérifie que les prérequis de consommation sont remplis. **/ protected virtual bool RequirementsMet() { foreach (ResourceShipment requirement in requirements) { if (_currentStock.StockFor(requirement.resourceName) < requirement.amount) { return(false); } } return(true); }
/** * Effectue une tentative de commande dans ce bâtiment pour la ressource resourceName, * dans la quantité orderedAmount, à livrer à deliveryPlace. * * Cette méthode retoune la quantité qui a pu être commandée au bâtiment, qui * vaudra donc 0 si rien n'a été commandé. * On a donc 0 <= orderedAmmount <= valeur de retour. **/ public virtual int Order(string resourceName, int orderedAmount, BuildingStock deliveryPlace) { int ordered = 0; int availableStock = stock.StockFor(resourceName) - OrderedAmountFor(resourceName); int carrierCapacity = freightAreaData.carrierCapacity; while (!unOrderableResources.Contains(resourceName) && maxOrderedAmount >= _totalOrderedAmount && availableStock > 0 && ordered != orderedAmount) { int newOrder = Math.Min(Math.Min(availableStock, carrierCapacity), orderedAmount - ordered); ordered += newOrder; availableStock -= newOrder; _totalOrderedAmount += newOrder; _orders.Enqueue(new ResourceOrder(new ResourceShipment(resourceName, newOrder), deliveryPlace)); } return(ordered); }