mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-31 22:05:10 +02:00
parent
18e53a1717
commit
3e4d0e73e8
@ -157,6 +157,9 @@ void CCreatureWindow::init(const CStackInstance *Stack, const CBonusSystemNode *
|
||||
if (type < COMMANDER)
|
||||
commander = NULL;
|
||||
|
||||
bool creArt = false;
|
||||
displayedArtifact = ArtifactPosition::CREATURE_SLOT; // 0
|
||||
|
||||
//Basic graphics - need to calculate size
|
||||
|
||||
int commanderOffset = 0;
|
||||
@ -291,19 +294,12 @@ void CCreatureWindow::init(const CStackInstance *Stack, const CBonusSystemNode *
|
||||
|
||||
if (GameConstants::STACK_ARTIFACT)
|
||||
{
|
||||
setArt(stack->getArt(ArtifactPosition::CREATURE_SLOT));
|
||||
if (type > BATTLE) //artifact buttons inactive in battle
|
||||
{
|
||||
//TODO: disable buttons if no artifact is equipped
|
||||
leftArtRoll = new CAdventureMapButton(std::string(), std::string(), boost::bind (&CCreatureWindow::scrollArt, this, -1), 437, 98, "hsbtns3.def", SDLK_LEFT);
|
||||
rightArtRoll = new CAdventureMapButton(std::string(), std::string(), boost::bind (&CCreatureWindow::scrollArt, this, +1), 516, 98, "hsbtns5.def", SDLK_RIGHT);
|
||||
if (heroOwner)
|
||||
passArtToHero = new CAdventureMapButton(std::string(), std::string(), boost::bind (&CCreatureWindow::passArtifactToHero, this), 437, 148, "OVBUTN1.DEF", SDLK_HOME);
|
||||
}
|
||||
creArt = true;
|
||||
}
|
||||
}
|
||||
if (commander) //secondary skills
|
||||
{
|
||||
creArt = true;
|
||||
for (int i = ECommander::ATTACK; i <= ECommander::SPELL_POWER; ++i)
|
||||
{
|
||||
if (commander->secondarySkills[i])
|
||||
@ -347,6 +343,18 @@ void CCreatureWindow::init(const CStackInstance *Stack, const CBonusSystemNode *
|
||||
printAtMiddle(boost::lexical_cast<std::string>((ui16)(commander->level)), 488, 62, FONT_MEDIUM, Colors::Jasmine,*bitmap);
|
||||
printAtMiddle(boost::lexical_cast<std::string>(stack->experience), 488, 82, FONT_SMALL, Colors::Cornsilk,*bitmap);
|
||||
}
|
||||
if (creArt) //stack or commander artifacts
|
||||
{
|
||||
setArt (stack->getArt(ArtifactPosition::CREATURE_SLOT));
|
||||
if (type > BATTLE) //artifact buttons inactive in battle
|
||||
{
|
||||
//TODO: disable buttons if no artifact is equipped
|
||||
leftArtRoll = new CAdventureMapButton(std::string(), std::string(), boost::bind (&CCreatureWindow::scrollArt, this, -1), 437, 98, "hsbtns3.def", SDLK_LEFT);
|
||||
rightArtRoll = new CAdventureMapButton(std::string(), std::string(), boost::bind (&CCreatureWindow::scrollArt, this, +1), 516, 98, "hsbtns5.def", SDLK_RIGHT);
|
||||
if (heroOwner)
|
||||
passArtToHero = new CAdventureMapButton(std::string(), std::string(), boost::bind (&CCreatureWindow::passArtifactToHero, this), 437, 148, "OVBUTN1.DEF", SDLK_HOME);
|
||||
}
|
||||
}
|
||||
|
||||
if (battleStack) //only during battle
|
||||
{
|
||||
@ -486,24 +494,28 @@ void CCreatureWindow::sliderMoved(int newpos)
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CCreatureWindow::setArt(const CArtifactInstance *creatureArtifact)
|
||||
void CCreatureWindow::setArt(const CArtifactInstance *art)
|
||||
{
|
||||
creatureArtifact = stack->getArt(ArtifactPosition::CREATURE_SLOT);
|
||||
creatureArtifact = art;
|
||||
if (creatureArtifact)
|
||||
{
|
||||
if (artifactImage == NULL)
|
||||
addChild(artifactImage = new CAnimImage("ARTIFACT", creatureArtifact->artType->id, 0, 466, 100), true);
|
||||
artifactImage = new CAnimImage("ARTIFACT", creatureArtifact->artType->id, 0, 466, 100);
|
||||
else
|
||||
artifactImage->setFrame(creatureArtifact->artType->id);
|
||||
}
|
||||
else
|
||||
delChildNUll(artifactImage);
|
||||
artifactImage = NULL;
|
||||
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CCreatureWindow::scrollArt(int dir)
|
||||
{
|
||||
//TODO: get next artifact
|
||||
setArt(stack->getArt(ArtifactPosition::CREATURE_SLOT));
|
||||
int size = stack->artifactsWorn.size();
|
||||
displayedArtifact = size ? (displayedArtifact + dir) % size : ArtifactPosition::CREATURE_SLOT;
|
||||
setArt (stack->getArt(displayedArtifact));
|
||||
}
|
||||
|
||||
void CCreatureWindow::passArtifactToHero()
|
||||
@ -511,7 +523,7 @@ void CCreatureWindow::passArtifactToHero()
|
||||
const CGHeroInstance * h = dynamic_cast<const CGHeroInstance *>(stack->armyObj);
|
||||
if (h && creatureArtifact)
|
||||
{
|
||||
LOCPLINT->cb->swapArtifacts (ArtifactLocation (stack, ArtifactPosition::CREATURE_SLOT), ArtifactLocation(h, creatureArtifact->firstBackpackSlot(h)));
|
||||
LOCPLINT->cb->swapArtifacts (ArtifactLocation (stack, displayedArtifact), ArtifactLocation(h, creatureArtifact->firstBackpackSlot(h)));
|
||||
}
|
||||
else
|
||||
tlog2 << "Pass artifact to hero should be disabled, no hero or no artifact!\n";
|
||||
@ -521,11 +533,14 @@ void CCreatureWindow::passArtifactToHero()
|
||||
|
||||
void CCreatureWindow::artifactRemoved (const ArtifactLocation &artLoc)
|
||||
{
|
||||
setArt(stack->getArt(ArtifactPosition::CREATURE_SLOT)); //TODO: select next from the list (for Commanders)
|
||||
//TODO: align artifacts to remove holes
|
||||
int size = stack->artifactsWorn.size();
|
||||
displayedArtifact = size ? (displayedArtifact % size) : ArtifactPosition::CREATURE_SLOT; //0
|
||||
setArt (stack->getArt(displayedArtifact));
|
||||
}
|
||||
void CCreatureWindow::artifactMoved (const ArtifactLocation &artLoc, const ArtifactLocation &destLoc)
|
||||
{
|
||||
setArt(stack->getArt(ArtifactPosition::CREATURE_SLOT)); //TODO: select next from the list (for Commanders)
|
||||
artifactRemoved (artLoc); //same code
|
||||
}
|
||||
|
||||
void CCreatureWindow::clickRight(tribool down, bool previousState)
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
//bool active; //TODO: comment me
|
||||
int type;//0 - rclick popup; 1 - normal window
|
||||
int bonusRows; //height of skill window
|
||||
int displayedArtifact;
|
||||
|
||||
std::string count; //creature count in text format
|
||||
const CCreature *c; //related creature
|
||||
|
Loading…
x
Reference in New Issue
Block a user