1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

Fix terrain tooltip

This commit is contained in:
Ivan Savenko 2023-02-28 22:42:08 +02:00
parent 387a7b421a
commit 6196d538e7
3 changed files with 34 additions and 44 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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<std::string> getAmbientSounds(const int3 & tile);