예제 #1
0
        public void Add(StoredResource goods)
        {
            if (goods.Amount <= 0f)
            {
                return;
            }
            StoredResource stored;

            if (!_stock.TryGetValue(goods.Description.ID, out stored))
            {
                _stock.Add(goods.Description.ID, goods);
                _stockLimits.Add(goods.Description.ID, 10f);
            }
            else
            {
                float stockAmount = Mathf.Min(goods.Amount + stored.Amount, _stockLimits[goods.Description.ID]);

                //TODO: fixe pricing changes
                stored.Price                 = (int)(((float)stored.Price * stored.Amount + (float)goods.Price * goods.Amount) / (stored.Amount + goods.Amount));
                stored.PriceSale             = (int)(((float)stored.PriceSale * stored.Amount + (float)goods.PriceSale * goods.Amount) / (stored.Amount + goods.Amount));
                stored.Amount                = stockAmount;
                _stock[goods.Description.ID] = stored;
            }
            //		Debug.Log(stored.Description.ID + " now in stock: " + stored.Amount);
        }
예제 #2
0
        public StoredResource Sell(StoredResource goods, int price)
        {
            StoredResource sold = _stock.Retrieve(goods.Description.ID, goods.Amount);

            Cash += (int)sold.Amount * price;

            Debug.Log(name + " selling for " + ((int)sold.Amount * price) + " -> Cash " + Cash);

            return(sold);
        }
예제 #3
0
        public StoredResource Buy(StoredResource goods, int price)
        {
            goods.Amount = (float)Mathi.Clamp((int)goods.Amount, 0, Cash / price);
            Cash        -= (int)goods.Amount * price;

            Debug.Log(name + " buying for " + ((int)goods.Amount * price) + " -> Cash " + Cash);

            _stock.Add(goods);
            return(goods);
        }
예제 #4
0
        //	public int Buy(StoredGoods goods) {
        //		StoredGoods demanded = _demandedGoodTypes[goods.Description.Name];
        //		int traded = Mathi.Clamp(demanded.Amount-goods.Amount, 0, _cash / goods.Price);
        //
        //		int value = goods.Price * traded;
        //		demanded.Amount -= traded;
        //		demanded.Price = (int)((float)goods.Description.BasePrice * 1f/goods.Description.Probability + 0.01f * (float)demanded.Amount);
        //		_cash -= value;
        //		return value;
        //	}

        public bool Offers(StoredResource goods)
        {
            StoredResource available = _stock.Lookup(goods.Description.ID, goods.Amount);

            if (available.Amount > 0 && available.Price < goods.Price)
            {
                return(true);
            }
            return(false);
        }