diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-09-13 16:34:10 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-09-13 16:34:10 +0300 |
commit | 0b734fa8db3cfcef12f4dc35bd4f8da1bb86944d (patch) | |
tree | 88f05a8270b03c0d50e2a3f7b6ca61f8969bf4fc | |
parent | 63c7c0bca65489b3f4ce29ffca05d638858c7e19 (diff) | |
download | manaplus-0b734fa8db3cfcef12f4dc35bd4f8da1bb86944d.tar.gz manaplus-0b734fa8db3cfcef12f4dc35bd4f8da1bb86944d.tar.bz2 manaplus-0b734fa8db3cfcef12f4dc35bd4f8da1bb86944d.tar.xz manaplus-0b734fa8db3cfcef12f4dc35bd4f8da1bb86944d.zip |
Improve a bit map load speed.
-rw-r--r-- | src/map.h | 3 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 18 |
2 files changed, 17 insertions, 4 deletions
@@ -392,6 +392,9 @@ class Map : public Properties, public ConfigListener bool isCustom() const { return mCustom; } + std::map<int, TileAnimation*> &getTileAnimations() + { return mTileAnimations; } + protected: friend class Actor; friend class Minimap; diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index f133e273d..48d63144a 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -568,6 +568,10 @@ void MapReader::readLayer(const XmlNodePtr node, Map *const map) } } + std::map<int, TileAnimation*> &tileAnimations + = map->getTileAnimations(); + + const bool hasAnimations = !tileAnimations.empty(); for (int i = 0; i < binLen - 3; i += 4) { const int gid = binData[i] | @@ -577,10 +581,16 @@ void MapReader::readLayer(const XmlNodePtr node, Map *const map) setTile(map, layer, x, y, gid); - TileAnimation *const ani = map->getAnimationForGid(gid); - if (ani) - ani->addAffectedTile(layer, x + y * w); - + if (hasAnimations) + { + TileAnimationMapCIter i = tileAnimations.find(gid); + if (i != tileAnimations.end()) + { + TileAnimation *const ani = i->second; + if (ani) + ani->addAffectedTile(layer, x + y * w); + } + } x++; if (x == w) { |