1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-26 03:52:01 +02:00
Minor improvements.
This commit is contained in:
Michał W. Urbańczyk 2010-07-31 01:38:12 +00:00
parent d79fa527a7
commit 558350c686
3 changed files with 105 additions and 24 deletions

View File

@ -2739,7 +2739,7 @@ void CTradeWindow::CTradeableItem::showAll(SDL_Surface * to)
{
case RESOURCE:
posToBitmap = Point(19,9);
posToSubCenter = Point(36, 57);
posToSubCenter = Point(36, 59);
break;
case CREATURE_PLACEHOLDER:
case CREATURE:
@ -2751,8 +2751,12 @@ void CTradeWindow::CTradeableItem::showAll(SDL_Surface * to)
posToSubCenter = Point(31, 76);
break;
case ARTIFACT_PLACEHOLDER:
posToSubCenter = Point(19, 55);
if(downSelection)
posToSubCenter.y += 8;
break;
case ARTIFACT:
posToSubCenter = Point(18, 57);
posToSubCenter = Point(19, 58);
break;
}
@ -2890,6 +2894,24 @@ void CTradeWindow::CTradeableItem::clickRight(tribool down, bool previousState)
}
}
std::string CTradeWindow::CTradeableItem::getName(int number /*= -1*/) const
{
switch(type)
{
case PLAYER:
return CGI->generaltexth->capColors[id];
case RESOURCE:
return CGI->generaltexth->restypes[id];
case CREATURE:
if(number == 1)
return CGI->creh->creatures[id]->nameSing;
else
return CGI->creh->creatures[id]->namePl;
case ARTIFACT:
return CGI->arth->artifacts[id]->Name();
}
}
CTradeWindow::CTradeWindow(const IMarket *Market, const CGHeroInstance *Hero, EMarketMode Mode)
: market(Market), hero(Hero), hLeft(NULL), hRight(NULL), readyToTrade(false), arts(NULL)
{
@ -3152,7 +3174,7 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
: CTradeWindow(Market, Hero, Mode)
{
OBJ_CONSTRUCTION_CAPTURING_ALL;
madeTransaction = false;
std::string bgName;
bool sliderNeeded = true;
@ -3186,7 +3208,11 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
new CGStatusBar(302, 576);
if(market->o->ID == 99 || market->o->ID == 221)
if(market->o->ID == 7) //black market
{
printAtMiddle(CGI->generaltexth->allTexts[349],300,27,FONT_BIG,tytulowy,*bg); //title
}
else if(market->o->ID == 99 || market->o->ID == 221) //trading post
{
printAtMiddle(CGI->generaltexth->allTexts[159],300,27,FONT_BIG,tytulowy,*bg); //title
}
@ -3199,15 +3225,15 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
}
else
{
printAtMiddle(CGI->generaltexth->allTexts[158],300,27,FONT_BIG,tytulowy,*bg); //trading post
printAtMiddle(CGI->generaltexth->allTexts[158],300,27,FONT_BIG,tytulowy,*bg); //marketplace
}
initItems(false);
initItems(true);
ok = new AdventureMapButton("","",boost::bind(&CGuiHandler::popIntTotally,&GH,this),516,520,"IOK6432.DEF",SDLK_RETURN);
ok = new AdventureMapButton(CGI->generaltexth->zelp[600],boost::bind(&CGuiHandler::popIntTotally,&GH,this),516,520,"IOK6432.DEF",SDLK_RETURN);
ok->assignedKeys.insert(SDLK_ESCAPE);
deal = new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::makeDeal,this),307,520,"TPMRKB.DEF");
deal = new AdventureMapButton(CGI->generaltexth->zelp[595],boost::bind(&CMarketplaceWindow::makeDeal,this),307,520,"TPMRKB.DEF");
deal->block(true);
@ -3216,7 +3242,7 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
{
slider = new CSlider(231,490,137,0,0,0);
slider->moved = boost::bind(&CMarketplaceWindow::sliderMoved,this,_1);
max = new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::setMax,this),229,520,"IRCBTNS.DEF");
max = new AdventureMapButton(CGI->generaltexth->zelp[596],boost::bind(&CMarketplaceWindow::setMax,this),229,520,"IRCBTNS.DEF");
max->block(true);
}
else
@ -3226,6 +3252,8 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
deal->pos.x -= 38;
}
Rect traderTextRect;
//left side
switch(Mode)
{
@ -3246,23 +3274,28 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
case CREATURE_RESOURCE:
case RESOURCE_ARTIFACT:
printAtMiddle(CGI->generaltexth->allTexts[168],445,148,FONT_SMALL,zwykly,*bg); //available for trade
traderTextRect = Rect(316, 48, 260, 75);
break;
case RESOURCE_PLAYER:
printAtMiddle(CGI->generaltexth->allTexts[169],445,55,FONT_SMALL,zwykly,*bg); //players
traderTextRect = Rect(28, 48, 260, 75);
break;
}
if(printButtonFor(RESOURCE_PLAYER))
new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::setMode,this, RESOURCE_PLAYER), 18, 520,"TPMRKBU1.DEF");
if(printButtonFor(RESOURCE_RESOURCE))
new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::setMode,this, RESOURCE_RESOURCE), 516, 450,"TPMRKBU5.DEF");
if(printButtonFor(CREATURE_RESOURCE))
new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::setMode,this, CREATURE_RESOURCE), 516, 485,"TPMRKBU4.DEF"); //was y=450, changed to not overlap res-res in some conditions
if(printButtonFor(RESOURCE_ARTIFACT))
new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::setMode,this, RESOURCE_ARTIFACT), 18, 450,"TPMRKBU2.DEF");
if(printButtonFor(ARTIFACT_RESOURCE)) //unblock when support for art-res is ready
(new AdventureMapButton("","",boost::bind(&CMarketplaceWindow::setMode,this, ARTIFACT_RESOURCE), 18, 485,"TPMRKBU3.DEF"))->block(true); //was y=450, changed to not overlap res-art in some conditions
traderText = new CTextBox("", traderTextRect, 0, FONT_SMALL, CENTER);
if(printButtonFor(RESOURCE_PLAYER))
new AdventureMapButton(CGI->generaltexth->zelp[612],boost::bind(&CMarketplaceWindow::setMode,this, RESOURCE_PLAYER), 18, 520,"TPMRKBU1.DEF");
if(printButtonFor(RESOURCE_RESOURCE))
new AdventureMapButton(CGI->generaltexth->zelp[605],boost::bind(&CMarketplaceWindow::setMode,this, RESOURCE_RESOURCE), 516, 450,"TPMRKBU5.DEF");
if(printButtonFor(CREATURE_RESOURCE))
new AdventureMapButton(CGI->generaltexth->zelp[599],boost::bind(&CMarketplaceWindow::setMode,this, CREATURE_RESOURCE), 516, 485,"TPMRKBU4.DEF"); //was y=450, changed to not overlap res-res in some conditions
if(printButtonFor(RESOURCE_ARTIFACT))
new AdventureMapButton(CGI->generaltexth->zelp[598],boost::bind(&CMarketplaceWindow::setMode,this, RESOURCE_ARTIFACT), 18, 450,"TPMRKBU2.DEF");
if(printButtonFor(ARTIFACT_RESOURCE)) //unblock when support for art-res is ready
(new AdventureMapButton(CGI->generaltexth->zelp[613],boost::bind(&CMarketplaceWindow::setMode,this, ARTIFACT_RESOURCE), 18, 485,"TPMRKBU3.DEF"))->block(true); //was y=450, changed to not overlap res-art in some conditions
updateTraderText();
}
CMarketplaceWindow::~CMarketplaceWindow()
@ -3312,6 +3345,7 @@ void CMarketplaceWindow::makeDeal()
{
LOCPLINT->cb->trade(market->o, mode, leftIdToSend, hRight->id, r2, hero);
}
madeTransaction = true;
hLeft = NULL;
hRight = NULL;
@ -3365,6 +3399,7 @@ void CMarketplaceWindow::selectionChanged(bool side)
if(side && itemsType[0] != PLAYER) //items[1] selection changed, recalculate offers
initSubs(false);
updateTraderText();
redraw();
}
@ -3399,6 +3434,7 @@ void CMarketplaceWindow::artifactsChanged(bool Left)
toRemove.insert(t);
removeItems(toRemove);
redraw();
}
std::string CMarketplaceWindow::selectionSubtitle(bool Left) const
@ -3505,6 +3541,51 @@ void CMarketplaceWindow::getBaseForPositions(EType type, int &dx, int &dy, int &
leftToRightOffset = 289;
}
void CMarketplaceWindow::updateTraderText()
{
if(readyToTrade)
{
if(mode == RESOURCE_PLAYER)
{
//I can give %s to the %s player.
traderText->setTxt(boost::str(boost::format(CGI->generaltexth->allTexts[165]) % hLeft->getName() % hRight->getName()));
}
else if(mode == RESOURCE_ARTIFACT)
{
//I can offer you the %s for %d %s of %s.
traderText->setTxt(boost::str(boost::format(CGI->generaltexth->allTexts[267]) % hRight->getName() % r1 % CGI->generaltexth->allTexts[160 + (r1==1)] % hLeft->getName()));
}
else if(mode == RESOURCE_RESOURCE)
{
//I can offer you %d %s of %s for %d %s of %s.
traderText->setTxt(boost::str(boost::format(CGI->generaltexth->allTexts[157]) % r2 % CGI->generaltexth->allTexts[160 + (r2==1)] % hRight->getName() % r1 % CGI->generaltexth->allTexts[160 + (r1==1)] % hLeft->getName()));
}
else if(mode == CREATURE_RESOURCE)
{
//I can offer you %d %s of %s for %d %s.
traderText->setTxt(boost::str(boost::format(CGI->generaltexth->allTexts[269]) % r2 % CGI->generaltexth->allTexts[160 + (r2==1)] % hRight->getName() % r1 % hLeft->getName(r1)));
}
return;
}
int gnrtxtnr = -1;
if(madeTransaction)
{
if(mode == RESOURCE_PLAYER)
gnrtxtnr = 166; //Are there any other resources you'd like to give away?
else
gnrtxtnr = 162; //You have received quite a bargain. I expect to make no profit on the deal. Can I interest you in any of my other wares?
}
else
{
if(mode == RESOURCE_PLAYER)
gnrtxtnr = 167; //If you'd like to give any of your resources to another player, click on the item you wish to give and to whom.
else
gnrtxtnr = 163; //Please inspect our fine wares. If you feel like offering a trade, click on the items you wish to trade with and for.
}
traderText->setTxt(CGI->generaltexth->allTexts[gnrtxtnr]);
}
CAltarWindow::CAltarWindow(const IMarket *Market, const CGHeroInstance *Hero /*= NULL*/, EMarketMode Mode)
:CTradeWindow(Market, Hero, Mode)
{

View File

@ -605,6 +605,7 @@ public:
void showAll(SDL_Surface * to);
void clickLeft(tribool down, bool previousState);
SDL_Surface *getSurface();
std::string getName(int number = -1) const;
CTradeableItem(EType Type, int ID, bool Left, int Serial);
};
@ -650,6 +651,8 @@ class CMarketplaceWindow : public CTradeWindow
bool printButtonFor(EMarketMode M) const;
public:
int r1, r2; //suggested amounts of traded resources
bool madeTransaction; //if player made at least one transaction
CTextBox *traderText;
void setMax();
void sliderMoved(int to);
@ -667,6 +670,7 @@ public:
void resourceChanged(int type, int val);
void getBaseForPositions(EType type, int &dx, int &dy, int &x, int &y, int &h, int &w, bool Right, int &leftToRightOffset) const;
void updateTraderText();
};
class CAltarWindow : public CTradeWindow

View File

@ -3092,12 +3092,8 @@ void CGMine::newTurn() const
if (tempOwner == NEUTRAL_PLAYER)
return;
int vv = 1;
if (subID==0 || subID==2)
vv++;
else if (subID==6)
vv = 1000;
cb->giveResource(tempOwner,subID,vv);
cb->giveResource(tempOwner, producedResource, producedQuantity);
}
void CGMine::initObj()