1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-26 03:52:01 +02:00

vcmi: fix components other than resources in infobar

Do not redraw infobar when components shows and
we request to show current adventure hero.
Player already knows which hero he used to pick up
components.
This commit is contained in:
Konstantin 2023-03-06 14:10:33 +03:00
parent 38d8585be3
commit 2fb2a79ca4
3 changed files with 28 additions and 5 deletions

View File

@ -1773,6 +1773,16 @@ void CPlayerInterface::tryDiggging(const CGHeroInstance * h)
void CPlayerInterface::updateInfo(const CGObjectInstance * specific) void CPlayerInterface::updateInfo(const CGObjectInstance * specific)
{ {
bool isHero = dynamic_cast<const CGHeroInstance *>(specific) != nullptr;
bool changedHero = dynamic_cast<const CGHeroInstance *>(specific) != adventureInt->curHero();
bool isTown = dynamic_cast<const CGTownInstance *>(specific) != nullptr;
bool update = (isHero && changedHero) || (isTown);
// If infobar is showing components and we request an update to hero
// do not force infobar tick here, it will prevents us to show components just picked up
if(adventureInt->infoBar->showingComponents() && !update)
return;
adventureInt->infoBar->showSelection(); adventureInt->infoBar->showSelection();
} }
@ -1883,14 +1893,16 @@ void CPlayerInterface::askToAssembleArtifact(const ArtifactLocation &al)
void CPlayerInterface::artifactPut(const ArtifactLocation &al) void CPlayerInterface::artifactPut(const ArtifactLocation &al)
{ {
EVENT_HANDLER_CALLED_BY_CLIENT; EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar->showSelection(); auto hero = boost::apply_visitor(HeroObjectRetriever(), al.artHolder);
updateInfo(hero);
askToAssembleArtifact(al); askToAssembleArtifact(al);
} }
void CPlayerInterface::artifactRemoved(const ArtifactLocation &al) void CPlayerInterface::artifactRemoved(const ArtifactLocation &al)
{ {
EVENT_HANDLER_CALLED_BY_CLIENT; EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar->showSelection(); auto hero = boost::apply_visitor(HeroObjectRetriever(), al.artHolder);
updateInfo(hero);
for(auto isa : GH.listInt) for(auto isa : GH.listInt)
{ {
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get()); auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());
@ -1904,7 +1916,8 @@ void CPlayerInterface::artifactRemoved(const ArtifactLocation &al)
void CPlayerInterface::artifactMoved(const ArtifactLocation &src, const ArtifactLocation &dst) void CPlayerInterface::artifactMoved(const ArtifactLocation &src, const ArtifactLocation &dst)
{ {
EVENT_HANDLER_CALLED_BY_CLIENT; EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar->showSelection(); auto hero = boost::apply_visitor(HeroObjectRetriever(), dst.artHolder);
updateInfo(hero);
bool redraw = true; bool redraw = true;
// If a bulk transfer has arrived, then redrawing only the last art movement. // If a bulk transfer has arrived, then redrawing only the last art movement.
@ -1932,7 +1945,8 @@ void CPlayerInterface::bulkArtMovementStart(size_t numOfArts)
void CPlayerInterface::artifactAssembled(const ArtifactLocation &al) void CPlayerInterface::artifactAssembled(const ArtifactLocation &al)
{ {
EVENT_HANDLER_CALLED_BY_CLIENT; EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar->showSelection(); auto hero = boost::apply_visitor(HeroObjectRetriever(), al.artHolder);
updateInfo(hero);
for(auto isa : GH.listInt) for(auto isa : GH.listInt)
{ {
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get()); auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());
@ -1944,7 +1958,8 @@ void CPlayerInterface::artifactAssembled(const ArtifactLocation &al)
void CPlayerInterface::artifactDisassembled(const ArtifactLocation &al) void CPlayerInterface::artifactDisassembled(const ArtifactLocation &al)
{ {
EVENT_HANDLER_CALLED_BY_CLIENT; EVENT_HANDLER_CALLED_BY_CLIENT;
adventureInt->infoBar->showSelection(); auto hero = boost::apply_visitor(HeroObjectRetriever(), al.artHolder);
updateInfo(hero);
for(auto isa : GH.listInt) for(auto isa : GH.listInt)
{ {
auto artWin = dynamic_cast<CArtifactHolder*>(isa.get()); auto artWin = dynamic_cast<CArtifactHolder*>(isa.get());

View File

@ -275,6 +275,11 @@ void CInfoBar::showComponent(const Component & comp, std::string message)
redraw(); redraw();
} }
bool CInfoBar::showingComponents()
{
return state == COMPONENT;
}
void CInfoBar::startEnemyTurn(PlayerColor color) void CInfoBar::startEnemyTurn(PlayerColor color)
{ {
OBJECT_CONSTRUCTION_CUSTOM_CAPTURING(255-DISPOSE); OBJECT_CONSTRUCTION_CUSTOM_CAPTURING(255-DISPOSE);

View File

@ -142,5 +142,8 @@ public:
/// for 3 seconds shows amount of town halls and players status /// for 3 seconds shows amount of town halls and players status
void showGameStatus(); void showGameStatus();
/// check if infobar is showed something about pickups
bool showingComponents();
}; };