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); }
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); }
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); }
// 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); }