diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java index a03b834b0..4b4289ae3 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java @@ -5,12 +5,17 @@ import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; +import java.util.HashMap; +import java.util.Map; + public final class TileCollection { private final Bitmap[] bitmaps; + private final Map flippedBitmaps; public final int maxTileID; public TileCollection(int maxTileID) { this.bitmaps = new Bitmap[maxTileID+1]; + this.flippedBitmaps = new HashMap<>(); this.maxTileID = maxTileID; } @@ -20,18 +25,28 @@ public final class TileCollection { public void setBitmap(int tileID, Bitmap bitmap) { bitmaps[tileID] = bitmap; + flippedBitmaps.remove(tileID); // Remove cached flipped version if it exists } public void drawTile(Canvas canvas, int tile, int px, int py, Paint mPaint) { drawTile(canvas, tile, px, py, mPaint, false); } public void drawTile(Canvas canvas, int tile, int px, int py, Paint mPaint, boolean isFlippedX) { - if (isFlippedX) - canvas.drawBitmap(flipBitmapX(bitmaps[tile]), px, py, mPaint); - else canvas.drawBitmap(bitmaps[tile], px, py, mPaint); + if (isFlippedX) { + canvas.drawBitmap(getFlippedBitmap(tile), px, py, mPaint); + } else canvas.drawBitmap(bitmaps[tile], px, py, mPaint); } - public Bitmap flipBitmapX(Bitmap source) { + private Bitmap getFlippedBitmap(int tile) { + if (flippedBitmaps.containsKey(tile)) { + return flippedBitmaps.get(tile); + } + Bitmap flipped = flipBitmapX(bitmaps[tile]); + flippedBitmaps.put(tile, flipped); + return flipped; + } + + private static Bitmap flipBitmapX(Bitmap source) { Matrix matrix = new Matrix(); matrix.postScale(-1, 1, source.getWidth() / 2f, source.getHeight() / 2f); return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);