diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java index ced405918..3bd800ebf 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java @@ -111,10 +111,11 @@ public final class WorldMapController { Canvas canvas = new Canvas(image); canvas.scale(scale, scale); - drawMapLayer(canvas, mapTiles.layers[LayeredTileMap.LAYER_GROUND]); - tryDrawMapLayer(canvas, LayeredTileMap.LAYER_OBJECTS); - tryDrawMapLayer(canvas, LayeredTileMap.LAYER_ABOVE); - + synchronized (cachedTiles) { + drawMapLayer(canvas, mapTiles.layers[LayeredTileMap.LAYER_GROUND]); + tryDrawMapLayer(canvas, LayeredTileMap.LAYER_OBJECTS); + tryDrawMapLayer(canvas, LayeredTileMap.LAYER_ABOVE); + } return image; } @@ -128,9 +129,8 @@ public final class WorldMapController { int px = 0; for (int x = 0; x < map.size.width; ++x, px += tileSize) { final int tile = layer.tiles[x][y]; - if (tile != 0) { - canvas.drawBitmap(cachedTiles.bitmaps[tile], px, py, mPaint); - } + if (tile == 0) continue; + cachedTiles.drawTile(canvas, tile, px, py, mPaint); } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java index a92937775..67d80f192 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java @@ -5,10 +5,12 @@ import android.graphics.Canvas; import android.graphics.Paint; public class TileCollection { - public final Bitmap[] bitmaps; + private final Bitmap[] bitmaps; + public final int maxTileID; public TileCollection(int maxTileID) { - bitmaps = new Bitmap[maxTileID+1]; + this.bitmaps = new Bitmap[maxTileID+1]; + this.maxTileID = maxTileID; } public Bitmap getBitmap(int tileID) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCutter.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCutter.java index e4d4685cc..a076ea534 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCutter.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCutter.java @@ -43,11 +43,4 @@ public class TileCutter { public void recycle() { if (recycle) tilesetImage.recycle(); } - - public static int measureBitmapWidth(Resources r, int resourceID) { - Bitmap b = BitmapFactory.decodeResource(r, resourceID); - int width = b.getWidth(); - b.recycle(); - return width; - } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java index fae4ae037..1f719ce56 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java @@ -187,7 +187,7 @@ public final class TileManager { public void loadPreloadedTiles(Resources r) { int maxTileID = tileCache.getMaxTileID(); if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - if (maxTileID >= preloadedTiles.bitmaps.length) { + if (maxTileID > preloadedTiles.maxTileID) { L.log("ERROR: TileManager.preloadedTiles needs to be initialized with at least " + maxTileID + " slots. Application will crash now."); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java index b8e82cede..6efb45319 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java @@ -101,10 +101,10 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac if (w <= 0 || h <= 0) return; this.scale = world.tileManager.scale; + this.mPaint.setFilterBitmap(scale != 1); this.scaledTileSize = world.tileManager.viewTileSize; this.surfaceSize = new Size(w, h); - - screenSizeTileCount = new Size( + this.screenSizeTileCount = new Size( (int) Math.floor(w / scaledTileSize) ,(int) Math.floor(h / scaledTileSize) ); @@ -178,11 +178,11 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac Canvas c = null; try { c = holder.lockCanvas(redrawRect); - synchronized (holder) { + synchronized (holder) { synchronized (tiles) { c.translate(screenOffset.x, screenOffset.y); c.scale(scale, scale); doDrawRect(c, area); - } + } } } finally { // do this in a finally so that if an exception is thrown // during the above, we don't leave the Surface in an @@ -210,7 +210,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac Canvas c = null; try { c = holder.lockCanvas(redrawRect); - synchronized (holder) { + synchronized (holder) { synchronized (tiles) { c.translate(screenOffset.x, screenOffset.y); c.scale(scale, scale); doDrawRect(c, area); @@ -218,7 +218,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac if (effect.displayText != null) { drawEffectText(c, area, effect, textYOffset, textPaint); } - } + } } } finally { // do this in a finally so that if an exception is thrown // during the above, we don't leave the Surface in an @@ -303,9 +303,8 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac int px = px0; for (int x = 0; x < area.size.width; ++x, ++mx, px += tileSize) { final int tile = layer.tiles[mx][my]; - if (tile != 0) { - tiles.drawTile(canvas, tile, px, py, mPaint); - } + if (tile == 0) continue; + tiles.drawTile(canvas, tile, px, py, mPaint); } } }