Пример #1
0
    /**
     * 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);
    }
Пример #2
0
    /**
     * 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);
    }
Пример #3
0
    /**
     * 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);
    }