package tk.captainsplexx.Render; import java.io.File; import java.util.HashMap; import tk.captainsplexx.Game.Core; import tk.captainsplexx.Resource.FileHandler; import tk.captainsplexx.Resource.CAS.CasDataReader; import tk.captainsplexx.Resource.ITEXTURE.ITexture; import tk.captainsplexx.Resource.ITEXTURE.ITextureHandler; import tk.captainsplexx.Resource.ITEXTURE.ImageConverter; import tk.captainsplexx.Resource.ITEXTURE.ImageConverter.ImageType; import tk.captainsplexx.Resource.TOC.ResourceLink; public class TextureHandler { public HashMap<String, Integer> textures; public TextureHandler(){ this.textures = new HashMap<String, Integer>(); } public int loadITexture(ResourceLink itextureResLink){ if (isExisting(itextureResLink.getName())){ return getTextureID(itextureResLink.getName()); } byte[] itextureHeader = Core.getGame().getResourceHandler().readResourceLink(itextureResLink); byte[] ddsBytes = ITextureHandler.getDSS(itextureHeader); if (ddsBytes!=null){ File ddsFile = new File("temp/images/"+itextureResLink.getName().replace('/', '_')+".dds"); FileHandler.writeFile(ddsFile.getAbsolutePath(), ddsBytes); File pngFile = null; ITexture itexture = new ITexture(itextureHeader, null); if (itexture.getPixelFormat()==ITexture.TF_NormalDXN){ //Convert using Nvidia File tga = ImageConverter.convertToTGA(ddsFile); pngFile = ImageConverter.convert(tga, ImageType.PNG, true); }else{ //Convert using ImageMagick pngFile = ImageConverter.convert(ddsFile, ImageType.PNG, true); } if (pngFile!=null){ int txID = Core.getGame().getModelHandler().getLoader().loadTexture(pngFile.getAbsolutePath()); if (txID!=Core.getGame().getModelHandler().getLoader().getNotFoundID()){ textures.put(itextureResLink.getName(), txID); } } } return Core.getGame().getModelHandler().getLoader().getNotFoundID(); } public int getTextureID(String name){ try{ return textures.get(name); }catch (Exception e){ return Core.getGame().getModelHandler().getLoader().getNotFoundID(); } } public boolean isExisting(String name){ for (String s : textures.keySet()){ if (s.equals(name)){ return true; } } return false; } public void addTextureID(Integer id, String name){ textures.put(name, id); } public HashMap<String, Integer> getTextures() { return textures; } }