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

Fix battle queue stack highlighting

This commit is contained in:
Ivan Savenko 2023-06-16 15:30:59 +03:00
parent 108688389e
commit 0be9aff99f
2 changed files with 19 additions and 17 deletions

View File

@ -652,14 +652,6 @@ StackQueue::StackQueue(bool Embedded, BattleInterface & owner)
void StackQueue::show(Canvas & to)
{
auto unitIdsToHighlight = owner.stacksController->getHoveredStacksUnitIds();
for(auto & stackBox : stackBoxes)
{
bool isBoundUnitCurrentlyHovered = vstd::contains(unitIdsToHighlight, stackBox->getBoundUnitID());
stackBox->toggleHighlight(isBoundUnitCurrentlyHovered);
}
if (embedded)
showAll(to);
CIntObject::show(to);
@ -783,15 +775,24 @@ std::optional<uint32_t> StackQueue::StackBox::getBoundUnitID() const
return boundUnitID;
}
void StackQueue::StackBox::toggleHighlight(bool value)
bool StackQueue::StackBox::isBoundUnitHighlighted() const
{
highlighted = value;
auto unitIdsToHighlight = owner->owner.stacksController->getHoveredStacksUnitIds();
return vstd::contains(unitIdsToHighlight, getBoundUnitID());
}
void StackQueue::StackBox::showAll(Canvas & to)
{
CIntObject::showAll(to);
if(isBoundUnitHighlighted())
to.drawBorder(background->pos, Colors::CYAN, 2);
}
void StackQueue::StackBox::show(Canvas & to)
{
if(highlighted)
to.drawBorder(background->pos, Colors::CYAN, 2);
CIntObject::show(to);
if(isBoundUnitHighlighted())
to.drawBorder(background->pos, Colors::CYAN, 2);
}

View File

@ -167,20 +167,21 @@ class StackQueue : public CIntObject
{
StackQueue * owner;
std::optional<uint32_t> boundUnitID;
bool highlighted = false;
public:
std::shared_ptr<CPicture> background;
std::shared_ptr<CAnimImage> icon;
std::shared_ptr<CLabel> amount;
std::shared_ptr<CAnimImage> stateIcon;
void show(Canvas & to) override;
void showAll(Canvas & to) override;
bool isBoundUnitHighlighted() const;
public:
StackBox(StackQueue * owner);
void setUnit(const battle::Unit * unit, size_t turn = 0);
void toggleHighlight(bool value);
std::optional<uint32_t> getBoundUnitID() const;
void show(Canvas & to) override;
};
static const int QUEUE_SIZE = 10;