CHeroWindow.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. #include "stdafx.h"
  2. #include "global.h"
  3. #include "CHeroWindow.h"
  4. #include "CGameInfo.h"
  5. #include "hch\CHeroHandler.h"
  6. #include "hch\CGeneralTextHandler.h"
  7. #include "SDL.h"
  8. #include "SDL_Extensions.h"
  9. #include "CAdvmapInterface.h"
  10. #include "AdventureMapButton.h"
  11. #include "CMessage.h"
  12. #include <sstream>
  13. extern SDL_Surface * screen;
  14. extern TTF_Font * GEOR16;
  15. CHeroWindow::CHeroWindow(int playerColor): artFeet(0), artHead(0), artLHand(0),
  16. artLRing(0), artMach1(0), artMach2(0), artMach3(0), artMach4(0), artMisc1(0),
  17. artMisc2(0), artMisc3(0), artMisc4(0), artMisc5(0), artNeck(0), artRhand(0),
  18. artRRing(0), artShoulders(0), artSpellBook(0), artTorso(0),
  19. backpackPos(0), player(playerColor)
  20. {
  21. background = CGI->bitmaph->loadBitmap("HEROSCR4.bmp");
  22. CSDL_Ext::blueToPlayersAdv(background, playerColor);
  23. pos.x = 65;
  24. pos.y = 8;
  25. pos.h = background->h;
  26. pos.w = background->w;
  27. curBack = NULL;
  28. curHero = NULL;
  29. quitButton = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::quit, 674, 524, "hsbtns.def", this);
  30. dismissButton = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::dismissCurrent, 519, 437, "hsbtns2.def", this);
  31. questlogButton = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::questlog, 379, 437, "hsbtns4.def", this);
  32. gar1button = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::gar1, 546, 491, "hsbtns6.def", this);
  33. gar2button = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::gar2, 604, 491, "hsbtns8.def", this);
  34. gar3button = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::gar3, 546, 527, "hsbtns7.def", this);
  35. gar4button = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::gar4, 604, 527, "hsbtns9.def", this);
  36. leftArtRoll = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::leftArtRoller, 379, 364, "hsbtns3.def", this);
  37. rightArtRoll = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::rightArtRoller, 632, 364, "hsbtns5.def", this);
  38. for(int g=0; g<8; ++g)
  39. {
  40. heroList.push_back(new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::switchHero, 677, 95+g*54, "hsbtns5.def", this));
  41. }
  42. skillpics = CGI->spriteh->giveDef("pskil42.def");
  43. flags = CGI->spriteh->giveDef("CREST58.DEF");
  44. //areas
  45. portraitArea = new LClickableArea();
  46. portraitArea->pos.x = 83;
  47. portraitArea->pos.y = 26;
  48. portraitArea->pos.w = 58;
  49. portraitArea->pos.h = 64;
  50. }
  51. CHeroWindow::~CHeroWindow()
  52. {
  53. SDL_FreeSurface(background);
  54. delete quitButton;
  55. delete dismissButton;
  56. delete questlogButton;
  57. delete gar1button;
  58. delete gar2button;
  59. delete gar3button;
  60. delete gar4button;
  61. delete leftArtRoll;
  62. delete rightArtRoll;
  63. for(int g=0; g<heroList.size(); ++g)
  64. delete heroList[g];
  65. if(curBack)
  66. SDL_FreeSurface(curBack);
  67. delete skillpics;
  68. delete flags;
  69. delete artFeet;
  70. delete artHead;
  71. delete artLHand;
  72. delete artLRing;
  73. delete artMach1;
  74. delete artMach2;
  75. delete artMach3;
  76. delete artMach4;
  77. delete artMisc1;
  78. delete artMisc2;
  79. delete artMisc3;
  80. delete artMisc4;
  81. delete artMisc5;
  82. delete artNeck;
  83. delete artRhand;
  84. delete artRRing;
  85. delete artShoulders;
  86. delete artSpellBook;
  87. delete artTorso;
  88. for(int g=0; g<backpack.size(); ++g)
  89. {
  90. delete backpack[g];
  91. }
  92. backpack.clear();
  93. delete portraitArea;
  94. }
  95. void CHeroWindow::show(SDL_Surface *to)
  96. {
  97. if(!to)
  98. to=ekran;
  99. blitAt(curBack,pos.x,pos.y,to);
  100. quitButton->show();
  101. dismissButton->show();
  102. questlogButton->show();
  103. gar1button->show();
  104. gar2button->show();
  105. gar3button->show();
  106. gar4button->show();
  107. leftArtRoll->show();
  108. rightArtRoll->show();
  109. artFeet->show(to);
  110. artHead->show(to);
  111. artLHand->show(to);
  112. artLRing->show(to);
  113. artMach1->show(to);
  114. artMach2->show(to);
  115. artMach3->show(to);
  116. artMach4->show(to);
  117. artMisc1->show(to);
  118. artMisc2->show(to);
  119. artMisc3->show(to);
  120. artMisc4->show(to);
  121. artMisc5->show(to);
  122. artNeck->show(to);
  123. artRhand->show(to);
  124. artRRing->show(to);
  125. artShoulders->show(to);
  126. artSpellBook->show(to);
  127. artTorso->show(to);
  128. for(int d=0; d<backpack.size(); ++d)
  129. {
  130. backpack[d]->show(to);
  131. }
  132. }
  133. void CHeroWindow::setHero(const CGHeroInstance *hero)
  134. {
  135. curHero = hero;
  136. delete artFeet;
  137. delete artHead;
  138. delete artLHand;
  139. delete artLRing;
  140. delete artMach1;
  141. delete artMach2;
  142. delete artMach3;
  143. delete artMach4;
  144. delete artMisc1;
  145. delete artMisc2;
  146. delete artMisc3;
  147. delete artMisc4;
  148. delete artMisc5;
  149. delete artNeck;
  150. delete artRhand;
  151. delete artRRing;
  152. delete artShoulders;
  153. delete artSpellBook;
  154. delete artTorso;
  155. for(int g=0; g<backpack.size(); ++g)
  156. {
  157. delete backpack[g];
  158. }
  159. backpack.clear();
  160. artFeet = new CArtPlace(hero->artFeet);
  161. artFeet->pos.x = 515;
  162. artFeet->pos.y = 295;
  163. artFeet->pos.h = artFeet->pos.w = 44;
  164. artHead = new CArtPlace(hero->artHead);
  165. artHead->pos.x = 509;
  166. artHead->pos.y = 30;
  167. artHead->pos.h = artHead->pos.h = 44;
  168. artLHand = new CArtPlace(hero->artLHand);
  169. artLHand->pos.x = 564;
  170. artLHand->pos.y = 183;
  171. artLHand->pos.h = artLHand->pos.h = 44;
  172. artLRing = new CArtPlace(hero->artLRing);
  173. artLRing->pos.x = 610;
  174. artLRing->pos.y = 183;
  175. artLRing->pos.h = artLRing->pos.h = 44;
  176. artMach1 = new CArtPlace(hero->artMach1);
  177. artMach1->pos.x = 564;
  178. artMach1->pos.y = 30;
  179. artMach1->pos.h = artMach1->pos.h = 44;
  180. artMach2 = new CArtPlace(hero->artMach2);
  181. artMach2->pos.x = 610;
  182. artMach2->pos.y = 30;
  183. artMach2->pos.h = artMach2->pos.h = 44;
  184. artMach3 = new CArtPlace(hero->artMach3);
  185. artMach3->pos.x = 610;
  186. artMach3->pos.y = 76;
  187. artMach3->pos.h = artMach3->pos.h = 44;
  188. artMach4 = new CArtPlace(hero->artMach4);
  189. artMach4->pos.x = 610;
  190. artMach4->pos.y = 122;
  191. artMach4->pos.h = artMach4->pos.h = 44;
  192. artMisc1 = new CArtPlace(hero->artMisc1);
  193. artMisc1->pos.x = 383;
  194. artMisc1->pos.y = 143;
  195. artMisc1->pos.h = artMisc1->pos.h = 44;
  196. artMisc2 = new CArtPlace(hero->artMisc2);
  197. artMisc2->pos.x = 399;
  198. artMisc2->pos.y = 194;
  199. artMisc2->pos.h = artMisc2->pos.h = 44;
  200. artMisc3 = new CArtPlace(hero->artMisc3);
  201. artMisc3->pos.x = 415;
  202. artMisc3->pos.y = 245;
  203. artMisc3->pos.h = artMisc3->pos.h = 44;
  204. artMisc4 = new CArtPlace(hero->artMisc4);
  205. artMisc4->pos.x = 431;
  206. artMisc4->pos.y = 296;
  207. artMisc4->pos.h = artMisc4->pos.h = 44;
  208. artMisc5 = new CArtPlace(hero->artMisc5);
  209. artMisc5->pos.x = 381;
  210. artMisc5->pos.y = 296;
  211. artMisc5->pos.h = artMisc5->pos.h = 44;
  212. artNeck = new CArtPlace(hero->artNeck);
  213. artNeck->pos.x = 508;
  214. artNeck->pos.y = 79;
  215. artNeck->pos.h = artNeck->pos.h = 44;
  216. artRhand = new CArtPlace(hero->artRhand);
  217. artRhand->pos.x = 383;
  218. artRhand->pos.y = 68;
  219. artRhand->pos.h = artRhand->pos.h = 44;
  220. artRRing = new CArtPlace(hero->artRRing);
  221. artRRing->pos.x = 431;
  222. artRRing->pos.y = 68;
  223. artRRing->pos.h = artRRing->pos.h = 44;
  224. artShoulders = new CArtPlace(hero->artShoulders);
  225. artShoulders->pos.x = 567;
  226. artShoulders->pos.y = 240;
  227. artShoulders->pos.h = artShoulders->pos.h = 44;
  228. artSpellBook = new CArtPlace(hero->artSpellBook);
  229. artSpellBook->pos.x = 610;
  230. artSpellBook->pos.y = 310;
  231. artSpellBook->pos.h = artSpellBook->pos.h = 44;
  232. artTorso = new CArtPlace(hero->artTorso);
  233. artTorso->pos.x = 509;
  234. artTorso->pos.y = 130;
  235. artTorso->pos.h = artTorso->pos.h = 44;
  236. for(int s=0; s<5 && s<curHero->artifacts.size(); ++s)
  237. {
  238. CArtPlace * add = new CArtPlace(curHero->artifacts[(s+backpackPos) % curHero->artifacts.size() ]);
  239. add->pos.x = 403 + 46*s;
  240. add->pos.y = 365;
  241. add->pos.h = add->pos.h = 44;
  242. backpack.push_back(add);
  243. }
  244. }
  245. void CHeroWindow::quit()
  246. {
  247. for(int i=0; i<LOCPLINT->objsToBlit.size(); ++i)
  248. {
  249. if( dynamic_cast<CHeroWindow*>( LOCPLINT->objsToBlit[i] ) )
  250. {
  251. LOCPLINT->objsToBlit.erase(LOCPLINT->objsToBlit.begin()+i);
  252. }
  253. }
  254. quitButton->deactivate();
  255. dismissButton->deactivate();
  256. questlogButton->deactivate();
  257. gar1button->deactivate();
  258. gar2button->deactivate();
  259. gar3button->deactivate();
  260. gar4button->deactivate();
  261. leftArtRoll->deactivate();
  262. rightArtRoll->deactivate();
  263. for(int g=0; g<heroList.size(); ++g)
  264. {
  265. heroList[g]->deactivate();
  266. }
  267. LOCPLINT->adventureInt->show();
  268. SDL_FreeSurface(curBack);
  269. curBack = NULL;
  270. for(int v=0; v<LOCPLINT->lclickable.size(); ++v)
  271. {
  272. if(dynamic_cast<CArtPlace*>(LOCPLINT->lclickable[v]))
  273. LOCPLINT->lclickable.erase(LOCPLINT->lclickable.begin()+v);
  274. }
  275. portraitArea->deactivate();
  276. delete artFeet;
  277. artFeet = 0;
  278. delete artHead;
  279. artHead = 0;
  280. delete artLHand;
  281. artLHand = 0;
  282. delete artLRing;
  283. artLRing = 0;
  284. delete artMach1;
  285. artMach1 = 0;
  286. delete artMach2;
  287. artMach2 = 0;
  288. delete artMach3;
  289. artMach3 = 0;
  290. delete artMach4;
  291. artMach4 = 0;
  292. delete artMisc1;
  293. artMisc1 = 0;
  294. delete artMisc2;
  295. artMisc2 = 0;
  296. delete artMisc3;
  297. artMisc3 = 0;
  298. delete artMisc4;
  299. artMisc4 = 0;
  300. delete artMisc5;
  301. artMisc5 = 0;
  302. delete artNeck;
  303. artNeck = 0;
  304. delete artRhand;
  305. artRhand = 0;
  306. delete artRRing;
  307. artRRing = 0;
  308. delete artShoulders;
  309. artShoulders = 0;
  310. delete artSpellBook;
  311. artSpellBook = 0;
  312. delete artTorso;
  313. artTorso = 0;
  314. for(int g=0; g<backpack.size(); ++g)
  315. {
  316. delete backpack[g];
  317. }
  318. backpack.clear();
  319. }
  320. void CHeroWindow::activate()
  321. {
  322. quitButton->activate();
  323. dismissButton->activate();
  324. questlogButton->activate();
  325. gar1button->activate();
  326. gar2button->activate();
  327. gar3button->activate();
  328. gar4button->activate();
  329. leftArtRoll->activate();
  330. rightArtRoll->activate();
  331. portraitArea->activate();
  332. for(int g=0; g<heroList.size(); ++g)
  333. {
  334. heroList[g]->activate();
  335. }
  336. redrawCurBack();
  337. //LOCPLINT->lclickable.push_back(artFeet);
  338. }
  339. void CHeroWindow::dismissCurrent()
  340. {
  341. }
  342. void CHeroWindow::questlog()
  343. {
  344. }
  345. void CHeroWindow::gar1()
  346. {
  347. }
  348. void CHeroWindow::gar2()
  349. {
  350. }
  351. void CHeroWindow::gar3()
  352. {
  353. }
  354. void CHeroWindow::gar4()
  355. {
  356. }
  357. void CHeroWindow::leftArtRoller()
  358. {
  359. if(curHero->artifacts.size()>5) //if it is <=5, we have nothing to scroll
  360. {
  361. backpackPos+=curHero->artifacts.size()-1; //set new offset
  362. for(int s=0; s<5 && s<curHero->artifacts.size(); ++s) //set new data
  363. {
  364. backpack[s]->ourArt = curHero->artifacts[(s+backpackPos) % curHero->artifacts.size() ];
  365. }
  366. }
  367. }
  368. void CHeroWindow::rightArtRoller()
  369. {
  370. if(curHero->artifacts.size()>5) //if it is <=5, we have nothing to scroll
  371. {
  372. backpackPos+=1; //set new offset
  373. for(int s=0; s<5 && s<curHero->artifacts.size(); ++s) //set new data
  374. {
  375. backpack[s]->ourArt = curHero->artifacts[(s+backpackPos) % curHero->artifacts.size() ];
  376. }
  377. }
  378. }
  379. void CHeroWindow::switchHero()
  380. {
  381. int y;
  382. SDL_GetMouseState(NULL, &y);
  383. for(int g=0; g<heroList.size(); ++g)
  384. {
  385. if(y>=94+54*g)
  386. {
  387. //quit();
  388. setHero(LOCPLINT->cb->getHeroInfo(player, g, false));
  389. //LOCPLINT->openHeroWindow(curHero);
  390. redrawCurBack();
  391. }
  392. }
  393. }
  394. void CHeroWindow::redrawCurBack()
  395. {
  396. if(curBack)
  397. SDL_FreeSurface(curBack);
  398. curBack = CSDL_Ext::copySurface(background);
  399. blitAt(skillpics->ourImages[0].bitmap, 32, 111, curBack);
  400. blitAt(skillpics->ourImages[1].bitmap, 102, 111, curBack);
  401. blitAt(skillpics->ourImages[2].bitmap, 172, 111, curBack);
  402. blitAt(skillpics->ourImages[5].bitmap, 242, 111, curBack);
  403. blitAt(skillpics->ourImages[4].bitmap, 20, 230, curBack);
  404. blitAt(skillpics->ourImages[3].bitmap, 162, 230, curBack);
  405. blitAt(curHero->type->portraitLarge, 19, 19, curBack);
  406. CSDL_Ext::printAtMiddle(curHero->name, 190, 40, GEORXX, tytulowy, curBack);
  407. std::stringstream secondLine;
  408. secondLine<<"Level "<<curHero->level<<" "<<curHero->type->heroClass->name;
  409. CSDL_Ext::printAtMiddle(secondLine.str(), 190, 66, TNRB16, zwykly, curBack);
  410. //primary skliis names
  411. CSDL_Ext::printAtMiddle(CGI->generaltexth->jktexts[1], 53, 98, GEOR13, tytulowy, curBack);
  412. CSDL_Ext::printAtMiddle(CGI->generaltexth->jktexts[2], 123, 98, GEOR13, tytulowy, curBack);
  413. CSDL_Ext::printAtMiddle(CGI->generaltexth->jktexts[3], 193, 98, GEOR13, tytulowy, curBack);
  414. CSDL_Ext::printAtMiddle(CGI->generaltexth->jktexts[4], 263, 98, GEOR13, tytulowy, curBack);
  415. //dismiss / quest log
  416. std::vector<std::string> * toPrin = CMessage::breakText(CGI->generaltexth->jktexts[8].substr(1, CGI->generaltexth->jktexts[8].size()-2));
  417. if(toPrin->size()==1)
  418. {
  419. CSDL_Ext::printAt((*toPrin)[0], 372, 440, GEOR13, zwykly, curBack);
  420. }
  421. else
  422. {
  423. CSDL_Ext::printAt((*toPrin)[0], 372, 431, GEOR13, zwykly, curBack);
  424. CSDL_Ext::printAt((*toPrin)[1], 372, 447, GEOR13, zwykly, curBack);
  425. }
  426. delete toPrin;
  427. toPrin = CMessage::breakText(CGI->generaltexth->jktexts[9].substr(1, CGI->generaltexth->jktexts[9].size()-2));
  428. if(toPrin->size()==1)
  429. {
  430. CSDL_Ext::printAt((*toPrin)[0], 512, 440, GEOR13, zwykly, curBack);
  431. }
  432. else
  433. {
  434. CSDL_Ext::printAt((*toPrin)[0], 512, 431, GEOR13, zwykly, curBack);
  435. CSDL_Ext::printAt((*toPrin)[1], 512, 447, GEOR13, zwykly, curBack);
  436. }
  437. delete toPrin;
  438. //printing primary skills' amounts
  439. std::stringstream primarySkill1;
  440. primarySkill1<<curHero->primSkills[0];
  441. CSDL_Ext::printAtMiddle(primarySkill1.str(), 53, 165, TNRB16, zwykly, curBack);
  442. std::stringstream primarySkill2;
  443. primarySkill2<<curHero->primSkills[1];
  444. CSDL_Ext::printAtMiddle(primarySkill2.str(), 123, 165, TNRB16, zwykly, curBack);
  445. std::stringstream primarySkill3;
  446. primarySkill3<<curHero->primSkills[2];
  447. CSDL_Ext::printAtMiddle(primarySkill3.str(), 193, 165, TNRB16, zwykly, curBack);
  448. std::stringstream primarySkill4;
  449. primarySkill4<<curHero->primSkills[3];
  450. CSDL_Ext::printAtMiddle(primarySkill4.str(), 263, 165, TNRB16, zwykly, curBack);
  451. blitAt(LOCPLINT->luck42->ourImages[curHero->getCurrentLuck()+3].bitmap, 239, 182, curBack);
  452. blitAt(LOCPLINT->morale42->ourImages[curHero->getCurrentMorale()+3].bitmap, 181, 182, curBack);
  453. blitAt(flags->ourImages[player].bitmap, 606, 8, curBack);
  454. //hero list blitting
  455. for(int g=0; g<LOCPLINT->cb->howManyHeroes(); ++g)
  456. {
  457. const CGHeroInstance * cur = LOCPLINT->cb->getHeroInfo(player, g, false);
  458. blitAt(cur->type->portraitSmall, 611, 87+g*54, curBack);
  459. //printing yellow border
  460. if(cur->name == curHero->name)
  461. {
  462. for(int f=0; f<cur->type->portraitSmall->w; ++f)
  463. {
  464. for(int h=0; h<cur->type->portraitSmall->h; ++h)
  465. if(f==0 || h==0 || f==cur->type->portraitSmall->w-1 || h==cur->type->portraitSmall->h-1)
  466. {
  467. CSDL_Ext::SDL_PutPixel(curBack, 611+f, 87+g*54+h, 240, 220, 120);
  468. }
  469. }
  470. }
  471. }
  472. //secondary skills
  473. if(curHero->secSkills.size()>=1)
  474. {
  475. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[0].first*3+3+curHero->secSkills[0].second].bitmap, 18, 276, curBack);
  476. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[0].second], 69, 279, GEOR13, zwykly, curBack);
  477. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[0].first]->name, 69, 299, GEOR13, zwykly, curBack);
  478. }
  479. if(curHero->secSkills.size()>=2)
  480. {
  481. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[1].first*3+3+curHero->secSkills[1].second].bitmap, 161, 276, curBack);
  482. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[1].second], 213, 279, GEOR13, zwykly, curBack);
  483. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[1].first]->name, 213, 299, GEOR13, zwykly, curBack);
  484. }
  485. if(curHero->secSkills.size()>=3)
  486. {
  487. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[2].first*3+3+curHero->secSkills[2].second].bitmap, 18, 324, curBack);
  488. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[2].second], 69, 327, GEOR13, zwykly, curBack);
  489. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[2].first]->name, 69, 347, GEOR13, zwykly, curBack);
  490. }
  491. if(curHero->secSkills.size()>=4)
  492. {
  493. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[3].first*3+3+curHero->secSkills[3].second].bitmap, 161, 324, curBack);
  494. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[3].second], 213, 327, GEOR13, zwykly, curBack);
  495. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[3].first]->name, 213, 347, GEOR13, zwykly, curBack);
  496. }
  497. if(curHero->secSkills.size()>=5)
  498. {
  499. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[4].first*3+3+curHero->secSkills[4].second].bitmap, 18, 372, curBack);
  500. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[4].second], 69, 375, GEOR13, zwykly, curBack);
  501. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[4].first]->name, 69, 395, GEOR13, zwykly, curBack);
  502. }
  503. if(curHero->secSkills.size()>=6)
  504. {
  505. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[5].first*3+3+curHero->secSkills[5].second].bitmap, 161, 372, curBack);
  506. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[5].second], 213, 375, GEOR13, zwykly, curBack);
  507. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[5].first]->name, 213, 395, GEOR13, zwykly, curBack);
  508. }
  509. if(curHero->secSkills.size()>=7)
  510. {
  511. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[6].first*3+3+curHero->secSkills[6].second].bitmap, 18, 420, curBack);
  512. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[6].second], 69, 423, GEOR13, zwykly, curBack);
  513. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[6].first]->name, 69, 443, GEOR13, zwykly, curBack);
  514. }
  515. if(curHero->secSkills.size()>=8)
  516. {
  517. blitAt(CGI->abilh->abils44->ourImages[curHero->secSkills[7].first*3+3+curHero->secSkills[7].second].bitmap, 161, 420, curBack);
  518. CSDL_Ext::printAt(CGI->abilh->levels[curHero->secSkills[7].second], 213, 423, GEOR13, zwykly, curBack);
  519. CSDL_Ext::printAt(CGI->abilh->abilities[curHero->secSkills[7].first]->name, 213, 443, GEOR13, zwykly, curBack);
  520. }
  521. //printing special ability
  522. blitAt(CGI->heroh->un44->ourImages[curHero->subID].bitmap, 18, 180, curBack);
  523. //printing necessery texts
  524. CSDL_Ext::printAt(CGI->generaltexth->jktexts[6].substr(1, CGI->generaltexth->jktexts[6].size()-2), 69, 231, GEOR13, tytulowy, curBack);
  525. std::stringstream expstr;
  526. expstr<<curHero->exp;
  527. CSDL_Ext::printAt(expstr.str(), 69, 247, GEOR16, zwykly, curBack);
  528. CSDL_Ext::printAt(CGI->generaltexth->jktexts[7].substr(1, CGI->generaltexth->jktexts[7].size()-2), 212, 231, GEOR13, tytulowy, curBack);
  529. std::stringstream manastr;
  530. manastr<<curHero->mana<<'/'<<curHero->primSkills[3]*10;
  531. CSDL_Ext::printAt(manastr.str(), 212, 247, GEOR16, zwykly, curBack);
  532. }
  533. CArtPlace::CArtPlace(CArtifact *art): ourArt(art){}
  534. void CArtPlace::activate()
  535. {
  536. }
  537. void CArtPlace::clickLeft(boost::logic::tribool down)
  538. {
  539. }
  540. void CArtPlace::deactivate()
  541. {
  542. }
  543. void CArtPlace::show(SDL_Surface *to)
  544. {
  545. if(ourArt)
  546. {
  547. blitAt(CGI->arth->artDefs->ourImages[ourArt->id].bitmap, pos.x, pos.y, to);
  548. }
  549. }
  550. void LClickableArea::activate()
  551. {
  552. ClickableL::activate();
  553. }
  554. void LClickableArea::deactivate()
  555. {
  556. ClickableL::deactivate();
  557. }
  558. void LClickableArea::clickLeft(boost::logic::tribool down)
  559. {
  560. if(!down)
  561. {
  562. LOCPLINT->showInfoDialog("TEST TEST AAA", std::vector<SComponent*>());
  563. }
  564. }