public SettlementEconomy(SettlementShell shell, EconomyData data) { shell.Economy = this; Inventory = data.Inventory; UsePerTick = data.UsePerTick; RawProductionPerTick = data.RawProductionPerTick; ProductionAbility = data.ProductionAbility; DesiredItemStock = data.DesiredItemStock; EconomicProduction = data.EconomicProduction; RequiredImports = new Dictionary <EconomicItem, int>(); // DesiredImports = new Dictionary<EconomicItem, int>(); Surplus = new Dictionary <EconomicItem, int>(); SurlusByExportType = new Dictionary <EconomicItemType, Dictionary <EconomicItem, int> >(); SurplusByTypeCount = new Dictionary <EconomicItemType, int>(); CurrentActiveGroups = new List <EntityGroup>(); }
private void GenerateTownEconomy(Dictionary <ChunkResource, float> settlementResources, SettlementShell shell) { List <BuildingPlan> reqBuildings = new List <BuildingPlan>(); //A measure of how much of each resource is produced per tick Dictionary <EconomicItem, int> rawProductionPerTick = new Dictionary <EconomicItem, int>(); //A measure of how much can be produced by industry Dictionary <EconomicProduction, int> productionPerTick = new Dictionary <EconomicProduction, int>(); //How much of each item is used per tick (excluding economy) Dictionary <EconomicItem, int> usePerTick = new Dictionary <EconomicItem, int>(); EconomicInventory economicInventory = new EconomicInventory(); Dictionary <EconomicItem, int> desiredStock = new Dictionary <EconomicItem, int>(); usePerTick.Add(Economy.Bread, 15); usePerTick.Add(Economy.Vegetables, 10); usePerTick.Add(Economy.Clothes, 3); //Use a small amount of weapons and armour per tick usePerTick.Add(Economy.LeatherArmour, 1); usePerTick.Add(Economy.IronWeapons, 1); SettlementProductionAbility productionAbility = new SettlementProductionAbility(); //All towns will have a bakery, this will produce bread from wheat reqBuildings.Add(Building.BAKERY); productionPerTick.Add(Economy.WheatToBread, 50); economicInventory.AddItem(Economy.Wheat, 500); productionAbility.HasButcher = true; productionPerTick.Add(Economy.CowToBeef, 5); productionPerTick.Add(Economy.SheepToMutton, 5); //If we are in a forrest, then the town till cut wood & make into planks if (settlementResources.TryGetValue(ChunkResource.wood, out float v) && v > 1) { reqBuildings.Add(Building.WOODCUTTER); reqBuildings.Add(Building.LUMBERMILL); int rawProduce = (int)v * 2; rawProductionPerTick.Add(ChunkResource.wood.GetEconomicItem()[0], rawProduce); //Takes 1 log and make 3 planks //We set the production such that it wished to import as much wood as possible productionPerTick.Add(Economy.WoodLogToPlank, (int)(rawProduce * GenRan.Random(2, 4))); productionAbility.HasLumberMill = true; } bool hasSmelt = false; if (settlementResources.TryGetValue(ChunkResource.ironOre, out float v1) && v1 > 1) { hasSmelt = true; reqBuildings.Add(Building.SMELTER); reqBuildings.Add(Building.BLACKSMITH); //We add some planks to start so we can produce weapons from start economicInventory.AddItem(Economy.WoodPlank, 5000); rawProductionPerTick.Add(Economy.IronOre, (int)v1); productionAbility.HasSmelter = true; productionPerTick.Add(Economy.Iron_OreToBar, (int)(v1 * GenRan.Random(2, 4))); productionPerTick.Add(Economy.IronToWeapon, 3); productionPerTick.Add(Economy.LeatherToArmour, 3); } if (settlementResources.TryGetValue(ChunkResource.silverOre, out float v2) && v2 > 1) { if (!hasSmelt) { reqBuildings.Add(Building.SMELTER); } rawProductionPerTick.Add(Economy.SilverOre, (int)v2); productionAbility.HasSmelter = true; productionPerTick.Add(Economy.Silver_OreToBar, (int)(v2 * GenRan.Random(2, 4))); } if (settlementResources.TryGetValue(ChunkResource.goldOre, out float v3) && v3 > 1) { if (!hasSmelt) { reqBuildings.Add(Building.SMELTER); } rawProductionPerTick.Add(Economy.GoldOre, (int)v3); productionAbility.HasSmelter = true; productionPerTick.Add(Economy.Gold_OreToBar, (int)(v3 * GenRan.Random(2, 4))); } //Calculates the amount foreach (KeyValuePair <EconomicItem, int> kvp in usePerTick) { int amount = kvp.Value * Economy.KEEP_IN_INVENTORY_MULT; desiredStock.Add(kvp.Key, amount); economicInventory.AddItem(kvp.Key, amount); } EconomyData data = new EconomyData(); data.Inventory = economicInventory; data.UsePerTick = usePerTick; data.RawProductionPerTick = rawProductionPerTick; data.DesiredItemStock = desiredStock; data.EconomicProduction = new Dictionary <EconomicProduction, int>(); data.ProductionAbility = productionAbility; SettlementEconomy econ = new SettlementEconomy(shell, data); shell.RequiredBuildings = reqBuildings; //Set the economy }