From d55361ae3ab117da99d953aa76117cb6630ddf05 Mon Sep 17 00:00:00 2001 From: gered Date: Wed, 3 Jul 2013 18:31:17 -0400 Subject: [PATCH] add AutoGridTextureAtlas --- .../gdx/graphics/AutoGridTextureAtlas.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/com/blarg/gdx/graphics/AutoGridTextureAtlas.java diff --git a/src/com/blarg/gdx/graphics/AutoGridTextureAtlas.java b/src/com/blarg/gdx/graphics/AutoGridTextureAtlas.java new file mode 100644 index 0000000..1dec1eb --- /dev/null +++ b/src/com/blarg/gdx/graphics/AutoGridTextureAtlas.java @@ -0,0 +1,57 @@ +package com.blarg.gdx.graphics; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureRegion; + +public class AutoGridTextureAtlas extends TextureAtlas { + public final int tileWidth; + public final int tileHeight; + public final int tileBorder; + + public AutoGridTextureAtlas(Texture texture, int tileWidth, int tileHeight, int tileBorder) { + this(texture, tileWidth, tileHeight, tileBorder, TEXCOORD_EDGE_BLEED_OFFSET); + } + + public AutoGridTextureAtlas(Texture texture, int tileWidth, int tileHeight, int tileBorder, float edgeCoordOffset) { + super(texture, edgeCoordOffset); + this.tileWidth = tileWidth; + this.tileHeight = tileHeight; + this.tileBorder = tileBorder; + + generateGrid(); + } + + private void generateGrid() { + int actualTileWidth = tileWidth + tileBorder; + int actualTileHeight = tileHeight + tileBorder; + + int tilesX = (texture.getWidth() - tileBorder) / (tileWidth + tileBorder); + int tilesY = (texture.getHeight() - tileBorder) / (tileHeight + tileBorder); + + for (int y = 0; y < tilesY; ++y) + { + for (int x = 0; x < tilesX; ++x) + { + // pixel location/dimensions + int left = tileBorder + x * actualTileWidth; + int top = tileBorder + y * actualTileHeight; + int right = left + actualTileWidth - tileBorder; + int bottom = top + actualTileHeight - tileBorder; + + // texture coordinates + // HACK: subtract edgeCoordOffset from the bottom right edges to + // get around floating point rounding errors (adjacent tiles will + // slightly bleed in otherwise) + float u = (left - tileBorder + edgeCoordOffset) / (float)texture.getWidth(); + float v = (top - tileBorder + edgeCoordOffset) / (float)texture.getHeight(); + float u2 = ((float)right + tileBorder - edgeCoordOffset) / (float)texture.getWidth(); + float v2 = ((float)bottom + tileBorder - edgeCoordOffset) / (float)texture.getHeight(); + + TextureRegion tile = new TextureRegion(); + tile.setTexture(texture); + tile.setRegion(u, v, u2, v2); + tiles.add(tile); + } + } + } +}