Ejemplo n.º 1
0
    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>();
    }
Ejemplo n.º 2
0
    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
    }