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

Merge pull request #72 from ArseniyShestakov/fixTradeWindow

Small fixes for CTradeWindow
This commit is contained in:
DjWarmonger 2014-12-26 09:57:40 +01:00
commit 9962623220

View File

@ -125,6 +125,9 @@ int CTradeWindow::CTradeableItem::getIndex()
void CTradeWindow::CTradeableItem::showAll(SDL_Surface * to)
{
CTradeWindow *mw = dynamic_cast<CTradeWindow *>(parent);
assert(mw);
Point posToBitmap;
Point posToSubCenter;
@ -137,7 +140,8 @@ void CTradeWindow::CTradeableItem::showAll(SDL_Surface * to)
case CREATURE_PLACEHOLDER:
case CREATURE:
posToSubCenter = Point(29, 76);
if(downSelection)
// Positing of unit count is different in Altar of Sacrifice and Freelancer's Guild
if(mw->mode == EMarketMode::CREATURE_EXP && downSelection)
posToSubCenter.y += 5;
break;
case PLAYER:
@ -624,7 +628,7 @@ void CTradeWindow::artifactSelected(CArtPlace *slot)
{
assert(mode == EMarketMode::ARTIFACT_RESOURCE);
items[1][0]->setArtInstance(slot->ourArt);
if(slot->ourArt)
if(slot->ourArt && !slot->locked)
hLeft = items[1][0];
else
hLeft = nullptr;
@ -1155,10 +1159,18 @@ CAltarWindow::CAltarWindow(const IMarket *Market, const CGHeroInstance *Hero /*=
deal = new CButton(Point(269, 520), "ALTSACR.DEF", CGI->generaltexth->zelp[585], std::bind(&CAltarWindow::makeDeal,this));
if(Hero->getAlignment() != ::EAlignment::EVIL && Mode == EMarketMode::CREATURE_EXP)
new CButton(Point(516, 421), "ALTART.DEF", CGI->generaltexth->zelp[580], std::bind(&CTradeWindow::setMode,this, EMarketMode::ARTIFACT_EXP));
if(Hero->getAlignment() != ::EAlignment::GOOD && Mode == EMarketMode::ARTIFACT_EXP)
new CButton(Point(516, 421), "ALTSACC.DEF", CGI->generaltexth->zelp[572], std::bind(&CTradeWindow::setMode,this, EMarketMode::CREATURE_EXP));
if(Mode == EMarketMode::CREATURE_EXP)
{
CButton *changeMode = new CButton(Point(516, 421), "ALTART.DEF", CGI->generaltexth->zelp[580], std::bind(&CTradeWindow::setMode,this, EMarketMode::ARTIFACT_EXP));
if (Hero->getAlignment() == ::EAlignment::EVIL)
changeMode->block(true);
}
if(Mode == EMarketMode::ARTIFACT_EXP)
{
CButton *changeMode = new CButton(Point(516, 421), "ALTSACC.DEF", CGI->generaltexth->zelp[572], std::bind(&CTradeWindow::setMode,this, EMarketMode::CREATURE_EXP));
if (Hero->getAlignment() == ::EAlignment::GOOD)
changeMode->block(true);
}
expPerUnit.resize(GameConstants::ARMY_SIZE, 0);
getExpValues();
@ -1189,8 +1201,11 @@ void CAltarWindow::getBaseForPositions(EType type, int &dx, int &dy, int &x, int
void CAltarWindow::sliderMoved(int to)
{
sacrificedUnits[hLeft->serial] = to;
updateRight(hRight);
if(hLeft)
sacrificedUnits[hLeft->serial] = to;
if(hRight)
updateRight(hRight);
deal->block(!to);
calcTotalExp();
redraw();
@ -1265,7 +1280,7 @@ void CAltarWindow::SacrificeAll()
{
for(auto i = hero->artifactsWorn.cbegin(); i != hero->artifactsWorn.cend(); i++)
{
if(i->second.artifact->artType->id != ArtifactID::ART_LOCK) //ignore locks from assembled artifacts
if(!i->second.locked) //ignore locks from assembled artifacts
moveFromSlotToAltar(i->first, nullptr, i->second.artifact);
}
@ -1344,13 +1359,7 @@ void CAltarWindow::garrisonChanged()
std::set<CTradeableItem *> empty;
getEmptySlots(empty);
for(CTradeableItem *t : empty)
{
removeItem(*std::find_if(items[0].begin(), items[0].end(), [&](const CTradeableItem * item)
{
return item->serial == t->serial;
}));
}
removeItems(empty);
initSubs(true);
getExpValues();
@ -1415,7 +1424,7 @@ int CAltarWindow::firstFreeSlot()
{
int ret = -1;
while(items[0][++ret]->id >= 0 && ret + 1 < items[0].size());
return ret < items[0].size() ? ret : -1;
return items[0][ret]->id == -1 ? ret : -1;
}
void CAltarWindow::SacrificeBackpack()
@ -1465,7 +1474,7 @@ bool CAltarWindow::putOnAltar(CTradeableItem* altarSlot, const CArtifactInstance
return false;
}
if(!altarSlot)
if(!altarSlot || altarSlot->id != -1)
{
int slotIndex = firstFreeSlot();
if(slotIndex < 0)