|
|
@@ -24,6 +24,7 @@
|
|
|
#include "hch\CPreGameTextHandler.h"
|
|
|
#include "CBattleInterface.h"
|
|
|
#include "CLua.h"
|
|
|
+#include <cmath>
|
|
|
using namespace CSDL_Ext;
|
|
|
|
|
|
extern TTF_Font * GEOR16;
|
|
|
@@ -102,10 +103,30 @@ void CGarrisonSlot::hover (bool on)
|
|
|
LOCPLINT->statusbar->clear();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+const CGObjectInstance * CGarrisonSlot::getObj()
|
|
|
+{
|
|
|
+ return (!upg)?(owner->oup):(owner->odown);
|
|
|
+}
|
|
|
+
|
|
|
void CGarrisonSlot::clickRight (tribool down)
|
|
|
{
|
|
|
- //if(down && creature)
|
|
|
- //(new CCreInfoWindow(creature->idNumber,0))->activate();
|
|
|
+ StackState *pom = NULL;
|
|
|
+ if(down && creature)
|
|
|
+ {
|
|
|
+ if(getObj()->ID == 34)
|
|
|
+ {
|
|
|
+ pom = new StackState();
|
|
|
+ const CGHeroInstance *h = static_cast<const CGHeroInstance *>(getObj());
|
|
|
+ pom->attackBonus = h->primSkills[0];
|
|
|
+ pom->defenseBonus = h->primSkills[1];
|
|
|
+ pom->luck = h->getCurrentLuck();
|
|
|
+ pom->morale = h->getCurrentMorale();
|
|
|
+ }
|
|
|
+ (new CCreInfoWindow(creature->idNumber,0,pom,boost::function<void()>(),boost::function<void()>()))
|
|
|
+ ->activate();
|
|
|
+ }
|
|
|
+ delete pom;
|
|
|
}
|
|
|
void CGarrisonSlot::clickLeft(tribool down)
|
|
|
{
|
|
|
@@ -2906,20 +2927,84 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, StackState *State, boost::func
|
|
|
pos.y = screen->h/2 - bitmap->h/2;
|
|
|
pos.w = bitmap->w;
|
|
|
pos.h = bitmap->h;
|
|
|
+ blueToPlayersAdv(bitmap,LOCPLINT->playerID);
|
|
|
SDL_SetColorKey(bitmap,SDL_SRCCOLORKEY,SDL_MapRGB(bitmap->format,0,255,255));
|
|
|
anim = new CCreatureAnimation(c->animDefName);
|
|
|
anim->setType(1);
|
|
|
|
|
|
- printAtMiddle(c->namePl,149,30,GEOR13,zwykly,bitmap);
|
|
|
+ char pom[25];int hlp=0;
|
|
|
+ printAtMiddle(c->namePl,149,30,GEOR13,zwykly,bitmap); //creature name
|
|
|
|
|
|
+ //atttack
|
|
|
printAt(CGI->preth->zelp[435].first,155,48,GEOR13,zwykly,bitmap);
|
|
|
+ itoa(c->attack,pom,10);
|
|
|
+ if(State && State->attackBonus)
|
|
|
+ {
|
|
|
+ int hlp = log10f(c->attack)+2;
|
|
|
+ pom[hlp-1] = ' '; pom[hlp] = '(';
|
|
|
+ itoa(c->attack+State->attackBonus,pom+hlp+1,10);
|
|
|
+ pom[hlp+2+(int)log10f(State->attackBonus+c->attack)] = ')';
|
|
|
+ }
|
|
|
+ printTo(pom,276,61,GEOR13,zwykly,bitmap);
|
|
|
+
|
|
|
+ //defense
|
|
|
printAt(CGI->preth->zelp[436].first,155,67,GEOR13,zwykly,bitmap);
|
|
|
+ itoa(c->defence,pom,10);
|
|
|
+ if(State && State->defenseBonus)
|
|
|
+ {
|
|
|
+ int hlp = log10f(c->defence)+2;
|
|
|
+ pom[hlp-1] = ' '; pom[hlp] = '(';
|
|
|
+ itoa(c->defence+State->defenseBonus,pom+hlp+1,10);
|
|
|
+ pom[hlp+2+(int)log10f(State->defenseBonus+c->defence)] = ')';
|
|
|
+ }
|
|
|
+ printTo(pom,276,80,GEOR13,zwykly,bitmap);
|
|
|
+
|
|
|
+ //shots
|
|
|
if(c->shots)
|
|
|
- printAt(CGI->preth->zelp[437].first,155,86,GEOR13,zwykly,bitmap);
|
|
|
+ {
|
|
|
+ printAt(CGI->generaltexth->allTexts[198],155,86,GEOR13,zwykly,bitmap);
|
|
|
+ itoa(c->shots,pom,10);
|
|
|
+ printTo(pom,276,99,GEOR13,zwykly,bitmap);
|
|
|
+ }
|
|
|
+
|
|
|
+ //damage
|
|
|
printAt(CGI->generaltexth->allTexts[199],155,105,GEOR13,zwykly,bitmap);
|
|
|
+ itoa(c->damageMin,pom,10);
|
|
|
+ hlp=log10f(c->damageMin)+2;
|
|
|
+ pom[hlp-1]=' '; pom[hlp]='-'; pom[hlp+1]=' ';
|
|
|
+ itoa(c->damageMax,pom+hlp+2,10);
|
|
|
+ printTo(pom,276,118,GEOR13,zwykly,bitmap);
|
|
|
+
|
|
|
+ //health
|
|
|
printAt(CGI->preth->zelp[439].first,155,124,GEOR13,zwykly,bitmap);
|
|
|
+ itoa(c->hitPoints,pom,10);
|
|
|
+ printTo(pom,276,137,GEOR13,zwykly,bitmap);
|
|
|
+
|
|
|
+ //remaining health - TODO: show during the battles
|
|
|
//printAt(CGI->preth->zelp[440].first,155,143,GEOR13,zwykly,bitmap);
|
|
|
+
|
|
|
+ //speed
|
|
|
printAt(CGI->preth->zelp[441].first,155,162,GEOR13,zwykly,bitmap);
|
|
|
+ itoa(c->speed,pom,10);
|
|
|
+ printTo(pom,276,175,GEOR13,zwykly,bitmap);
|
|
|
+
|
|
|
+
|
|
|
+ //luck and morale
|
|
|
+ blitAt(LOCPLINT->morale42->ourImages[(State)?(State->morale+3):(3)].bitmap,24,189,bitmap);
|
|
|
+ blitAt(LOCPLINT->luck42->ourImages[(State)?(State->luck+3):(3)].bitmap,77,189,bitmap);
|
|
|
+
|
|
|
+ //print abilities text - if r-click popup
|
|
|
+ if(type)
|
|
|
+ {
|
|
|
+ if(Upg)
|
|
|
+ upgrade = new AdventureMapButton("",CGI->preth->zelp[446].second,Upg,76,237,"IVIEWCR.DEF");
|
|
|
+ if(Dsm)
|
|
|
+ dismiss = new AdventureMapButton("",CGI->preth->zelp[445].second,Upg,21,237,"IVIEWCR2.DEF");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printAtWB(c->abilityText,17,231,GEOR13,35,zwykly,bitmap);
|
|
|
+ }
|
|
|
}
|
|
|
CCreInfoWindow::~CCreInfoWindow()
|
|
|
{
|
|
|
@@ -2940,14 +3025,12 @@ void CCreInfoWindow::activate()
|
|
|
void CCreInfoWindow::close()
|
|
|
{
|
|
|
deactivate();
|
|
|
- delete this;
|
|
|
-
|
|
|
+ CCastleInterface *c = dynamic_cast<CCastleInterface*>(LOCPLINT->curint);
|
|
|
+ if(c) c->showAll();
|
|
|
if(type)
|
|
|
- {
|
|
|
LOCPLINT->curint->activate();
|
|
|
- CCastleInterface *c = dynamic_cast<CCastleInterface*>(LOCPLINT->curint);
|
|
|
- if(c) c->showAll();
|
|
|
- }
|
|
|
+ delete this;
|
|
|
+
|
|
|
}
|
|
|
void CCreInfoWindow::clickRight(boost::logic::tribool down)
|
|
|
{
|