package com.flansmod.client.tmt; import java.io.File; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; public abstract class ModelPoolEntry { public File checkValidPath(String path) { File file = null; for(int index = 0; index < fileExtensions.length && (file == null || !file.exists()); index++) { String absPath = path; if(!path.endsWith("." + fileExtensions[index])) absPath+= "." + fileExtensions[index]; file = new File(absPath); } if(file == null || !file.exists()) return null; return file; } public abstract void getModel(File file); /** * Sets the current transformation group. The transformation group is used * to allow for vertex transformation. If a transformation group does not exist, * a new one will be created. * @param groupName the name of the transformation group you want to switch to */ protected void setGroup(String groupName) { setGroup(groupName, new Bone(0, 0, 0, 0), 1D); } /** * Sets the current transformation group. The transformation group is used * to allow for vertex transformation. If a transformation group does not exist, * a new one will be created. * @param groupName the name of the transformation group you want to switch to * @param bone the Bone this transformation group is attached to * @param weight the weight of the transformation group */ protected void setGroup(String groupName, Bone bone, double weight) { if(groups.size() == 0 || !groups.containsKey(groupName)) groups.put(groupName, new TransformGroupBone(bone, weight)); group = groups.get(groupName); } /** * Sets the current texture group, which is used to switch the * textures on a per-model base. Do note that any model that is * rendered afterwards will use the same texture. To counter it, * set a default texture, either at initialization or before * rendering. * @param groupName The name of the texture group. If the texture * group doesn't exist, it creates a new group automatically. */ protected void setTextureGroup(String groupName) { if(textures.size() == 0 || !textures.containsKey(groupName)) { textures.put(groupName, new TextureGroup()); } texture = textures.get(groupName); } protected void applyGroups(Map<String, TransformGroup> groupsMap, Map<String, TextureGroup> texturesMap) { Set<String> groupsCol = groups.keySet(); Collection<String> texturesCol = textures.keySet(); Iterator<String> groupsItr = groupsCol.iterator(); Iterator<String> texturesItr = texturesCol.iterator(); while(groupsItr.hasNext()) { int nameIdx = 0; String groupKey = groupsItr.next(); String currentGroup = name + "_" + nameIdx + ":" + groupKey; while(groupsMap.size() > 0 && groupsMap.containsKey(currentGroup)) { nameIdx++; currentGroup = name + "_" + nameIdx + ":" + groupKey; } groupsMap.put(currentGroup, groups.get(groupKey)); } while(texturesItr.hasNext()) { int nameIdx = 0; String groupKey = texturesItr.next(); String currentGroup = name + "_" + nameIdx + ":" + groupKey; while(groupsMap.size() > 0 && texturesMap.containsKey(currentGroup)) { nameIdx++; currentGroup = name + "_" + nameIdx + ":" + groupKey; } texturesMap.put(currentGroup, textures.get(groupKey)); } } public String name; public PositionTransformVertex[] vertices; public TexturedPolygon[] faces; public Map<String, TransformGroupBone> groups; public Map<String, TextureGroup> textures; protected TransformGroupBone group; protected TextureGroup texture; protected String[] fileExtensions; }