package tk.captainsplexx.Entity;
import tk.captainsplexx.Game.Core;
import tk.captainsplexx.Model.RawModel;
import tk.captainsplexx.Resource.ResourceHandler.ResourceType;
import tk.captainsplexx.Resource.CAS.CasDataReader;
import tk.captainsplexx.Resource.EBX.EBXExternalGUID;
import tk.captainsplexx.Resource.EBX.Structure.EBXStructureFile;
import tk.captainsplexx.Resource.EBX.Structure.EBXStructureInstance;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXMeshVariationDatabaseEntry;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXMeshVariationDatabaseMaterial;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXObjArray;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXTextureShaderParameter.ParameterName;
import tk.captainsplexx.Resource.MESH.MeshVariationDatabaseHandler;
import tk.captainsplexx.Resource.TOC.ResourceLink;
public class EntityTextureData {
private int[] diffuseIDs;
private EBXExternalGUID meshGUID = null;
//private EBXExternalGUID materialGUID = null;
public EntityTextureData(EBXExternalGUID meshGUID, /*EBXExternalGUID materialGUID,*/ EBXStructureFile meshVariationDatabase) {
this.meshGUID = meshGUID;
//this.materialGUID = materialGUID;
updateTextures(meshVariationDatabase);
}
public boolean updateTextures(EBXStructureFile meshVariationDatabase){
if (meshGUID!=null&&meshVariationDatabase!=null){
MeshVariationDatabaseHandler dbH = Core.getGame().getResourceHandler().getMeshVariationDatabaseHandler();
EBXMeshVariationDatabaseEntry entry = dbH.getVariationDatabaseEntry(meshVariationDatabase, -1, this.meshGUID, false);
if (entry!=null){
EBXObjArray materialsArr = entry.getMaterials();
if (materialsArr!=null){
Object[] materials = materialsArr.getObjects();
diffuseIDs = new int[materials.length];
int counter = 0;
for (Object obj : materials){
EBXMeshVariationDatabaseMaterial material = (EBXMeshVariationDatabaseMaterial) obj;
boolean diffuseSuccess = false;
if (material!=null){
//Diffuse
EBXExternalGUID diffuseTextureGUID = dbH.getTexture(material, ParameterName.Diffuse);
if (diffuseTextureGUID!=null){
ResourceLink diffuseLinkEBX = Core.getGame().getResourceHandler().getResourceLinkByEBXGUID(diffuseTextureGUID.getFileGUID());
if (diffuseLinkEBX!=null){
ResourceLink diffuseLinkITEXTURE = Core.getGame().getResourceHandler().getResourceLink(diffuseLinkEBX.getName(), ResourceType.ITEXTURE);
if (diffuseLinkITEXTURE!=null){
diffuseIDs[counter] = Core.getGame().getResourceHandler().getTextureHandler().loadITexture(diffuseLinkITEXTURE);
diffuseSuccess = true;
}
}
}
//Specular
//Normal
}
if (!diffuseSuccess){
diffuseIDs[counter] = Core.getGame().getModelHandler().getLoader().getNotFoundID();
}
counter++;
}
}
}
return true;
}
this.diffuseIDs = null;
return false;
}
public int[] getDiffuseIDs() {
return diffuseIDs;
}
public EBXExternalGUID getMeshGUID() {
return meshGUID;
}
}