Esempio n. 1
0
        public static (List <(int, int)>, List <string>) Main(bool cache, NativeHashMap <int, int> idIndex)
        {
            var provinces         = new List <(int, int)>();
            var continentNames    = new List <string>();
            var continentEntities = new List <ContinentEntity>();

            if (cache)
            {
                (provinces, continentEntities, continentNames) = JsonUtility.FromJson <ContinentOutput>(
                    LoadMethods.Unzip(File.ReadAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "continent.txt"))));

                LoadMethods.GenerateCacheEntities <ContinentEntity, ContinentCollection>(continentEntities, continentNames);

                return(provinces, continentNames);
            }

            var em = World.DefaultGameObjectInjectionWorld.EntityManager;

            var continents = new NativeList <EntityWrapper>(Allocator.Temp);

            var outerToggle = false;
            var provToggle  = false;
            var currentCont = new ContinentEntity();

            foreach (var rawLine in File.ReadLines(Path.Combine(Application.streamingAssetsPath, "map", "continent.txt")))
            {
                if (LoadMethods.CommentDetector(rawLine, out var line))
                {
                    continue;
                }

                var equalSplit = Regex.Match(line, @"^.*?(?=\=)");

                if (line.Contains("{"))
                {
                    var newLine = line.Substring(equalSplit.Length + 1).Replace("{", "").Trim();
                    if (!outerToggle)
                    {
                        outerToggle = true;
                        var name = equalSplit.Value.Trim();
                        currentCont = new ContinentEntity {
                            Name = name
                        };                                               // {Index = continentNames.Count};
                        continentNames.Add(name);

                        if (newLine == string.Empty)
                        {
                            continue;
                        }

                        equalSplit = Regex.Match(newLine, @"^.*?(?=\=)");
                    }

                    if (!equalSplit.Value.Contains("provinces"))
                    {
                        throw new Exception("Unknown nested value: " + equalSplit);
                    }

                    provToggle = true;

                    if (newLine == string.Empty)
                    {
                        continue;
                    }

                    line = newLine;
                }

                if (provToggle)
                {
                    var numbers = Regex.Match(line, @"[\d\s]+");
                    if (numbers.Success)
                    {
                        var individualProv = numbers.Value.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (var provId in individualProv)
                        {
                            if (!int.TryParse(provId, out var num))
                            {
                                continue;
                            }

                            provinces.Add((idIndex[num], continents.Length));
                        }
                    }
                }
                else
                {
                    var newLine = line.Substring(equalSplit.Length + 1).Replace("}", "").Trim();
                    switch (equalSplit.Value.Trim())
                    {
                    case "assimilation_rate":
                        if (!float.TryParse(newLine, out var assimilationRate))
                        {
                            throw new Exception("Unknown assimilation rate: " + newLine);
                        }
                        currentCont.AssimilationRate = assimilationRate;
                        break;

                    case "farm_rgo_size":
                        if (!float.TryParse(newLine, out var farmSize))
                        {
                            throw new Exception("Unknown farm RGO size: " + newLine);
                        }
                        currentCont.FarmRgoSize = farmSize;
                        break;

                    case "mine_rgo_size":
                        if (!float.TryParse(newLine, out var mineSize))
                        {
                            throw new Exception("Unknown mine RGO size: " + newLine);
                        }
                        currentCont.MineRgoSize = mineSize;
                        break;
                    }
                }

                if (!line.Contains("}"))
                {
                    continue;
                }

                if (provToggle)
                {
                    provToggle = false;
                }
                else
                {
                    outerToggle = false;
                    var target = em.CreateEntity(typeof(ContinentEntity));
                    em.SetComponentData(target, currentCont);
                    continents.Add(target);
                    continentEntities.Add(currentCont);
                }
            }

            FileUnpacker.GetCollector <ContinentCollection>();
            continents.Dispose();

            //File.WriteAllText(Path.Combine(Application.streamingAssetsPath, "JsonData", "continent.txt"),
            //JsonUtility.ToJson(new ContinentOutput(continentNames, provinces, continentEntities), true));

            File.WriteAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "continent.txt"),
                               LoadMethods.Zip(JsonUtility.ToJson(new ContinentOutput(continentNames, provinces, continentEntities))));

            return(provinces, continentNames);
        }
Esempio n. 2
0
        public static (List <string>, List <string>) Main(bool cache)
        {
            var cultures          = new List <CultureEntity>();
            var cultureNames      = new List <string>();
            var cultureGroupNames = new List <string>();

            if (cache)
            {
                (cultureNames, cultureGroupNames, cultures) = JsonUtility.FromJson <CulturesOutput>(
                    LoadMethods.Unzip(File.ReadAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "cultures.txt"))));

                LoadMethods.GenerateCacheEntities <CultureEntity, CultureCollection>(cultures, cultureNames, cultureGroupNames);

                return(cultureNames, cultureGroupNames);
            }

            var em = World.DefaultGameObjectInjectionWorld.EntityManager;

            bool groupToggle   = false,
                 cultureToggle = false,
                 ignoreToggle  = false;
            var currentCulture = new CultureEntity();

            foreach (var line in File.ReadLines(Path.Combine(Application.streamingAssetsPath, "common",
                                                             "cultures.txt")))
            {
                if (LoadMethods.CommentDetector(line, out var commentSplit))
                {
                    continue;
                }

                if (ignoreToggle)
                {
                    if (commentSplit.Contains("}"))
                    {
                        ignoreToggle = false;
                    }

                    // Assuming no values defined after end brackets
                    continue;
                }

                var equalsSplit = Regex.Match(commentSplit, @"^.+?(?=\=)");
                var preEquals   = equalsSplit.Success ? equalsSplit.Value.Trim() : "";

                if (commentSplit.Contains("{"))
                {
                    if (!groupToggle)
                    {
                        groupToggle = true;
                        cultureGroupNames.Add(preEquals);
                        continue;
                    }

                    if (!commentSplit.Contains("_names") && !commentSplit.Contains("color"))
                    {
                        cultureToggle = true;
                        var name = preEquals.Trim();
                        cultureNames.Add(name);
                        currentCulture = new CultureEntity {
                            Group = cultureGroupNames.Last(), Name = name
                        };
                    }
                }

                switch (preEquals)
                {
                case "union":
                    currentCulture.Union =
                        LookupDictionaries.CountryTags[commentSplit.Substring(equalsSplit.Length + 1).Trim()];
                    continue;

                case "first_names":
                case "last_names":
                    // TODO: Implement names generation, someday.
                    if (!commentSplit.Contains("}"))
                    {
                        ignoreToggle = true;
                    }
                    continue;

                case "color":
                    currentCulture.Color =
                        LoadMethods.ParseColor32(commentSplit.Substring(equalsSplit.Length + 1));
                    continue;

                case "leader":
                case "unit":
                    continue;

                case "radicalism":
                    if (!float.TryParse(commentSplit.Substring(equalsSplit.Length + 1), out var radical))
                    {
                        throw new Exception("Unknown radicalism: " +
                                            commentSplit.Substring(equalsSplit.Length + 1));
                    }

                    currentCulture.Radicalism = radical;
                    continue;

                case "primary":
                    currentCulture.Primary =
                        LookupDictionaries.CountryTags[commentSplit.Substring(equalsSplit.Length + 1).Trim()];
                    continue;
                }

                if (!commentSplit.Contains("}"))
                {
                    continue;
                }

                if (cultureToggle)
                {
                    cultureToggle = false;
                    var targetCulture = em.CreateEntity(typeof(CultureEntity));
                    em.SetComponentData(targetCulture, currentCulture);

                    cultures.Add(currentCulture);
                    continue;
                }

                groupToggle = false;
            }

            File.WriteAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "cultures.txt"),
                               LoadMethods.Zip(JsonUtility.ToJson(
                                                   new CulturesOutput(cultureNames, cultureGroupNames, cultures))));

            FileUnpacker.GetCollector <CultureCollection>();

            return(cultureNames, cultureGroupNames);
        }
Esempio n. 3
0
        private static TerrainOutput ParseParadoxFile()
        {
            var fileTree = new List <(int Key, object Value)>();

            var terrainNames   = new List <string>();
            var terrains       = new List <TerrainEntity>();
            var terrainCache   = new List <List <FirstLevelCore> >();
            var paletteLookups = new List <(Color Palette, int Index)>();

            // Generating file tree representation.
            FileUnpacker.ParseFile(Path.Combine(Application.streamingAssetsPath, "map", "terrain.txt"),
                                   fileTree, TerrainMagicOverride);

            for (var index = 0; index < fileTree.Count; index++)
            {
                var currentTerrain = terrains[index];

                var(breakCores, _) = FileUnpacker.AssignFirstLevelDistributeWorkload(ref currentTerrain, fileTree[index],
                                                                                     TerrainOverride);

                terrainCache.Add(breakCores);

                bool TerrainOverride((int Key, object Value) target)
                {
                    switch ((LoadVariables)target.Key)
                    {
                    case LoadVariables.Palette:
                        if (!ColorUtility.TryParseHtmlString("#" + (string)target.Value, out var paletteColor))
                        {
                            throw new Exception("Unknown hex color. " + (string)target.Value);
                        }

                        paletteLookups.Add((paletteColor, index));
                        return(true);

                    default:
                        return(false);
                    }
                }
            }

            int TerrainMagicOverride(int parent, string str)
            {
                if (parent != -1)
                {
                    return((int)MagicUnifiedNumbers.ContinueMagicNumbers);
                }

                terrainNames.Add(str);

                terrains.Add(new TerrainEntity {
                    Name = str
                });
                return((int)MagicUnifiedNumbers.Terrain + terrainNames.Count - 1);
            }

            var output = new TerrainOutput(terrainNames, terrains, terrainCache, paletteLookups);

            //File.WriteAllText(Path.Combine(Application.streamingAssetsPath, "JsonData", "terrain.txt"),
            //JsonUtility.ToJson(output, true));

            File.WriteAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "terrain.txt"),
                               LoadMethods.Zip(JsonUtility.ToJson(output)));

            return(output);
        }
Esempio n. 4
0
        public static (List <string>, List <string>) Main(bool cache)
        {
            var groupNames       = new List <string>();
            var religionNames    = new List <string>();
            var religionEntities = new List <ReligionEntity>();

            if (cache)
            {
                (religionNames, groupNames, religionEntities) = JsonUtility.FromJson <ReligionsOutput>(
                    LoadMethods.Unzip(File.ReadAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "religion.txt"))));

                LoadMethods.GenerateCacheEntities <ReligionEntity, ReligionCollection>(religionEntities, religionNames, groupNames);

                return(religionNames, groupNames);
            }

            var em = World.DefaultGameObjectInjectionWorld.EntityManager;

            bool groupToggle = false, religionToggle = false, colorToggle = false;
            var  currentReligion = new ReligionEntity();

            foreach (var line in File.ReadLines(Path.Combine(Application.streamingAssetsPath, "Common",
                                                             "religion.txt")))
            {
                if (LoadMethods.CommentDetector(line, out var commentSplit))
                {
                    continue;
                }

                var equalsSplit = commentSplit.Split(new[] { "=" }, StringSplitOptions.RemoveEmptyEntries);

                if (commentSplit.Contains("{"))
                {
                    if (!groupToggle)
                    {
                        groupToggle = true;

                        groupNames.Add(equalsSplit[0].Trim());
                        continue;
                    }

                    if (!religionToggle)
                    {
                        religionToggle  = true;
                        currentReligion = new ReligionEntity {
                            Group = groupNames.Last()
                        };
                        religionNames.Add(equalsSplit[0].Trim());
                        continue;
                    }

                    if (!colorToggle)
                    {
                        colorToggle = true;
                    }
                }

                switch (equalsSplit[0].Trim())
                {
                case "color":
                    // Why religion colors are in float, I have absolutely no idea.
                    currentReligion.Color = LoadMethods.ParseColor32(equalsSplit[1]);
                    break;
                }

                if (!commentSplit.Contains("}"))
                {
                    continue;
                }

                if (colorToggle)
                {
                    colorToggle = false;
                    continue;
                }

                if (religionToggle)
                {
                    religionToggle = false;

                    var targetEntity = em.CreateEntity(typeof(ReligionEntity));
                    em.SetComponentData(targetEntity, currentReligion);
                    religionEntities.Add(currentReligion);

                    continue;
                }

                groupToggle = false;
            }

            FileUnpacker.GetCollector <ReligionCollection>();

            File.WriteAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "religion.txt"),
                               LoadMethods.Zip(JsonUtility.ToJson(new ReligionsOutput(groupNames, religionNames, religionEntities))));

            /*
             * var test = em.GetBuffer<EntityWrapper>(religionCollectorEntity);
             * foreach (var religion in test.AsNativeArray())
             * {
             *  var religionEntity = em.GetComponentData<ReligionEntity>(religion.Entity);
             *  Debug.Log(religionNames[religionEntity.Index]
             + " of group " + groupNames[em.GetComponentData<ReligionGroupEntity>(religionEntity.Group).Index]);
             + }
             */

            return(religionNames, groupNames);
        }