package com.akjava.gwt.three.client.java.utils; import java.util.List; import com.akjava.gwt.lib.client.experimental.AsyncMultiCaller; import com.akjava.gwt.three.client.js.THREE; import com.akjava.gwt.three.client.js.loaders.TextureLoader; import com.akjava.gwt.three.client.js.loaders.TextureLoader.TextureLoadHandler; import com.akjava.gwt.three.client.js.loaders.XHRLoader.XHRErrorHandler; import com.akjava.gwt.three.client.js.loaders.XHRLoader.XHRProgressHandler; import com.akjava.gwt.three.client.js.textures.Texture; import com.google.common.collect.Lists; import com.google.gwt.dom.client.NativeEvent; public class MultiTextureLoader { public MultiTextureLoader(){ } public void load(List<String> urls,final MultiTextureLoaderListener listener){ AsyncMultiCaller<String> caller=new AsyncMultiCaller<String>(urls) { final TextureLoader loader=THREE.TextureLoader(); final List<Texture> textures=Lists.newArrayList(); final List<String> messages=Lists.newArrayList(); @Override public void doFinally(boolean cancelled) { if(cancelled){ listener.onError(messages); }else{ listener.onLoad(textures); } } @Override public void execAsync(final String data) { loader.load(data, new TextureLoadHandler() { @Override public void onLoad(Texture texture) { texture.setSourceFile(data); textures.add(texture); done(data, true); } }, new XHRProgressHandler() { @Override public void onProgress(NativeEvent progress) { // skipped } },new XHRErrorHandler() { @Override public void onError(NativeEvent error) { messages.add(error.toString()); done(data,false); } }); } }; caller.startCall(); } public static interface MultiTextureLoaderListener{ public void onLoad(List<Texture> textures); public void onError(List<String> messages); } }