mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-12 02:28:11 +02:00
- some fixes for garrisons (crashfix and correct behaviour of split button)
This commit is contained in:
parent
04358ed0c6
commit
ca4f53aea1
@ -441,8 +441,18 @@ void CGarrisonSlot::clickLeft(tribool down, bool previousState)
|
||||
|
||||
void CGarrisonSlot::update()
|
||||
{
|
||||
myStack = getObj()->getStackPtr(ID);
|
||||
creature = myStack ? myStack->type : NULL;
|
||||
if (getObj() != nullptr)
|
||||
{
|
||||
addUsedEvents(LCLICK | RCLICK | HOVER);
|
||||
myStack = getObj()->getStackPtr(ID);
|
||||
creature = myStack ? myStack->type : NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
removeUsedEvents(LCLICK | RCLICK | HOVER);
|
||||
myStack = nullptr;
|
||||
creature = nullptr;
|
||||
}
|
||||
|
||||
if (creature)
|
||||
{
|
||||
@ -459,19 +469,18 @@ void CGarrisonSlot::update()
|
||||
}
|
||||
}
|
||||
|
||||
CGarrisonSlot::CGarrisonSlot(CGarrisonInt *Owner, int x, int y, int IID, int Upg, const CStackInstance * Creature)
|
||||
CGarrisonSlot::CGarrisonSlot(CGarrisonInt *Owner, int x, int y, int IID, int Upg, const CStackInstance * Creature):
|
||||
ID(IID),
|
||||
owner(Owner),
|
||||
myStack(Creature),
|
||||
creature(Creature ? Creature->type : nullptr),
|
||||
upg(Upg)
|
||||
{
|
||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||
addUsedEvents(LCLICK | RCLICK | HOVER);
|
||||
if (getObj())
|
||||
addUsedEvents(LCLICK | RCLICK | HOVER);
|
||||
pos.x += x;
|
||||
pos.y += y;
|
||||
owner = Owner;
|
||||
|
||||
//assert(Creature == CGI->creh->creatures[Creature->idNumber]);
|
||||
upg = Upg;
|
||||
ID = IID;
|
||||
myStack = Creature;
|
||||
creature = Creature ? Creature->type : NULL;
|
||||
|
||||
std::string imgName = owner->smallIcons ? "cprsmall" : "TWCRPORT";
|
||||
|
||||
@ -505,15 +514,19 @@ void CGarrisonInt::addSplitBtn(CAdventureMapButton * button)
|
||||
addChild(button);
|
||||
button->recActions = defActions;
|
||||
splitButtons.push_back(button);
|
||||
button->block(getSelection() == nullptr);
|
||||
}
|
||||
|
||||
void CGarrisonInt::createSet(std::vector<CGarrisonSlot*> &ret, const CCreatureSet * set, int posX, int posY, int distance, int Upg )
|
||||
{
|
||||
ret.resize(7);
|
||||
|
||||
for(TSlots::const_iterator i=set->Slots().begin(); i!=set->Slots().end(); i++)
|
||||
if (set)
|
||||
{
|
||||
ret[i->first] = new CGarrisonSlot(this, posX + (i->first*distance), posY, i->first, Upg, i->second);
|
||||
for(TSlots::const_iterator i=set->Slots().begin(); i!=set->Slots().end(); i++)
|
||||
{
|
||||
ret[i->first] = new CGarrisonSlot(this, posX + (i->first*distance), posY, i->first, Upg, i->second);
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0; i<ret.size(); i++)
|
||||
@ -534,11 +547,8 @@ void CGarrisonInt::createSlots()
|
||||
|
||||
int width = smallIcons? 32 : 58;
|
||||
|
||||
if(armedObjs[0])
|
||||
createSet(slotsUp, armedObjs[0], 0, 0, width+interx, 0);
|
||||
|
||||
if(armedObjs[1])
|
||||
createSet (slotsDown, armedObjs[1], garOffset.x, garOffset.y, width+interx, 1);
|
||||
createSet(slotsUp, armedObjs[0], 0, 0, width+interx, 0);
|
||||
createSet(slotsDown, armedObjs[1], garOffset.x, garOffset.y, width+interx, 1);
|
||||
}
|
||||
|
||||
void CGarrisonInt::recreateSlots()
|
||||
@ -588,14 +598,6 @@ CGarrisonInt::CGarrisonInt(int x, int y, int inx, const Point &garsOffset,
|
||||
createSlots();
|
||||
}
|
||||
|
||||
void CGarrisonInt::activate()
|
||||
{
|
||||
for(size_t i = 0; i<splitButtons.size(); i++)
|
||||
splitButtons[i]->block(getSelection() != nullptr);
|
||||
|
||||
CIntObject::activate();
|
||||
}
|
||||
|
||||
const CGarrisonSlot * CGarrisonInt::getSelection()
|
||||
{
|
||||
return highlighted;
|
||||
@ -609,6 +611,8 @@ void CGarrisonInt::selectSlot(CGarrisonSlot *slot)
|
||||
highlighted->setHighlight(false);
|
||||
|
||||
highlighted = slot;
|
||||
BOOST_FOREACH (auto button, splitButtons)
|
||||
button->block(highlighted == nullptr);
|
||||
|
||||
if (highlighted)
|
||||
highlighted->setHighlight(true);
|
||||
|
@ -370,7 +370,6 @@ public:
|
||||
void addSplitBtn(CAdventureMapButton * button);
|
||||
void createSet(std::vector<CGarrisonSlot*> &ret, const CCreatureSet * set, int posX, int distance, int posY, int Upg );
|
||||
|
||||
void activate();
|
||||
void createSlots();
|
||||
void recreateSlots();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user