public int GetDistanceTo(CK2Province province) { var dx = (Centre.MapPosition.X - province.MapPosition.X); var dy = (Centre.MapPosition.Y - province.MapPosition.Y); var distance = dx * dx + dy * dy; foreach (TitleRank rank in Enum.GetValues(typeof(TitleRank))) { if (TitleRank.barony == rank || !RankedCentres.ContainsKey(rank)) { continue; } // check if same defacto if (RankedCentres[rank] != province.CountyTitle.GetLiege(rank)) { distance += (int)rank * 2000; } //check if same dejure if (RankedCentres[rank] != province.CountyTitle.GetDejureLiege(rank)) { distance += (int)rank * 2000; } } return(distance); }
public CK2Culture CreateSubCulture(CK2Province centre) { var sub = new CK2Culture(Name + "_" + centre.CountyTitle.Name, centre.CountyTitle.World); sub.DisplayName = centre.Culture.DisplayName; SubCultures.Add(sub); sub.Centre = centre; sub.SetCentreAndLieges(centre.CountyTitle); sub.Parent = this; Console.WriteLine($"Created subculture of {Name}: {sub.Name}"); return(sub); }
public void FindCentre(CK2World world) { var culturedProvinces = world.CK2Provinces.Values.Where(c => c.Culture == this); if (culturedProvinces.Count() == 0) { return; } var x = 0; var y = 0; foreach (var prov in culturedProvinces) { x += prov.MapPosition.X; y += prov.MapPosition.Y; } x /= culturedProvinces.Count(); y /= culturedProvinces.Count(); CK2Province closest = null; var closeDist = int.MaxValue; foreach (var prov in culturedProvinces) { var dx = prov.MapPosition.X - x; var dy = prov.MapPosition.Y - y; var dist = dx * dx + dy * dy; if (closest == null || closeDist > dist) { closest = prov; closeDist = dist; } } RankedCentres = new Dictionary <TitleRank, CK2Title>(); SetCentreAndLieges(closest.CountyTitle); Centre = closest; //var culturedTitles = new Dictionary<CK2Title, int>(); //foreach (var prov in culturedProvinces) //{ // AddTitleCultures(culturedTitles, prov.CountyTitle); //} //Centre = culturedTitles.OrderByDescending(c => c.Value).First().Key; // //var rank = (TitleRank)((int)Centre.Rank - 1); //var liege = Centre; //if (Centre.Holder.Culture == this && Centre.Capital != 0) //{ // //something to do with things goes here //} //RankedCentres[Centre.Rank] = Centre; //while ((int)rank > (int)TitleRank.county) //{ // var centred = culturedTitles.Where(c => (c.Key.LiegeTitle == liege || c.Key.DejureLiegeTitle == liege) && c.Key.Rank == rank).OrderByDescending(c => c.Value); // if (centred.Count() != 0) // { // liege = centred.First().Key; // RankedCentres.Add(rank, liege); // } // rank = (TitleRank)((int)rank - 1); //} //if (Centre.Rank != TitleRank.county) //{ // RankedCentres[TitleRank.county] = culturedTitles.Where(c => c.Key.Rank == TitleRank.county && c.Key.LiegeTitle == RankedCentres[TitleRank.duchy]).First().Key; //} Console.WriteLine($"Centre of {Name} culture is {Centre.Name} ({string.Join(", ", RankedCentres.Values.Select(t => t.Name))})"); }
private void LoadProvCounties() { Console.WriteLine("Loading CK2 provinces..."); // CK2ProvCounties = new Dictionary<string, string>(); // CK2DupeProvCounties = new Dictionary<string, string>(); CK2Provinces = new Dictionary <int, CK2Province>(); CK2ProvinceDupes = new Dictionary <int, CK2Province>(); var provFiles = GetFilesFor("history\\provinces"); foreach (var provFile in provFiles) { var data = PdxSublist.ReadFile(provFile); var provID = int.Parse(new Regex("[0-9]+").Match(Path.GetFileName(provFile)).Value); var prov = new CK2Province(provID, this, data); if (CK2Provinces.ContainsKey(provID)) { CK2ProvinceDupes.Add(provID, prov); } else { CK2Provinces.Add(provID, prov); } // if (CK2ProvCounties.ContainsKey(provID)) // { // CK2DupeProvCounties.Add(provID, data.KeyValuePairs["title"]); // } // else // { // CK2ProvCounties.Add(provID, data.KeyValuePairs["title"]); // } } var mapFiles = GetFilesFor("map"); var provMapFile = mapFiles.Single(m => Path.GetFileName(m) == "provinces.bmp"); ProvinceMap = new Bitmap(provMapFile); CK2ProvColours = new Dictionary <int, string>(); var defFile = mapFiles.Single(m => Path.GetFileName(m) == "definition.csv"); using (TextFieldParser parser = new TextFieldParser(defFile)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(";"); parser.ReadFields(); while (!parser.EndOfData) { //Process row string[] fields = parser.ReadFields(); var col = Color.FromArgb(int.Parse(fields[1]), int.Parse(fields[2]), int.Parse(fields[3])); CK2ProvColours[col.ToArgb()] = fields[0]; } } Console.WriteLine("Loading province map..."); CK2ProvPositions = new Dictionary <string, List <Point> >(); var bmp = ProvinceMap; for (int y = 0; y < bmp.Height; y++) { for (int x = 0; x < bmp.Width; x++) { var pxColour = bmp.GetPixel(x, y).ToArgb(); if (CK2ProvColours.ContainsKey(pxColour)) { var provID = CK2ProvColours[pxColour]; if (!CK2ProvPositions.ContainsKey(provID)) { CK2ProvPositions[provID] = new List <Point>(); } CK2ProvPositions[provID].Add(new Point(x, y)); } } } }