X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fgui%2Fmap%2FMemTileCacher.java;h=20d7a213a1a0c1b76001272f862739cec19f5051;hp=69b5f831b19f3ad65a7a97c2f9a96e51d3f5756e;hb=4d5796d02a15808311c09448d79e6e7d1de9d636;hpb=f1b92378a792131ac8fb33a869405851d5b2d1f7 diff --git a/tim/prune/gui/map/MemTileCacher.java b/tim/prune/gui/map/MemTileCacher.java index 69b5f83..20d7a21 100644 --- a/tim/prune/gui/map/MemTileCacher.java +++ b/tim/prune/gui/map/MemTileCacher.java @@ -47,8 +47,8 @@ public class MemTileCacher // Mark boundaries as invalid for (int i=0; i (tileSpan/2)) {deltaX -= tileSpan;} + while (deltaX < (-tileSpan/2)) {deltaX += tileSpan;} + + int x = getCacheCoordinate(deltaX + _gridCentreX); + int y = getCacheCoordinate(inY - _tileY + _gridCentreY); + return (x + y * GRID_SIZE); + } + + /** + * Get the array index for the given coordinates, without wrapping x coords + * (used for deletion to avoid deleting the wrong tile) + * @param inX x coord of tile + * @param inY y coord of tile + * @return array index + */ + private int getArrayIndexNoWrap(int inX, int inY) + { int x = getCacheCoordinate(inX - _tileX + _gridCentreX); int y = getCacheCoordinate(inY - _tileY + _gridCentreY); - //System.out.println("Transformed to (" + x + ", " + y + ")"); return (x + y * GRID_SIZE); } @@ -86,7 +102,6 @@ public class MemTileCacher */ public void clearAll() { - // Clear all images if zoom changed for (int i=0; i<_tiles.length; i++) { _tiles[i] = null; } @@ -107,9 +122,13 @@ public class MemTileCacher * @param inTile image to save * @param inX x coordinate of tile * @param inY y coordinate of tile + * @param inZoom zoom level */ - public void setTile(Image inTile, int inX, int inY) + public void setTile(Image inTile, int inX, int inY, int inZoom) { - _tiles[getArrayIndex(inX, inY)] = inTile; + // Ignore images received for a different zoom level + if (inZoom == _zoom) { + _tiles[getArrayIndex(inX, inY)] = inTile; + } } }