using AC2RE.Definitions; using ImageMagick; using LandblockExtraction.DatEngine; using LandblockExtraction.Tools; namespace LandblockExtraction.AtlasMaker; public class TexturesImage { private PortalEngine portalEngine; private TextureEngine textureEngine; //private TextureEngine textureEngine; public TexturesImage(PortalEngine portalEngine) { this.portalEngine = portalEngine; textureEngine = new TextureEngine(); //this.textureEngine = new(); } public MagickImage? GetImage(DataId matId) { if (!portalEngine.datReader.contains(matId)) return null; using (var data = portalEngine.datReader.getFileReader(matId)) { var materialLayer = new RenderMaterial(data); if (materialLayer == null) return null; return ImageInMaterial(materialLayer); } } private MagickImage? ImageInMaterial(RenderMaterial materialLayer) { var vdescId = materialLayer.layers.First().stages.First().textureID; if (!portalEngine.datReader.contains(new(vdescId))) return null; using (var data = portalEngine.datReader.getFileReader(new(vdescId))) { var texture = new RenderTexture(data); if (texture == null) return null; return TextureInRender(texture); } } private MagickImage? TextureInRender(RenderTexture texture) { MagickImage magickImage; foreach (var img in texture.levelSurfaceDids) { if (!portalEngine.datReader.contains(img)) continue; using (var data = portalEngine.datReader.getFileReader(img)) { var image = new RenderSurface(data); if (image.width != 16) continue; var dataImg = DDSHeader.Generate(image); using (MagickImage realImg = new MagickImage(dataImg)) { magickImage = new(realImg); } return magickImage; } } foreach (var img in texture.levelSurfaceDids) { if (!portalEngine.datReader.contains(img)) continue; using (var data = portalEngine.datReader.getFileReader(img)) { var image = new RenderSurface(data); var dataImg = DDSHeader.Generate(image); using (MagickImage realImg = new MagickImage(dataImg)) { magickImage = new(realImg); } return magickImage; } } return null; } }