using AC2RE.Definitions; using LandblockExtraction.DatEngine; using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace LandblockExtraction.AtlasMaker; public class TerrainAtlasManager { private PortalEngine portalEngine; private AtlasBuilder atlasBuilder; public Dictionary textureCoord; public TerrainAtlasManager(PortalEngine portalEngine) { this.portalEngine = portalEngine; textureCoord = new Dictionary(); atlasBuilder = new AtlasBuilder(portalEngine); } public void ExtractTexture() { foreach(var terrain in portalEngine.cTerrainDesc.terrains) { foreach(var surface in portalEngine.cSurfaceDesc.surfaces) { if(surface.surfIndex == terrain.surfaceInfo) { atlasBuilder.AddTexture(surface.terrainMaterials.First().baseMaterials.First().materialDid); } } textureCoord.Add((int)terrain.terrainIndex, Vector2.Zero); } } public void GenerateAtlas() { atlasBuilder.GenerateAtlas(); } public void GenerateUV() { int count = (int)Math.Ceiling(Math.Sqrt(textureCoord.Count)); int atlasSize = (int)64 * count; int index = 0; foreach(var terrain in textureCoord) { int x = (index % count) * (int)64; int y = (index / count) * (int)64; textureCoord[index] = new Vector2(x, y); index++; } } }