mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Highlight stack on queue icon hovered
This commit is contained in:
parent
a19c9eccc4
commit
92754e22f0
@ -807,8 +807,21 @@ int32_t StackQueue::getSiegeShooterIconID()
|
|||||||
return owner.siegeController->getSiegedTown()->town->faction->getIndex();
|
return owner.siegeController->getSiegedTown()->town->faction->getIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::optional<uint32_t> StackQueue::getHoveredUnitIdIfAny() const
|
||||||
|
{
|
||||||
|
for(const auto & stackBox : stackBoxes)
|
||||||
|
{
|
||||||
|
if(stackBox->hovered)
|
||||||
|
{
|
||||||
|
return stackBox->getBoundUnitID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return boost::none;
|
||||||
|
}
|
||||||
|
|
||||||
StackQueue::StackBox::StackBox(StackQueue * owner):
|
StackQueue::StackBox::StackBox(StackQueue * owner):
|
||||||
owner(owner)
|
CIntObject(HOVER), owner(owner)
|
||||||
{
|
{
|
||||||
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
|
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
|
||||||
background = std::make_shared<CPicture>(owner->embedded ? "StackQueueSmall" : "StackQueueLarge");
|
background = std::make_shared<CPicture>(owner->embedded ? "StackQueueSmall" : "StackQueueLarge");
|
||||||
@ -838,6 +851,7 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn)
|
|||||||
{
|
{
|
||||||
if(unit)
|
if(unit)
|
||||||
{
|
{
|
||||||
|
boundUnitID = unit->unitId();
|
||||||
background->colorize(unit->unitOwner());
|
background->colorize(unit->unitOwner());
|
||||||
icon->visible = true;
|
icon->visible = true;
|
||||||
|
|
||||||
@ -872,6 +886,7 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
boundUnitID = boost::none;
|
||||||
background->colorize(PlayerColor::NEUTRAL);
|
background->colorize(PlayerColor::NEUTRAL);
|
||||||
icon->visible = false;
|
icon->visible = false;
|
||||||
icon->setFrame(0);
|
icon->setFrame(0);
|
||||||
@ -881,3 +896,8 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn)
|
|||||||
stateIcon->visible = false;
|
stateIcon->visible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::optional<uint32_t> StackQueue::StackBox::getBoundUnitID() const
|
||||||
|
{
|
||||||
|
return boundUnitID;
|
||||||
|
}
|
||||||
|
@ -196,6 +196,7 @@ class StackQueue : public CIntObject
|
|||||||
class StackBox : public CIntObject
|
class StackBox : public CIntObject
|
||||||
{
|
{
|
||||||
StackQueue * owner;
|
StackQueue * owner;
|
||||||
|
boost::optional<uint32_t> boundUnitID;
|
||||||
public:
|
public:
|
||||||
std::shared_ptr<CPicture> background;
|
std::shared_ptr<CPicture> background;
|
||||||
std::shared_ptr<CAnimImage> icon;
|
std::shared_ptr<CAnimImage> icon;
|
||||||
@ -204,6 +205,7 @@ class StackQueue : public CIntObject
|
|||||||
|
|
||||||
void setUnit(const battle::Unit * unit, size_t turn = 0);
|
void setUnit(const battle::Unit * unit, size_t turn = 0);
|
||||||
StackBox(StackQueue * owner);
|
StackBox(StackQueue * owner);
|
||||||
|
boost::optional<uint32_t> getBoundUnitID() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int QUEUE_SIZE = 10;
|
static const int QUEUE_SIZE = 10;
|
||||||
@ -220,6 +222,7 @@ public:
|
|||||||
|
|
||||||
StackQueue(bool Embedded, BattleInterface & owner);
|
StackQueue(bool Embedded, BattleInterface & owner);
|
||||||
void update();
|
void update();
|
||||||
|
boost::optional<uint32_t> getHoveredUnitIdIfAny() const;
|
||||||
|
|
||||||
void show(SDL_Surface * to) override;
|
void show(SDL_Surface * to) override;
|
||||||
};
|
};
|
||||||
|
@ -897,6 +897,12 @@ std::vector<const CStack *> BattleStacksController::selectHoveredStacks()
|
|||||||
if(owner.getAnimationCondition(EAnimationEvents::ACTION) == true)
|
if(owner.getAnimationCondition(EAnimationEvents::ACTION) == true)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
auto hoveredQueueUnitId = owner.windowObject->getQueueHoveredUnitId();
|
||||||
|
if(hoveredQueueUnitId.has_value())
|
||||||
|
{
|
||||||
|
return { owner.curInt->cb->battleGetStackByUnitId(hoveredQueueUnitId.value(), true) };
|
||||||
|
}
|
||||||
|
|
||||||
auto hoveredHex = owner.fieldController->getHoveredHex();
|
auto hoveredHex = owner.fieldController->getHoveredHex();
|
||||||
|
|
||||||
if (!hoveredHex.isValid())
|
if (!hoveredHex.isValid())
|
||||||
|
@ -70,7 +70,7 @@ class BattleStacksController
|
|||||||
/// currently active stack; nullptr - no one
|
/// currently active stack; nullptr - no one
|
||||||
const CStack *activeStack;
|
const CStack *activeStack;
|
||||||
|
|
||||||
/// stacks below mouse pointer (multiple stacks possible while spellcasting), used for border animation
|
/// stacks or their battle queue images below mouse pointer (multiple stacks possible while spellcasting), used for border animation
|
||||||
std::vector<const CStack *> mouseHoveredStacks;
|
std::vector<const CStack *> mouseHoveredStacks;
|
||||||
|
|
||||||
///when animation is playing, we should wait till the end to make the next stack active; nullptr of none
|
///when animation is playing, we should wait till the end to make the next stack active; nullptr of none
|
||||||
|
@ -550,6 +550,11 @@ void BattleWindow::blockUI(bool on)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::optional<uint32_t> BattleWindow::getQueueHoveredUnitId()
|
||||||
|
{
|
||||||
|
return queue->getHoveredUnitIdIfAny();
|
||||||
|
}
|
||||||
|
|
||||||
void BattleWindow::showAll(SDL_Surface *to)
|
void BattleWindow::showAll(SDL_Surface *to)
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll(to);
|
||||||
|
@ -74,6 +74,9 @@ public:
|
|||||||
/// Refresh queue after turn order changes
|
/// Refresh queue after turn order changes
|
||||||
void updateQueue();
|
void updateQueue();
|
||||||
|
|
||||||
|
/// Get mouse-hovered battle queue unit ID if any found
|
||||||
|
boost::optional<uint32_t> getQueueHoveredUnitId();
|
||||||
|
|
||||||
void activate() override;
|
void activate() override;
|
||||||
void deactivate() override;
|
void deactivate() override;
|
||||||
void keyPressed(const SDL_KeyboardEvent & key) override;
|
void keyPressed(const SDL_KeyboardEvent & key) override;
|
||||||
|
@ -185,6 +185,21 @@ const CStack* CBattleInfoEssentials::battleGetStackByID(int ID, bool onlyAlive)
|
|||||||
return stacks[0];
|
return stacks[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CStack* CBattleInfoEssentials::battleGetStackByUnitId(int unitId, bool onlyAlive) const
|
||||||
|
{
|
||||||
|
RETURN_IF_NOT_BATTLE(nullptr);
|
||||||
|
|
||||||
|
auto stacks = battleGetStacksIf([=](const CStack * s)
|
||||||
|
{
|
||||||
|
return s->unitId() == unitId && (!onlyAlive || s->alive());
|
||||||
|
});
|
||||||
|
|
||||||
|
if(stacks.empty())
|
||||||
|
return nullptr;
|
||||||
|
else
|
||||||
|
return stacks[0];
|
||||||
|
}
|
||||||
|
|
||||||
bool CBattleInfoEssentials::battleDoWeKnowAbout(ui8 side) const
|
bool CBattleInfoEssentials::battleDoWeKnowAbout(ui8 side) const
|
||||||
{
|
{
|
||||||
RETURN_IF_NOT_BATTLE(false);
|
RETURN_IF_NOT_BATTLE(false);
|
||||||
|
@ -102,6 +102,7 @@ public:
|
|||||||
TStacks battleGetAllStacks(bool includeTurrets = false) const;
|
TStacks battleGetAllStacks(bool includeTurrets = false) const;
|
||||||
|
|
||||||
const CStack * battleGetStackByID(int ID, bool onlyAlive = true) const; //returns stack info by given ID
|
const CStack * battleGetStackByID(int ID, bool onlyAlive = true) const; //returns stack info by given ID
|
||||||
|
const CStack * battleGetStackByUnitId(int unitId, bool onlyAlive = true) const; //returns stack info by given ID
|
||||||
bool battleIsObstacleVisibleForSide(const CObstacleInstance & coi, BattlePerspective::BattlePerspective side) const;
|
bool battleIsObstacleVisibleForSide(const CObstacleInstance & coi, BattlePerspective::BattlePerspective side) const;
|
||||||
|
|
||||||
///returns player that controls given stack; mind control included
|
///returns player that controls given stack; mind control included
|
||||||
|
Loading…
Reference in New Issue
Block a user