From 761af2264f8e85ac3cacde047b9bb5700487eae6 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 30 Apr 2011 20:25:52 +0300 Subject: Fix overlaped tiles indexes issue. --- src/map.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index f79539567..8d2031019 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1486,25 +1486,39 @@ void Map::indexTilesets() it_end = mTilesets.end(); it < it_end; ++it) { - if (!s || s->getFirstGid() < (*it)->getFirstGid()) + if (!s || s->getFirstGid() + s->size() + < (*it)->getFirstGid() + (*it)->size()) + { s = *it; + } } if (!s) + { + mIndexedTilesetsSize = 0; + mIndexedTilesets = 0; return; + } const int size = s->getFirstGid() + s->size(); mIndexedTilesetsSize = size; mIndexedTilesets = new Tileset*[size]; std::fill_n(mIndexedTilesets, size, static_cast(0)); + for (Tilesets::const_iterator it = mTilesets.begin(), it_end = mTilesets.end(); it < it_end; ++it) { s = *it; - const int start = s->getFirstGid(); - const int end = start + s->size(); - for (int f = start; f < end; f ++) - mIndexedTilesets[f] = s; + if (s) + { + const int start = s->getFirstGid(); + const int end = start + s->size(); + for (int f = start; f < end; f ++) + { + if (f < size) + mIndexedTilesets[f] = s; + } + } } } -- cgit v1.2.3-70-g09d2