private void IterateEffects(Vic2World vic2World, PdxSublist provEffects, int siblingProvinces, List <Eu4ProvinceBase> eu4Provinces, Action <Dictionary <string, float>, Eu4ProvinceBase> callback) { foreach (var prov in eu4Provinces) { Action <Dictionary <string, float> > newCallback = (Dictionary <string, float> effects) => { callback(effects, prov); }; // development vic2World.ValueEffect(provEffects, newCallback, "base_tax", prov.BaseTax / (float)siblingProvinces); vic2World.ValueEffect(provEffects, newCallback, "base_production", prov.BaseProduction / (float)siblingProvinces); vic2World.ValueEffect(provEffects, newCallback, "base_manpower", prov.BaseManpower / (float)siblingProvinces); // total dev vic2World.ValueEffect(provEffects, newCallback, "development", (prov.BaseTax + prov.BaseProduction + prov.BaseManpower) / (float)siblingProvinces); // estates if (prov.Estate != null && provEffects.Sublists["estate"].Sublists.ContainsKey(prov.Estate)) { newCallback(provEffects.Sublists["estate"].Sublists[prov.Estate].FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum() / eu4Provinces.Count)); } // province flags if (provEffects.Sublists.ContainsKey("province_flags") && prov.Flags != null) { foreach (var flag in prov.Flags) { if (provEffects.Sublists["province_flags"].Sublists.ContainsKey(flag)) { newCallback(provEffects.Sublists["province_flags"].Sublists[flag].FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum() / eu4Provinces.Count)); } } } // buildings if (provEffects.Sublists.ContainsKey("buildings")) { foreach (var build in prov.Buildings) { if (provEffects.Sublists["buildings"].Sublists.ContainsKey(build)) { newCallback(provEffects.Sublists["buildings"].Sublists[build].FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum() / eu4Provinces.Count)); } } } // from owner country if (prov.Owner != null && provEffects.Sublists.ContainsKey("owner")) { Vic2Country.IterateCountryEffects(vic2World, prov.Owner, provEffects.Sublists["owner"], (effects) => { callback(effects, null); }); } } }
public static void IterateCountryEffects(Vic2World vic2World, Eu4CountryBase country, PdxSublist effects, Action <Dictionary <string, float> > callback) { if (effects.Sublists.ContainsKey("ideas")) { //idea groups foreach (var idea in country.Ideas) { if (effects.GetSublist("ideas").Sublists.ContainsKey(idea.Key)) { callback(effects.GetSublist("ideas").GetSublist(idea.Key).FloatValues.ToDictionary(effect => effect.Key, effect => (idea.Value + 1) * effect.Value.Sum())); } } } // country flags if (effects.Sublists.ContainsKey("country_flags")) { foreach (var flag in country.Flags) { if (effects.GetSublist("country_flags").Sublists.ContainsKey(flag)) { callback(effects.GetSublist("country_flags").GetSublist(flag).FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum())); } } } // religion if (effects.Sublists.ContainsKey("religion")) { if (effects.GetSublist("religion").Sublists.ContainsKey(country.Religion)) { callback(effects.GetSublist("religion").GetSublist(country.Religion).FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum())); //newCallback(effects.GetSublist("religion").GetSublist(country.Religion), 1); } } // government if (effects.Sublists.ContainsKey("government")) { if (effects.GetSublist("government").Sublists.ContainsKey(country.Government)) { callback(effects.GetSublist("government").GetSublist(country.Government).FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum())); //newCallback(effects.GetSublist("government").GetSublist(country.Government), 1); //callback(effects.Sublists["government"].Sublists[country.Government].KeyValuePairs.ToDictionary(effect => effect.Key, effect => float.Parse(effect.Value))); } } // policies if (effects.Sublists.ContainsKey("policies")) { foreach (var policy in country.Policies) { if (effects.GetSublist("policies").Sublists.ContainsKey(policy)) { callback(effects.GetSublist("policies").GetSublist(policy).FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum())); //newCallback(effects.GetSublist("policies").GetSublist(policy), 1); //callback(effects.Sublists["policies"].Sublists[policy].KeyValuePairs.ToDictionary(effect => effect.Key, effect => float.Parse(effect.Value))); } } } // values vic2World.ValueEffect(effects, callback, "mercantilism", country.Mercantilism); vic2World.ValueEffect(effects, callback, "legitimacy", country.Legitimacy); // - 50); vic2World.ValueEffect(effects, callback, "republican_tradition", country.RepublicanTradition); // - 50); vic2World.ValueEffect(effects, callback, "stability", country.Stability); vic2World.ValueEffect(effects, callback, "absolutism", country.Absolutism); // tech vic2World.ValueEffect(effects, callback, "adm_tech", country.AdmTech); vic2World.ValueEffect(effects, callback, "dip_tech", country.DipTech); vic2World.ValueEffect(effects, callback, "mil_tech", country.MilTech); //institutions if (effects.Sublists.ContainsKey("institutions")) { foreach (var institution in country.Institutions) { var key = institution.Value ? institution.Key : ("not_" + institution.Key); if (effects.Sublists["institutions"].Sublists.ContainsKey(key)) { callback(effects.GetSublist("institutions").GetSublist(key).FloatValues.ToDictionary(effect => effect.Key, effect => effect.Value.Sum())); } } } }