diff --git a/src/org/oscim/renderer/TileManager.java b/src/org/oscim/renderer/TileManager.java index def04fbc..39c3019c 100644 --- a/src/org/oscim/renderer/TileManager.java +++ b/src/org/oscim/renderer/TileManager.java @@ -324,18 +324,15 @@ public class TileManager { boolean changed = (mNewTiles.cnt != mCurrentTiles.cnt); - for (int i = 0, n = mNewTiles.cnt; i < n && !changed; i++) { - MapTile t = newTiles[i]; - boolean found = false; + Arrays.sort(mNewTiles.tiles, 0, mNewTiles.cnt, TileSet.coordComparator); - for (int j = 0, m = mCurrentTiles.cnt; j < m; j++) { - if (t == curTiles[j]) { - found = true; + if (!changed) { + for (int i = 0, n = mNewTiles.cnt; i < n; i++) { + if (newTiles[i] != curTiles[i]) { + changed = true; break; } } - if (!found) - changed = true; } if (changed) { diff --git a/src/org/oscim/renderer/TileSet.java b/src/org/oscim/renderer/TileSet.java index fed2479e..75e9f551 100644 --- a/src/org/oscim/renderer/TileSet.java +++ b/src/org/oscim/renderer/TileSet.java @@ -14,6 +14,8 @@ */ package org.oscim.renderer; +import java.util.Comparator; + /** * use with TileManager.getActiveTiles(TileSet) to get the current tiles. tiles * are locked to not be modifed until getActiveTiles passes them back on a @@ -31,4 +33,26 @@ public final class TileSet { TileSet(int numTiles) { tiles = new MapTile[numTiles]; } + + public static Comparator coordComparator = new CoordComparator(); + + public static class CoordComparator implements Comparator { + + @Override + public int compare(MapTile lhs, MapTile rhs) { + if (lhs.tileX == rhs.tileX) { + if (lhs.tileY == rhs.tileY) + return 0; + + if (lhs.tileY < rhs.tileY) + return 1; + + return -1; + } + if (lhs.tileX < rhs.tileX) + return 1; + + return -1; + } + } }