mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-12 02:28:11 +02:00
fixed misc5 bug, hero backpack, strange bug with hero portrait (LClick)
This commit is contained in:
parent
e3f40e6907
commit
efd09f0a68
112
CHeroWindow.cpp
112
CHeroWindow.cpp
@ -17,9 +17,9 @@ extern TTF_Font * GEOR16;
|
|||||||
CHeroWindow::CHeroWindow(int playerColor): artFeet(0), artHead(0), artLHand(0),
|
CHeroWindow::CHeroWindow(int playerColor): artFeet(0), artHead(0), artLHand(0),
|
||||||
artLRing(0), artMach1(0), artMach2(0), artMach3(0), artMach4(0), artMisc1(0),
|
artLRing(0), artMach1(0), artMach2(0), artMach3(0), artMach4(0), artMisc1(0),
|
||||||
artMisc2(0), artMisc3(0), artMisc4(0), artMisc5(0), artNeck(0), artRhand(0),
|
artMisc2(0), artMisc3(0), artMisc4(0), artMisc5(0), artNeck(0), artRhand(0),
|
||||||
artRRing(0), artShoulders(0), artSpellBook(0), artTorso(0)
|
artRRing(0), artShoulders(0), artSpellBook(0), artTorso(0),
|
||||||
|
backpackPos(0), player(playerColor)
|
||||||
{
|
{
|
||||||
player = playerColor;
|
|
||||||
background = CGI->bitmaph->loadBitmap("HEROSCR4.bmp");
|
background = CGI->bitmaph->loadBitmap("HEROSCR4.bmp");
|
||||||
CSDL_Ext::blueToPlayersAdv(background, playerColor);
|
CSDL_Ext::blueToPlayersAdv(background, playerColor);
|
||||||
pos.x = 65;
|
pos.x = 65;
|
||||||
@ -48,6 +48,13 @@ CHeroWindow::CHeroWindow(int playerColor): artFeet(0), artHead(0), artLHand(0),
|
|||||||
|
|
||||||
skillpics = CGI->spriteh->giveDef("pskil42.def");
|
skillpics = CGI->spriteh->giveDef("pskil42.def");
|
||||||
flags = CGI->spriteh->giveDef("CREST58.DEF");
|
flags = CGI->spriteh->giveDef("CREST58.DEF");
|
||||||
|
//areas
|
||||||
|
portraitArea = new LClickableArea();
|
||||||
|
portraitArea->pos.x = 83;
|
||||||
|
portraitArea->pos.y = 26;
|
||||||
|
portraitArea->pos.w = 58;
|
||||||
|
portraitArea->pos.h = 64;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CHeroWindow::~CHeroWindow()
|
CHeroWindow::~CHeroWindow()
|
||||||
@ -91,6 +98,13 @@ CHeroWindow::~CHeroWindow()
|
|||||||
delete artShoulders;
|
delete artShoulders;
|
||||||
delete artSpellBook;
|
delete artSpellBook;
|
||||||
delete artTorso;
|
delete artTorso;
|
||||||
|
for(int g=0; g<backpack.size(); ++g)
|
||||||
|
{
|
||||||
|
delete backpack[g];
|
||||||
|
}
|
||||||
|
backpack.clear();
|
||||||
|
|
||||||
|
delete portraitArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::show(SDL_Surface *to)
|
void CHeroWindow::show(SDL_Surface *to)
|
||||||
@ -127,6 +141,10 @@ void CHeroWindow::show(SDL_Surface *to)
|
|||||||
artShoulders->show(to);
|
artShoulders->show(to);
|
||||||
artSpellBook->show(to);
|
artSpellBook->show(to);
|
||||||
artTorso->show(to);
|
artTorso->show(to);
|
||||||
|
for(int d=0; d<backpack.size(); ++d)
|
||||||
|
{
|
||||||
|
backpack[d]->show(to);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::setHero(const CGHeroInstance *hero)
|
void CHeroWindow::setHero(const CGHeroInstance *hero)
|
||||||
@ -152,6 +170,11 @@ void CHeroWindow::setHero(const CGHeroInstance *hero)
|
|||||||
delete artShoulders;
|
delete artShoulders;
|
||||||
delete artSpellBook;
|
delete artSpellBook;
|
||||||
delete artTorso;
|
delete artTorso;
|
||||||
|
for(int g=0; g<backpack.size(); ++g)
|
||||||
|
{
|
||||||
|
delete backpack[g];
|
||||||
|
}
|
||||||
|
backpack.clear();
|
||||||
|
|
||||||
artFeet = new CArtPlace(hero->artFeet);
|
artFeet = new CArtPlace(hero->artFeet);
|
||||||
artFeet->pos.x = 515;
|
artFeet->pos.x = 515;
|
||||||
@ -229,6 +252,14 @@ void CHeroWindow::setHero(const CGHeroInstance *hero)
|
|||||||
artTorso->pos.x = 509;
|
artTorso->pos.x = 509;
|
||||||
artTorso->pos.y = 130;
|
artTorso->pos.y = 130;
|
||||||
artTorso->pos.h = artTorso->pos.h = 44;
|
artTorso->pos.h = artTorso->pos.h = 44;
|
||||||
|
for(int s=0; s<5 && s<curHero->artifacts.size(); ++s)
|
||||||
|
{
|
||||||
|
CArtPlace * add = new CArtPlace(curHero->artifacts[(s+backpackPos) % curHero->artifacts.size() ]);
|
||||||
|
add->pos.x = 403 + 46*s;
|
||||||
|
add->pos.y = 365;
|
||||||
|
add->pos.h = add->pos.h = 44;
|
||||||
|
backpack.push_back(add);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::quit()
|
void CHeroWindow::quit()
|
||||||
@ -263,9 +294,51 @@ void CHeroWindow::quit()
|
|||||||
if(dynamic_cast<CArtPlace*>(LOCPLINT->lclickable[v]))
|
if(dynamic_cast<CArtPlace*>(LOCPLINT->lclickable[v]))
|
||||||
LOCPLINT->lclickable.erase(LOCPLINT->lclickable.begin()+v);
|
LOCPLINT->lclickable.erase(LOCPLINT->lclickable.begin()+v);
|
||||||
}
|
}
|
||||||
|
portraitArea->deactivate();
|
||||||
|
|
||||||
delete artFeet;
|
delete artFeet;
|
||||||
artFeet = 0;
|
artFeet = 0;
|
||||||
|
delete artHead;
|
||||||
|
artHead = 0;
|
||||||
|
delete artLHand;
|
||||||
|
artLHand = 0;
|
||||||
|
delete artLRing;
|
||||||
|
artLRing = 0;
|
||||||
|
delete artMach1;
|
||||||
|
artMach1 = 0;
|
||||||
|
delete artMach2;
|
||||||
|
artMach2 = 0;
|
||||||
|
delete artMach3;
|
||||||
|
artMach3 = 0;
|
||||||
|
delete artMach4;
|
||||||
|
artMach4 = 0;
|
||||||
|
delete artMisc1;
|
||||||
|
artMisc1 = 0;
|
||||||
|
delete artMisc2;
|
||||||
|
artMisc2 = 0;
|
||||||
|
delete artMisc3;
|
||||||
|
artMisc3 = 0;
|
||||||
|
delete artMisc4;
|
||||||
|
artMisc4 = 0;
|
||||||
|
delete artMisc5;
|
||||||
|
artMisc5 = 0;
|
||||||
|
delete artNeck;
|
||||||
|
artNeck = 0;
|
||||||
|
delete artRhand;
|
||||||
|
artRhand = 0;
|
||||||
|
delete artRRing;
|
||||||
|
artRRing = 0;
|
||||||
|
delete artShoulders;
|
||||||
|
artShoulders = 0;
|
||||||
|
delete artSpellBook;
|
||||||
|
artSpellBook = 0;
|
||||||
|
delete artTorso;
|
||||||
|
artTorso = 0;
|
||||||
|
for(int g=0; g<backpack.size(); ++g)
|
||||||
|
{
|
||||||
|
delete backpack[g];
|
||||||
|
}
|
||||||
|
backpack.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::activate()
|
void CHeroWindow::activate()
|
||||||
@ -279,6 +352,7 @@ void CHeroWindow::activate()
|
|||||||
gar4button->activate();
|
gar4button->activate();
|
||||||
leftArtRoll->activate();
|
leftArtRoll->activate();
|
||||||
rightArtRoll->activate();
|
rightArtRoll->activate();
|
||||||
|
portraitArea->activate();
|
||||||
for(int g=0; g<heroList.size(); ++g)
|
for(int g=0; g<heroList.size(); ++g)
|
||||||
{
|
{
|
||||||
heroList[g]->activate();
|
heroList[g]->activate();
|
||||||
@ -313,10 +387,28 @@ void CHeroWindow::gar4()
|
|||||||
|
|
||||||
void CHeroWindow::leftArtRoller()
|
void CHeroWindow::leftArtRoller()
|
||||||
{
|
{
|
||||||
|
if(curHero->artifacts.size()>5) //if it is <=5, we have nothing to scroll
|
||||||
|
{
|
||||||
|
backpackPos+=curHero->artifacts.size()-1; //set new offset
|
||||||
|
|
||||||
|
for(int s=0; s<5 && s<curHero->artifacts.size(); ++s) //set new data
|
||||||
|
{
|
||||||
|
backpack[s]->ourArt = curHero->artifacts[(s+backpackPos) % curHero->artifacts.size() ];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::rightArtRoller()
|
void CHeroWindow::rightArtRoller()
|
||||||
{
|
{
|
||||||
|
if(curHero->artifacts.size()>5) //if it is <=5, we have nothing to scroll
|
||||||
|
{
|
||||||
|
backpackPos+=1; //set new offset
|
||||||
|
|
||||||
|
for(int s=0; s<5 && s<curHero->artifacts.size(); ++s) //set new data
|
||||||
|
{
|
||||||
|
backpack[s]->ourArt = curHero->artifacts[(s+backpackPos) % curHero->artifacts.size() ];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::switchHero()
|
void CHeroWindow::switchHero()
|
||||||
@ -509,3 +601,19 @@ void CArtPlace::show(SDL_Surface *to)
|
|||||||
blitAt(CGI->arth->artDefs->ourImages[ourArt->id].bitmap, pos.x, pos.y, to);
|
blitAt(CGI->arth->artDefs->ourImages[ourArt->id].bitmap, pos.x, pos.y, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LClickableArea::activate()
|
||||||
|
{
|
||||||
|
ClickableL::activate();
|
||||||
|
}
|
||||||
|
void LClickableArea::deactivate()
|
||||||
|
{
|
||||||
|
ClickableL::deactivate();
|
||||||
|
}
|
||||||
|
void LClickableArea::clickLeft(boost::logic::tribool down)
|
||||||
|
{
|
||||||
|
if(!down)
|
||||||
|
{
|
||||||
|
LOCPLINT->showInfoDialog("TEST TEST AAA", std::vector<SComponent*>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -8,6 +8,14 @@ class CGHeroInstance;
|
|||||||
class CDefHandler;
|
class CDefHandler;
|
||||||
class CArtifact;
|
class CArtifact;
|
||||||
|
|
||||||
|
class LClickableArea: public ClickableL
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void clickLeft (tribool down);
|
||||||
|
virtual void activate();
|
||||||
|
virtual void deactivate();
|
||||||
|
};
|
||||||
|
|
||||||
class CArtPlace: public ClickableL, public IShowable
|
class CArtPlace: public ClickableL, public IShowable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -39,6 +47,10 @@ class CHeroWindow: public IShowable, public virtual CIntObject
|
|||||||
* artFeet, * artSpellBook, * artMach1, * artMach2, * artMach3,
|
* artFeet, * artSpellBook, * artMach1, * artMach2, * artMach3,
|
||||||
* artMach4, * artMisc1, * artMisc2, * artMisc3, * artMisc4,
|
* artMach4, * artMisc1, * artMisc2, * artMisc3, * artMisc4,
|
||||||
* artMisc5, * artTorso, * artNeck, * artShoulders; //heroes' artifacts
|
* artMisc5, * artTorso, * artNeck, * artShoulders; //heroes' artifacts
|
||||||
|
std::vector<CArtPlace *> backpack; //hero's visible backpack (only 5 elements!)
|
||||||
|
int backpackPos; //unmber of first art visible in backpack (in hero's vector)
|
||||||
|
//clickable areas
|
||||||
|
LClickableArea * portraitArea;
|
||||||
public:
|
public:
|
||||||
CHeroWindow(int playerColor); //c-tor
|
CHeroWindow(int playerColor); //c-tor
|
||||||
~CHeroWindow(); //d-tor
|
~CHeroWindow(); //d-tor
|
||||||
|
@ -829,11 +829,12 @@ void CAmbarCendamo::deh3m()
|
|||||||
//misc5 art //17
|
//misc5 art //17
|
||||||
if(map.version>=SoD)
|
if(map.version>=SoD)
|
||||||
{
|
{
|
||||||
id = readNormalNr(i, artidlen); i+=artidlen;
|
i+=2;
|
||||||
|
/*id = readNormalNr(i, artidlen); i+=artidlen;
|
||||||
if(id!=artmask)
|
if(id!=artmask)
|
||||||
spec->artMisc5 = &(CGameInfo::mainObj->arth->artifacts[id]);
|
spec->artMisc5 = &(CGameInfo::mainObj->arth->artifacts[id]);
|
||||||
else
|
else
|
||||||
spec->artMisc5 = NULL;
|
spec->artMisc5 = NULL;*/
|
||||||
}
|
}
|
||||||
//spellbook
|
//spellbook
|
||||||
id = readNormalNr(i, artidlen); i+=artidlen;
|
id = readNormalNr(i, artidlen); i+=artidlen;
|
||||||
@ -841,9 +842,15 @@ void CAmbarCendamo::deh3m()
|
|||||||
spec->artSpellBook = &(CGameInfo::mainObj->arth->artifacts[id]);
|
spec->artSpellBook = &(CGameInfo::mainObj->arth->artifacts[id]);
|
||||||
else
|
else
|
||||||
spec->artSpellBook = NULL;
|
spec->artSpellBook = NULL;
|
||||||
//19 //???what is that? gap in file or what?
|
//19 //???what is that? gap in file or what? - it's probably fifth slot..
|
||||||
if(map.version>RoE)
|
if(map.version>RoE)
|
||||||
i+=2;
|
{
|
||||||
|
id = readNormalNr(i, artidlen); i+=artidlen;
|
||||||
|
if(id!=artmask)
|
||||||
|
spec->artMisc5 = &(CGameInfo::mainObj->arth->artifacts[id]);
|
||||||
|
else
|
||||||
|
spec->artMisc5 = NULL;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
i+=1;
|
i+=1;
|
||||||
//bag artifacts //20
|
//bag artifacts //20
|
||||||
|
Loading…
Reference in New Issue
Block a user