package org.andengine.opengl.texture.atlas.buildable; import java.io.IOException; import java.util.ArrayList; import org.andengine.opengl.texture.ITextureStateListener; import org.andengine.opengl.texture.PixelFormat; import org.andengine.opengl.texture.TextureOptions; import org.andengine.opengl.texture.atlas.ITextureAtlas; import org.andengine.opengl.texture.atlas.bitmap.BuildableBitmapTextureAtlas; import org.andengine.opengl.texture.atlas.buildable.builder.ITextureAtlasBuilder; import org.andengine.opengl.texture.atlas.buildable.builder.ITextureAtlasBuilder.TextureAtlasBuilderException; import org.andengine.opengl.texture.atlas.source.ITextureAtlasSource; import org.andengine.opengl.util.GLState; import org.andengine.util.call.Callback; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 21:26:38 - 12.08.2010 */ public class BuildableTextureAtlas<S extends ITextureAtlasSource, T extends ITextureAtlas<S>> implements IBuildableTextureAtlas<S, T> { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final T mTextureAtlas; private final ArrayList<TextureAtlasSourceWithWithLocationCallback<S>> mTextureAtlasSourcesToPlace = new ArrayList<TextureAtlasSourceWithWithLocationCallback<S>>(); // =========================================================== // Constructors // =========================================================== public BuildableTextureAtlas(final T pTextureAtlas) { this.mTextureAtlas = pTextureAtlas; } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override public int getWidth() { return this.mTextureAtlas.getWidth(); } @Override public int getHeight() { return this.mTextureAtlas.getHeight(); } @Override public int getHardwareTextureID() { return this.mTextureAtlas.getHardwareTextureID(); } @Override public boolean isLoadedToHardware() { return this.mTextureAtlas.isLoadedToHardware(); } @Override public void setNotLoadedToHardware() { this.mTextureAtlas.setNotLoadedToHardware(); } @Override public boolean isUpdateOnHardwareNeeded() { return this.mTextureAtlas.isUpdateOnHardwareNeeded(); } @Override public void setUpdateOnHardwareNeeded(final boolean pUpdateOnHardwareNeeded) { this.mTextureAtlas.setUpdateOnHardwareNeeded(pUpdateOnHardwareNeeded); } @Override public void load() { this.mTextureAtlas.load(); } @Override public void load(final GLState pGLState) throws IOException { this.mTextureAtlas.load(pGLState); } @Override public void unload() { this.mTextureAtlas.unload(); } @Override public void unload(final GLState pGLState) { this.mTextureAtlas.unload(pGLState); } @Override public void loadToHardware(final GLState pGLState) throws IOException { this.mTextureAtlas.loadToHardware(pGLState); } @Override public void unloadFromHardware(final GLState pGLState) { this.mTextureAtlas.unloadFromHardware(pGLState); } @Override public void reloadToHardware(final GLState pGLState) throws IOException { this.mTextureAtlas.reloadToHardware(pGLState); } @Override public void bind(final GLState pGLState) { this.mTextureAtlas.bind(pGLState); } @Override public void bind(final GLState pGLState, final int pGLActiveTexture) { this.mTextureAtlas.bind(pGLState, pGLActiveTexture); } @Override public PixelFormat getPixelFormat() { return this.mTextureAtlas.getPixelFormat(); } @Override public TextureOptions getTextureOptions() { return this.mTextureAtlas.getTextureOptions(); } @Override @Deprecated public void addTextureAtlasSource(final S pTextureAtlasSource, final int pTextureX, final int pTextureY) { this.mTextureAtlas.addTextureAtlasSource(pTextureAtlasSource, pTextureX, pTextureY); } @Override @Deprecated public void addTextureAtlasSource(final S pTextureAtlasSource, final int pTextureX, final int pTextureY, final int pTextureAtlasSourcePadding) { this.mTextureAtlas.addTextureAtlasSource(pTextureAtlasSource, pTextureX, pTextureY, pTextureAtlasSourcePadding); } @Override public void removeTextureAtlasSource(final S pTextureAtlasSource, final int pTextureX, final int pTextureY) { this.mTextureAtlas.removeTextureAtlasSource(pTextureAtlasSource, pTextureX, pTextureY); } @Override public void clearTextureAtlasSources() { this.mTextureAtlas.clearTextureAtlasSources(); this.mTextureAtlasSourcesToPlace.clear(); } /** * @see {@link BuildableBitmapTextureAtlas#hasTextureAtlasStateListener()} */ @Deprecated @Override public boolean hasTextureStateListener() { return this.mTextureAtlas.hasTextureStateListener(); } @Override public boolean hasTextureAtlasStateListener() { return this.mTextureAtlas.hasTextureAtlasStateListener(); } /** * @see {@link BuildableBitmapTextureAtlas#setTextureStateListener(ITextureAtlasStateListener)} */ @Deprecated @Override public ITextureAtlasStateListener<S> getTextureStateListener() { return this.mTextureAtlas.getTextureStateListener(); } @Override public ITextureAtlasStateListener<S> getTextureAtlasStateListener() { return this.mTextureAtlas.getTextureAtlasStateListener(); } /** * @see {@link BuildableBitmapTextureAtlas#setTextureStateListener(ITextureAtlasStateListener)} */ @Deprecated @Override public void setTextureStateListener(final ITextureStateListener pTextureStateListener) { this.mTextureAtlas.setTextureStateListener(pTextureStateListener); } @Override public void setTextureAtlasStateListener(final ITextureAtlasStateListener<S> pTextureAtlasStateListener) { this.mTextureAtlas.setTextureAtlasStateListener(pTextureAtlasStateListener); } // =========================================================== // Methods // =========================================================== @Override public void addEmptyTextureAtlasSource(final int pTextureX, final int pTextureY, final int pWidth, final int pHeight) { this.mTextureAtlas.addEmptyTextureAtlasSource(pTextureX, pTextureY, pWidth, pHeight); } @Override public void addTextureAtlasSource(final S pTextureAtlasSource, final Callback<S> pCallback) { this.mTextureAtlasSourcesToPlace.add(new TextureAtlasSourceWithWithLocationCallback<S>(pTextureAtlasSource, pCallback)); } @Override public void removeTextureAtlasSource(final ITextureAtlasSource pTextureAtlasSource) { final ArrayList<TextureAtlasSourceWithWithLocationCallback<S>> textureSources = this.mTextureAtlasSourcesToPlace; for(int i = textureSources.size() - 1; i >= 0; i--) { final TextureAtlasSourceWithWithLocationCallback<S> textureSource = textureSources.get(i); if(textureSource.mTextureAtlasSource == pTextureAtlasSource) { textureSources.remove(i); this.mTextureAtlas.setUpdateOnHardwareNeeded(true); return; } } } @Override public IBuildableTextureAtlas<S, T> build(final ITextureAtlasBuilder<S, T> pTextureAtlasBuilder) throws TextureAtlasBuilderException { pTextureAtlasBuilder.build(this.mTextureAtlas, this.mTextureAtlasSourcesToPlace); this.mTextureAtlasSourcesToPlace.clear(); this.mTextureAtlas.setUpdateOnHardwareNeeded(true); return this; } // =========================================================== // Inner and Anonymous Classes // =========================================================== public static class TextureAtlasSourceWithWithLocationCallback<T extends ITextureAtlasSource> { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final T mTextureAtlasSource; private final Callback<T> mCallback; // =========================================================== // Constructors // =========================================================== public TextureAtlasSourceWithWithLocationCallback(final T pTextureAtlasSource, final Callback<T> pCallback) { this.mTextureAtlasSource = pTextureAtlasSource; this.mCallback = pCallback; } // =========================================================== // Getter & Setter // =========================================================== public T getTextureAtlasSource() { return this.mTextureAtlasSource; } public Callback<T> getCallback() { return this.mCallback; } // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== } }