mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-01-25 04:40:52 +01:00
Adding cache function
This commit is contained in:
@@ -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<Integer, Bitmap> 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);
|
||||
|
||||
Reference in New Issue
Block a user