Exemplo n.º 1
0
        public void Generate(string filePath, List <string> areaNames, DistinctColorList distinctColorList)
        {
            const string monsoonPattern = @"\s*?monsoon\s*?=\s*?{.*?}\s*?";
            const string blockPattern   =
                @"(?<regionName>(?<=\}|^)\s*?\w+?)\s*?\=\s*?\{\s*?areas\s*?\=\s*?\{(?<areas>.*?(?=\}\s*?\}))";

            Names         = new List <string>();
            AreaToRegions = new int[areaNames.Count];
            RegionColors  = new List <Color32>();

            var rawFile = File.ReadAllText(filePath);

            // Triplicate remover.
            LoadMethods.EntireAllInOneRemover(ref rawFile);

            var areaLookup = new Dictionary <string, int>(areaNames.Count);

            for (var index = 0; index < areaNames.Count; index++)
            {
                areaLookup[areaNames[index]] = index;
            }

            // Not using monsoon data, removing them all.
            rawFile = Regex.Replace(rawFile, monsoonPattern, "");

            // Adding Unknown as default area.
            Names.Add("unknown");
            RegionColors.Add(Color.white);

            // Get blocks.
            var blocks = Regex.Match(rawFile, blockPattern);

            while (blocks.Success)
            {
                var name = blocks.Groups["regionName"].Value.Trim();
                Names.Add(name);

                RegionColors.Add(distinctColorList.GetNextColor());

                var areaSplit = blocks.Groups["areas"].Value.Trim()
                                .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                foreach (var areaString in areaSplit)
                {
                    if (areaLookup.TryGetValue(areaString, out var index))
                    {
                        AreaToRegions[index] = Names.Count - 1;
                    }
                }

                blocks = blocks.NextMatch();
            }

            distinctColorList.ResetColorList();
        }
Exemplo n.º 2
0
        public void Generate(string filePath, List <string> regionNames, DistinctColorList distinctColorList)
        {
            const string blockPattern =
                @"(?<superName>(?<=\}|^)\s*?\w+?)\s*?\=\s*?{(?<regions>.*?(?=\}))";

            Names           = new List <string>();
            RegionsToSupers = new int[regionNames.Count];
            Colors          = new List <Color32>();

            var rawFile = File.ReadAllText(filePath);

            // Triplicate remover.
            LoadMethods.EntireAllInOneRemover(ref rawFile);

            var regionLookup = new Dictionary <string, int>(regionNames.Count);

            for (var index = 0; index < regionNames.Count; index++)
            {
                regionLookup[regionNames[index]] = index;
            }

            // Adding Unknown as default area.
            Names.Add("unknown");
            Colors.Add(Color.white);

            // Get blocks.
            var blocks = Regex.Match(rawFile, blockPattern);

            while (blocks.Success)
            {
                var name = blocks.Groups["superName"].Value.Trim();
                Names.Add(name);

                Colors.Add(distinctColorList.GetNextColor());

                var regionSplit = blocks.Groups["regions"].Value.Trim()
                                  .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                foreach (var areaString in regionSplit)
                {
                    if (regionLookup.TryGetValue(areaString, out var index))
                    {
                        RegionsToSupers[index] = Names.Count - 1;
                    }
                }

                blocks = blocks.NextMatch();
            }

            distinctColorList.ResetColorList();
        }
Exemplo n.º 3
0
        public void Generate(string areasPath, List <int> idIndices, DistinctColorList distinctColorList)
        {
            const string colorPattern =
                @"(?<areaName>(?<=\}|^)\w+?)\s*?\=\s*?\{\s*?color\s*?\=\s*?\{(?<color>.*?(?=\}))";
            const string blockPattern        = @"(?<areaName>(?<=^|\}).*?(?=\=)).*?(?<provIds>(?<=\{).*?(?=\}))";
            const string colorRemovalPattern = @"color.*?}";

            ProvinceToAreas = new int[idIndices.Count];
            Names           = new List <string>();
            AreaColors      = new List <Color32>();
            var customColors = new Dictionary <string, Color32>();

            var idLookup = new Dictionary <int, int>(idIndices.Count);

            for (var index = 0; index < idIndices.Count; index++)
            {
                idLookup[idIndices[index]] = index;
            }

            var areaFile = File.ReadAllText(areasPath);

            // Triplicate remover.
            LoadMethods.EntireAllInOneRemover(ref areaFile);

            // Finding colors needs to be first.
            var colors = Regex.Match(areaFile, colorPattern);

            while (colors.Success)
            {
                customColors[colors.Groups["areaName"].Value.Trim()] =
                    LoadMethods.ParseColor32(colors.Groups["color"].Value);

                colors = colors.NextMatch();
            }

            // Removing colors.
            areaFile = Regex.Replace(areaFile, colorRemovalPattern, "");

            // Adding Unknown as default area.
            Names.Add("unknown");
            AreaColors.Add(Color.white);

            // Get blocks.
            var blocks = Regex.Match(areaFile, blockPattern);

            while (blocks.Success)
            {
                var name = blocks.Groups["areaName"].Value.Trim();
                Names.Add(name);

                if (customColors.TryGetValue(name, out var predefinedColor))
                {
                    AreaColors.Add(predefinedColor);
                }
                else
                {
                    AreaColors.Add(distinctColorList.GetNextColor());
                }

                var provinces = blocks.Groups["provIds"].Value.Trim()
                                .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                foreach (var idString in provinces)
                {
                    if (!int.TryParse(idString, out var id))
                    {
                        throw new Exception(
                                  $"Invalid province id '{idString}' found in area '{Names.Last()}' parsing.");
                    }

                    if (idLookup.TryGetValue(id, out var index))
                    {
                        ProvinceToAreas[index] = Names.Count - 1;
                    }
                }

                blocks = blocks.NextMatch();
            }

            distinctColorList.ResetColorList();
        }