package fr.lyrgard.hexScape.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.jme3.scene.Spatial; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.message.ErrorMessage; import fr.lyrgard.hexScape.model.CurrentUserInfo; import fr.lyrgard.hexScape.model.model3d.ExternalModel; import fr.lyrgard.hexScape.model.model3d.loader.AseModelLoader; import fr.lyrgard.hexScape.model.model3d.loader.ModelLoader; import fr.lyrgard.hexScape.model.model3d.loader.ObjModelLoader; public class ExternalModelService { private static ExternalModelService INSTANCE; public static synchronized ExternalModelService getInstance() { if (INSTANCE == null) { INSTANCE = new ExternalModelService(); } return INSTANCE; } private Map<String, ExternalModel> models = new HashMap<String, ExternalModel>(); private List<ModelLoader> modelLoaders = new ArrayList<>(); private ExternalModelService() { modelLoaders.add(new AseModelLoader()); modelLoaders.add(new ObjModelLoader()); } public Spatial getModel(String modelId) { ExternalModel model = models.get(modelId); if (model == null) { for (ModelLoader modelLoader : modelLoaders) { if (modelLoader.canLoad(modelId)) { model = modelLoader.load(modelId); models.put(modelId, model); } } } if (model == null) { GuiMessageBus.post(new ErrorMessage(CurrentUserInfo.getInstance().getPlayerId(), "Unable to load the 3d object \"" + modelId + "\"")); return null; } Spatial result = model.getNewInstance(); return result; } public void clear() { models.clear(); } }