package cactusServer.models;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import org.ntlab.radishforandroidstudio.framework.model3D.Model3D;
import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory;
import org.ntlab.radishforandroidstudio.framework.model3D.ModelFileFormatException;
public class CharacterModelManager {
private static CharacterModelManager theInstance = null;
private HashMap<Integer, Model3D> characterModels = new HashMap<>();
private int nextKey = 0;
private static final String MODEL_PATH = "..\\..\\";
private CharacterModelManager() {
initCharacterModels();
}
private void initCharacterModels() {
String[] initCharacterModelFileNames = { "pocha.stl", "Head4.obj" };
for (String fileName : initCharacterModelFileNames) {
addCharacterModel(fileName);
}
}
public static CharacterModelManager getInstance() {
if (theInstance == null) {
theInstance = new CharacterModelManager();
}
return theInstance;
}
public Model3D getCharacterModel(int id) {
return characterModels.get(id);
}
public int getCharacterModelCount() {
return characterModels.size();
}
public int addCharacterModel(String fileName) {
String path = createModelFilePath(MODEL_PATH + fileName);
characterModels.put(nextKey, loadModel(path));
return nextKey++;
}
private String createModelFilePath(String fileName) {
String path = getClass().getResource(fileName).getPath();
try {
path = URLDecoder.decode(path, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return path;
}
private Model3D loadModel(String fileName) {
try {
return ModelFactory.loadModel(fileName, null, false, true);
} catch (IOException | ModelFileFormatException e) {
e.printStackTrace();
}
return null;
}
/**
* 現在のCharacterModelMapの中身の確認用
*/
private void confirmModelMap() {
// 確認用
System.out.println(getCharacterModelCount() + "個のマッピングが存在するよ!");
for (Map.Entry<Integer, Model3D> entry : characterModels.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}