diff --git a/client/mapHandler.cpp b/client/mapHandler.cpp index e5de71a13..816bdff69 100644 --- a/client/mapHandler.cpp +++ b/client/mapHandler.cpp @@ -1329,33 +1329,38 @@ bool CMapHandler::printObject(const CGObjectInstance *obj, bool fadein /* = fals bool CMapHandler::hideObject(const CGObjectInstance *obj, bool fadeout /* = false */) { - // do we actually need to search through the whole map for this? - for (size_t i=0; iwidth; i++) + auto pos = obj->pos; + + for (size_t i = pos.x; i > pos.x - obj->getWidth(); i--) { - for (size_t j=0; jheight; j++) + for (size_t j = pos.y; j > pos.y - obj->getHeight(); j--) { - for (size_t k=0; k<(map->twoLevel ? 2 : 1); k++) + int3 t(i, j, pos.z); + if (!map->isInTheMap(t)) + continue; + + auto &objs = ttiles[i][j][pos.z].objects; + for (size_t x = 0; x < objs.size(); x++) { - auto &objs = ttiles[i][j][k].objects; - for(size_t x=0; x < objs.size(); x++) + auto ourObj = objs[x].obj; + if (ourObj && ourObj->id == obj->id) { - if (objs[x].obj && objs[x].obj->id == obj->id) + if (fadeout && ADVOPT.objectFading) // object should be faded == erase is delayed until the end of fadeout { - if (fadeout && ADVOPT.objectFading) // object should be faded == erase is delayed until the end of fadeout - { - if (startObjectFade(objs[x], false, int3(i, j, k))) - objs[x].obj = nullptr; - else - objs.erase(objs.begin() + x); - } + if (startObjectFade(objs[x], false, t)) + objs[x].obj = nullptr; //set original pointer to null else objs.erase(objs.begin() + x); - break; } + else + objs.erase(objs.begin() + x); + break; } } } + } + return true; } bool CMapHandler::removeObject(CGObjectInstance *obj, bool fadeout /* = false */)