Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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))})");
        }
Example #4
0
        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));
                    }
                }
            }
        }