diff --git a/client/adventureMap/CAdvMapInt.cpp b/client/adventureMap/CAdvMapInt.cpp index 584a099bd..b0bd75bba 100644 --- a/client/adventureMap/CAdvMapInt.cpp +++ b/client/adventureMap/CAdvMapInt.cpp @@ -1148,14 +1148,13 @@ void CAdvMapInt::onTileHovered(const int3 &mapPos) std::string text = curHero() ? objAtTile->getHoverText(curHero()) : objAtTile->getHoverText(LOCPLINT->playerID); boost::replace_all(text,"\n"," "); statusbar->write(text); - } - else - { - std::string hlp; - CGI->mh->getTerrainDescr(mapPos, hlp, false); - statusbar->write(hlp); - } - + } + else + { + std::string hlp = CGI->mh->getTerrainDescr(mapPos, false); + statusbar->write(hlp); + } + if(spellBeingCasted) { switch(spellBeingCasted->id) @@ -1306,16 +1305,15 @@ void CAdvMapInt::onTileRightClicked(const int3 &mapPos) const CGObjectInstance * obj = getActiveObject(mapPos); if(!obj) - { - // Bare or undiscovered terrain - const TerrainTile * tile = LOCPLINT->cb->getTile(mapPos); - if (tile) - { - std::string hlp; - CGI->mh->getTerrainDescr(mapPos, hlp, true); - CRClickPopup::createAndPush(hlp); - } - return; + { + // Bare or undiscovered terrain + const TerrainTile * tile = LOCPLINT->cb->getTile(mapPos); + if(tile) + { + std::string hlp = CGI->mh->getTerrainDescr(mapPos, true); + CRClickPopup::createAndPush(hlp); + } + return; } CRClickPopup::createAndPush(obj, GH.getCursorPosition(), ETextAlignment::CENTER); diff --git a/client/mapRenderer/mapHandler.cpp b/client/mapRenderer/mapHandler.cpp index f7655f863..c467f1a34 100644 --- a/client/mapRenderer/mapHandler.cpp +++ b/client/mapRenderer/mapHandler.cpp @@ -14,6 +14,7 @@ #include "../CGameInfo.h" #include "../CPlayerInterface.h" +#include "../CCallback.h" #include "../../lib/UnlockGuard.h" #include "../../lib/mapObjects/CGHeroInstance.h" @@ -40,41 +41,32 @@ void CMapHandler::waitForOngoingAnimations() } } -void CMapHandler::getTerrainDescr(const int3 & pos, std::string & out, bool isRMB) const +std::string CMapHandler::getTerrainDescr(const int3 & pos, bool rightClick) const { const TerrainTile & t = map->getTile(pos); if(t.hasFavorableWinds()) + return CGI->objtypeh->getObjectName(Obj::FAVORABLE_WINDS, 0); + + std::string result = t.terType->getNameTranslated(); + + for(const auto & object : map->objects) { - out = CGI->objtypeh->getObjectName(Obj::FAVORABLE_WINDS, 0); - return; + if(object->coveringAt(pos.x, pos.y) && object->pos.z == pos.z && object->isTile2Terrain()) + { + result = object->getObjectName(); + break; + } } - //const TerrainTile2 & tt = ttiles[pos.z][pos.x][pos.y]; - bool isTile2Terrain = false; - out.clear(); - //for(auto & elem : tt.objects) - //{ - // if(elem.obj) - // { - // out = elem.obj->getObjectName(); - // if(elem.obj->ID == Obj::HOLE) - // return; - - // isTile2Terrain = elem.obj->isTile2Terrain(); - // break; - // } - //} - - if(!isTile2Terrain || out.empty()) - out = t.terType->getNameTranslated(); - - if(t.getDiggingStatus(false) == EDiggingStatus::CAN_DIG) + if(LOCPLINT->cb->getTileDigStatus(pos, false) == EDiggingStatus::CAN_DIG) { - out = boost::str(boost::format(isRMB ? "%s\r\n%s" : "%s %s") // New line for the Message Box, space for the Status Bar - % out + return boost::str(boost::format(rightClick ? "%s\r\n%s" : "%s %s") // New line for the Message Box, space for the Status Bar + % result % CGI->generaltexth->allTexts[330]); // 'digging ok' } + + return result; } bool CMapHandler::compareObjectBlitOrder(const CGObjectInstance * a, const CGObjectInstance * b) diff --git a/client/mapRenderer/mapHandler.h b/client/mapRenderer/mapHandler.h index bac9c6afb..11ec93c4b 100644 --- a/client/mapRenderer/mapHandler.h +++ b/client/mapRenderer/mapHandler.h @@ -72,7 +72,7 @@ public: void removeMapObserver(IMapObjectObserver * observer); /// returns string description for terrain interaction - void getTerrainDescr(const int3 & pos, std::string & out, bool isRMB) const; + std::string getTerrainDescr(const int3 & pos, bool rightClick) const; /// returns list of ambient sounds for specified tile std::vector getAmbientSounds(const int3 & tile);