public void ApplyDistrictProperties(List <DistrictGenerator> districts) { IList <DistrictEffect> populationDensityEffects = GetPopulationDensityEffects(districts); IList <DistrictEffect> urbanisationEffects = GetUrbanisationEffects(districts); IList <DistrictEffect> coastalnessEffects = GetCoastalnessEffects(districts); IList <DistrictEffect> wealthEffects = GetWealthEffects(districts); IList <DistrictEffect> ageEffects = GetAgeEffects(districts); IList <DistrictEffect> educationEffects = GetEducationEffects(districts); IList <DistrictEffect> healthEffects = GetHealthEffects(districts); IList <DistrictEffect> geographicDivideEffects = GetGeographicDivideEffects(districts); foreach (var district in districts) { // 8 people per square km is the western isles. // 42 people per square km is Stirling (district). // 68 people per square km is South Lakeland. // 150 people per square km is Cornwall. // 179 people per square km is South Lanarkshire. // 280 people per square km is Fife. // 1500 per square km is London (greater metropolitan area average) or Sheffield. // 3550 per square km is Glasgow // 5000 per square km is Portsmouth, the highest district outside London. // 15000 per square km is Tower Hamlets. // The median for England as a whole is ~900. district.PopulationDensity = populationDensityEffects.AccumulateValues(district).Constrain(5, 15000); district.Population = (int)Math.Round(district.PopulationDensity * district.Area / PixelsPerSquareKm); district.Urbanisation = urbanisationEffects.AccumulateValues(district).Constrain(0, 1); district.Coastalness = coastalnessEffects.AccumulateValues(district).Constrain(0, 1); district.Wealth = wealthEffects.AccumulateValues(district).Constrain(0, 1); district.Age = ageEffects.AccumulateValues(district).Constrain(0, 1); district.Education = educationEffects.AccumulateValues(district).Constrain(0, 1); district.Health = healthEffects.AccumulateValues(district).Constrain(0, 1); district.GeographicDivide = geographicDivideEffects.AccumulateValues(district).Constrain(0, 1); } }