package clientdata.visitors;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import org.apache.mina.core.buffer.IoBuffer;
import clientdata.VisitorInterface;
public class LevelOfDetailVisitor implements VisitorInterface {
public Map<Integer, LodChild> children = new HashMap<Integer, LodChild>();
public String collisionFilename;
private LodChild firstChild;
private String firstMesh = null;
@Override
public void parseData(String nodename, IoBuffer data, int depth, int size) throws Exception {
if(nodename.equals("INFO")) {
int childNumber = data.getInt();
if(children.containsKey(childNumber)) {
children.get(childNumber).in_range = data.getFloat();
children.get(childNumber).out_range = data.getFloat();
}
else {
LodChild lodChild = new LodChild();
lodChild.in_range = data.getFloat();
lodChild.out_range = data.getFloat();
children.put(childNumber, lodChild);
}
} else if(nodename.contains("CHLD")) {
int childNumber = data.getInt();
if(children.containsKey(childNumber)) {
children.get(childNumber).meshFilename = data.getString(Charset.forName("US-ASCII").newDecoder());
if(firstMesh == null && !children.get(childNumber).meshFilename.contains(".cmp"))
firstMesh = children.get(childNumber).meshFilename;
}
else {
LodChild lodChild = new LodChild();
lodChild.meshFilename = data.getString(Charset.forName("US-ASCII").newDecoder());
if(firstMesh == null && !lodChild.meshFilename.contains(".cmp"))
firstMesh = lodChild.meshFilename;
children.put(childNumber, lodChild);
}
} else if(nodename.equals("FLORDATA")) {
if(data.get() == 1) {
collisionFilename = data.getString(Charset.forName("US-ASCII").newDecoder());
}
}
}
@Override
public void notifyFolder(String nodeName, int depth) throws Exception {
// TODO Auto-generated method stub
}
public String getFirstMesh() {
/*if(children.get(1) != null) {
//System.out.println(children.get(1).meshFilename);
return children.get(1).meshFilename;
}*/
if(firstMesh == null)
return null;
if(!firstMesh.endsWith("l0.msh")) {
String correctMesh = firstMesh.replace(firstMesh.substring(firstMesh.length() - 6, firstMesh.length()), "l0.msh");
//System.out.println(correctMesh);
//File file = new File(correctMesh);
//if(file.exists())
firstMesh = correctMesh;
}
return firstMesh;
}
private class LodChild {
float in_range;
float out_range;
String meshFilename;
}
}