/* * ----------------------------------------------------------------------- * Copyright 2012 - Alistair Rutherford - www.netthreads.co.uk * ----------------------------------------------------------------------- * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.netthreads.libgdx.texture; import java.util.HashMap; import java.util.List; import java.util.Map; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Disposable; import com.google.inject.Singleton; /** * Represents a generic texture cache backed by the {@link TextureAtlas}. * */ @Singleton public class TextureCache implements Disposable { private TextureAtlas textureAtlas = null; private Map<String, TextureDefinition> definitions; /** * Construct cache. * */ public TextureCache() { definitions = new HashMap<String, TextureDefinition>(); } /** * Pack pack file textures (textures file resides in same directory). * * @param packFile */ public void load(String packFile) { if (textureAtlas == null) { textureAtlas = new TextureAtlas(Gdx.files.internal(packFile)); } } /** * Load predefined textures. * * This requires texture definitions to be added to the {@link AppActorTextures} structure. */ public void load(List<TextureDefinition> textureDefinitions) { if (textureAtlas == null) { textureAtlas = new TextureAtlas(); } else { dispose(); textureAtlas = new TextureAtlas(); } for (TextureDefinition definition : textureDefinitions) { Texture texture = new Texture(Gdx.files.internal(definition.getPath())); TextureRegion textureRegion = new TextureRegion(texture); textureAtlas.addRegion(definition.getName(), textureRegion); definitions.put(definition.getName(), definition); } } /** * Fetch texture region from cache. * * @param name * The texture name. * * @return The texture region. */ public TextureRegion getTexture(TextureDefinition definition) { return textureAtlas.findRegion(definition.getName()); } /** * Fetch texture region from cache. * * @param name * The texture name. * * @return The texture region. */ public TextureDefinition getDefinition(String name) { return definitions.get(name); } /** * Dispose of cache data. * */ @Override public void dispose() { definitions.clear(); textureAtlas.dispose(); } }