public static (List <string>, List <(Color Palette, int Index)>) Main(bool cache) { var(terrainNames, terrainEntities, terrainData, paletteLookups) = cache ? JsonUtility.FromJson <TerrainOutput>( LoadMethods.Unzip(File.ReadAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "terrain.txt")))) : ParseParadoxFile(); var em = World.DefaultGameObjectInjectionWorld.EntityManager; for (var index = 0; index < terrainEntities.Count; index++) { var terrain = em.CreateEntity(typeof(TerrainEntity)); var data = terrainEntities[index]; data.SetName(terrainNames[index]); em.SetComponentData(terrain, data); using (var currentCoreActions = new NativeArray <FirstLevelCore>( ((List <FirstLevelCore>)terrainData[index]).ToArray(), Allocator.Temp)) { em.AddBuffer <FirstLevelCore>(terrain).AddRange(currentCoreActions); } } // Creating collection entity. FileUnpacker.GetCollector <TerrainEntity>(); /* DEBUG * var test = em.GetBuffer<Terrains>(terrainCollectorEntity); * var test1 = test.AsNativeArray(); * for (var index = 0; index < test1.Length; index++) * { * var terrainType = test1[index]; * var color = em.GetComponentData<TerrainEntity>(terrainType.TerrainEntity).Color; * Debug.Log(terrainNames[index] + " color: " + color); * var coreActions = em.GetBuffer<TerrainValues>(terrainType.TerrainEntity).AsNativeArray(); * foreach (var action in coreActions) * Debug.Log(action); * } */ return(terrainNames, paletteLookups.ConvertAll(input => ((Color, int))input)); }
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); }
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); }
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); }