| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- #include "../stdafx.h"
- #include "Graphics.h"
- #include "../hch/CDefHandler.h"
- #include "../hch/CObjectHandler.h"
- #include "../SDL_Extensions.h"
- using namespace CSDL_Ext;
- Graphics * graphics = NULL;
- SDL_Surface * Graphics::drawPrimarySkill(const CGHeroInstance *curh, SDL_Surface *ret, int from, int to)
- {
- char * buf = new char[10];
- for (int i=from;i<to;i++)
- {
- itoa(curh->primSkills[i],buf,10);
- printAtMiddle(buf,84+28*i,68,GEOR13,zwykly,ret);
- }
- delete[] buf;
- return ret;
- }
- SDL_Surface * Graphics::drawHeroInfoWin(const CGHeroInstance * curh)
- {
- char * buf = new char[10];
- SDL_Surface * ret = SDL_DisplayFormat(hInfo);
- blueToPlayersAdv(hInfo,curh->tempOwner,1);
- SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format,0,255,255));
- printAt(curh->name,75,15,GEOR13,zwykly,ret);
- drawPrimarySkill(curh, ret);
- for (std::map<int,std::pair<CCreature*,int> >::const_iterator i=curh->army.slots.begin(); i!=curh->army.slots.end();i++)
- {
- blitAt(graphics->smallImgs[(*i).second.first->idNumber],slotsPos[(*i).first].first+1,slotsPos[(*i).first].second+1,ret);
- itoa((*i).second.second,buf,10);
- printAtMiddle(buf,slotsPos[(*i).first].first+17,slotsPos[(*i).first].second+39,GEORM,zwykly,ret);
- }
- blitAt(graphics->portraitLarge[curh->subID],11,12,ret);
- itoa(curh->mana,buf,10);
- printAtMiddle(buf,166,109,GEORM,zwykly,ret); //mana points
- delete[] buf;
- blitAt(morale22->ourImages[curh->getCurrentMorale()+3].bitmap,14,84,ret);
- blitAt(luck22->ourImages[curh->getCurrentLuck()+3].bitmap,14,101,ret);
- //SDL_SaveBMP(ret,"inf1.bmp");
- return ret;
- }
- SDL_Surface * Graphics::drawTownInfoWin(const CGTownInstance * curh)
- {
- char * buf = new char[10];
- blueToPlayersAdv(tInfo,curh->tempOwner,1);
- SDL_Surface * ret = SDL_DisplayFormat(tInfo);
- SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format,0,255,255));
- printAt(curh->name,75,15,GEOR13,zwykly,ret);
- int pom = curh->fortLevel() - 1; if(pom<0) pom = 3;
- blitAt(forts->ourImages[pom].bitmap,115,42,ret);
- if((pom=curh->hallLevel())>=0)
- blitAt(halls->ourImages[pom].bitmap,77,42,ret);
- itoa(curh->dailyIncome(),buf,10);
- printAtMiddle(buf,167,70,GEORM,zwykly,ret);
- for (std::map<int,std::pair<CCreature*,int> >::const_iterator i=curh->army.slots.begin(); i!=curh->army.slots.end();i++)
- {
- if(!i->second.first)
- continue;
- blitAt(graphics->smallImgs[(*i).second.first->idNumber],slotsPos[(*i).first].first+1,slotsPos[(*i).first].second+1,ret);
- itoa((*i).second.second,buf,10);
- printAtMiddle(buf,slotsPos[(*i).first].first+17,slotsPos[(*i).first].second+39,GEORM,zwykly,ret);
- }
- //blit town icon
- pom = curh->subID*2;
- if (!curh->hasFort())
- pom += F_NUMBER*2;
- if(curh->builded >= MAX_BUILDING_PER_TURN)
- pom++;
- blitAt(bigTownPic->ourImages[pom].bitmap,13,13,ret);
- delete[] buf;
- return ret;
- }
- Graphics::Graphics()
- {
- artDefs = CDefHandler::giveDef("ARTIFACT.DEF");
- hInfo = BitmapHandler::loadBitmap("HEROQVBK.bmp");
- SDL_SetColorKey(hInfo,SDL_SRCCOLORKEY,SDL_MapRGB(hInfo->format,0,255,255));
- tInfo = BitmapHandler::loadBitmap("TOWNQVBK.bmp");
- SDL_SetColorKey(tInfo,SDL_SRCCOLORKEY,SDL_MapRGB(tInfo->format,0,255,255));
- slotsPos.push_back(std::pair<int,int>(44,82));
- slotsPos.push_back(std::pair<int,int>(80,82));
- slotsPos.push_back(std::pair<int,int>(116,82));
- slotsPos.push_back(std::pair<int,int>(26,131));
- slotsPos.push_back(std::pair<int,int>(62,131));
- slotsPos.push_back(std::pair<int,int>(98,131));
- slotsPos.push_back(std::pair<int,int>(134,131));
- luck22 = CDefHandler::giveDefEss("ILCK22.DEF");
- luck30 = CDefHandler::giveDefEss("ILCK30.DEF");
- luck42 = CDefHandler::giveDefEss("ILCK42.DEF");
- luck82 = CDefHandler::giveDefEss("ILCK82.DEF");
- morale22 = CDefHandler::giveDefEss("IMRL22.DEF");
- morale30 = CDefHandler::giveDefEss("IMRL30.DEF");
- morale42 = CDefHandler::giveDefEss("IMRL42.DEF");
- morale82 = CDefHandler::giveDefEss("IMRL82.DEF");
- halls = CDefHandler::giveDefEss("ITMTLS.DEF");
- forts = CDefHandler::giveDefEss("ITMCLS.DEF");
- bigTownPic = CDefHandler::giveDefEss("ITPT.DEF");
- std::ifstream ifs;
- ifs.open("config/cr_bgs.txt");
- while(!ifs.eof())
- {
- int id;
- std::string name;
- ifs >> id >> name;
- backgrounds[id]=BitmapHandler::loadBitmap(name);
- }
- ifs.close();
- ifs.clear();
- //loading 32x32px imgs
- CDefHandler *smi = CDefHandler::giveDef("CPRSMALL.DEF");
- smi->notFreeImgs = true;
- for (int i=0; i<smi->ourImages.size(); i++)
- {
- smallImgs[i-2] = smi->ourImages[i].bitmap;
- }
- delete smi;
- smi = CDefHandler::giveDef("TWCRPORT.DEF");
- smi->notFreeImgs = true;
- for (int i=0; i<smi->ourImages.size(); i++)
- {
- bigImgs[i-2] = smi->ourImages[i].bitmap;
- }
- delete smi;
- std::ifstream of("config/portrety.txt");
- for (int j=0;j<HEROES_QUANTITY;j++)
- {
- int ID;
- of>>ID;
- std::string path;
- of>>path;
- portraitSmall.push_back(BitmapHandler::loadBitmap(path));
- //if (!heroes[ID]->portraitSmall)
- // std::cout<<"Can't read small portrait for "<<ID<<" ("<<path<<")\n";
- for(int ff=0; ff<path.size(); ++ff) //size letter is usually third one, but there are exceptions an it should fix the problem
- {
- if(path[ff]=='S')
- {
- path[ff]='L';
- break;
- }
- }
- portraitLarge.push_back(BitmapHandler::loadBitmap(path));
- //if (!heroes[ID]->portraitLarge)
- // std::cout<<"Can't read large portrait for "<<ID<<" ("<<path<<")\n";
- SDL_SetColorKey(portraitLarge[portraitLarge.size()-1],SDL_SRCCOLORKEY,SDL_MapRGB(portraitLarge[portraitLarge.size()-1]->format,0,255,255));
- }
- of.close();
- pskillsb = CDefHandler::giveDef("PSKILL.DEF");
- resources = CDefHandler::giveDef("RESOUR82.DEF");
- un44 = CDefHandler::giveDef("UN44.DEF");
- smallIcons = CDefHandler::giveDef("ITPA.DEF");
- resources32 = CDefHandler::giveDef("RESOURCE.DEF");
- loadHeroFlags();
- }
- void Graphics::loadHeroFlags()
- {
- flags1.push_back(CDefHandler::giveDef("ABF01L.DEF")); //red
- flags1.push_back(CDefHandler::giveDef("ABF01G.DEF")); //blue
- flags1.push_back(CDefHandler::giveDef("ABF01R.DEF")); //tan
- flags1.push_back(CDefHandler::giveDef("ABF01D.DEF")); //green
- flags1.push_back(CDefHandler::giveDef("ABF01B.DEF")); //orange
- flags1.push_back(CDefHandler::giveDef("ABF01P.DEF")); //purple
- flags1.push_back(CDefHandler::giveDef("ABF01W.DEF")); //teal
- flags1.push_back(CDefHandler::giveDef("ABF01K.DEF")); //pink
- for(int q=0; q<8; ++q)
- {
- for(int o=0; o<flags1[q]->ourImages.size(); ++o)
- {
- if(flags1[q]->ourImages[o].groupNumber==6)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.imName = std::string();
- flags1[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags1[q]->ourImages[o].groupNumber==7)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 11;
- nci.imName = std::string();
- flags1[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags1[q]->ourImages[o].groupNumber==8)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 12;
- nci.imName = std::string();
- flags1[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- }
- for(int ff=0; ff<flags1[q]->ourImages.size(); ++ff)
- {
- SDL_SetColorKey(flags1[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
- SDL_MapRGB(flags1[q]->ourImages[ff].bitmap->format, 0, 255, 255)
- );
- }
- flags1[q]->alphaTransformed = true;
- }
- flags2.push_back(CDefHandler::giveDef("ABF02L.DEF")); //red
- flags2.push_back(CDefHandler::giveDef("ABF02G.DEF")); //blue
- flags2.push_back(CDefHandler::giveDef("ABF02R.DEF")); //tan
- flags2.push_back(CDefHandler::giveDef("ABF02D.DEF")); //green
- flags2.push_back(CDefHandler::giveDef("ABF02B.DEF")); //orange
- flags2.push_back(CDefHandler::giveDef("ABF02P.DEF")); //purple
- flags2.push_back(CDefHandler::giveDef("ABF02W.DEF")); //teal
- flags2.push_back(CDefHandler::giveDef("ABF02K.DEF")); //pink
- for(int q=0; q<8; ++q)
- {
- for(int o=0; o<flags2[q]->ourImages.size(); ++o)
- {
- if(flags2[q]->ourImages[o].groupNumber==6)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags2[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.imName = std::string();
- flags2[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags2[q]->ourImages[o].groupNumber==7)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags2[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 11;
- nci.imName = std::string();
- flags2[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags2[q]->ourImages[o].groupNumber==8)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags2[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 12;
- nci.imName = std::string();
- flags2[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- }
- for(int ff=0; ff<flags2[q]->ourImages.size(); ++ff)
- {
- SDL_SetColorKey(flags2[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
- SDL_MapRGB(flags2[q]->ourImages[ff].bitmap->format, 0, 255, 255)
- );
- }
- flags2[q]->alphaTransformed = true;
- }
- flags3.push_back(CDefHandler::giveDef("ABF03L.DEF")); //red
- flags3.push_back(CDefHandler::giveDef("ABF03G.DEF")); //blue
- flags3.push_back(CDefHandler::giveDef("ABF03R.DEF")); //tan
- flags3.push_back(CDefHandler::giveDef("ABF03D.DEF")); //green
- flags3.push_back(CDefHandler::giveDef("ABF03B.DEF")); //orange
- flags3.push_back(CDefHandler::giveDef("ABF03P.DEF")); //purple
- flags3.push_back(CDefHandler::giveDef("ABF03W.DEF")); //teal
- flags3.push_back(CDefHandler::giveDef("ABF03K.DEF")); //pink
- for(int q=0; q<8; ++q)
- {
- for(int o=0; o<flags3[q]->ourImages.size(); ++o)
- {
- if(flags3[q]->ourImages[o].groupNumber==6)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags3[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.imName = std::string();
- flags3[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags3[q]->ourImages[o].groupNumber==7)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags3[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 11;
- nci.imName = std::string();
- flags3[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags3[q]->ourImages[o].groupNumber==8)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags3[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 12;
- nci.imName = std::string();
- flags3[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- }
- for(int ff=0; ff<flags3[q]->ourImages.size(); ++ff)
- {
- SDL_SetColorKey(flags3[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
- SDL_MapRGB(flags3[q]->ourImages[ff].bitmap->format, 0, 255, 255)
- );
- }
- flags3[q]->alphaTransformed = true;
- }
- flags4.push_back(CDefHandler::giveDef("AF00.DEF")); //red
- flags4.push_back(CDefHandler::giveDef("AF01.DEF")); //blue
- flags4.push_back(CDefHandler::giveDef("AF02.DEF")); //tan
- flags4.push_back(CDefHandler::giveDef("AF03.DEF")); //green
- flags4.push_back(CDefHandler::giveDef("AF04.DEF")); //orange
- flags4.push_back(CDefHandler::giveDef("AF05.DEF")); //purple
- flags4.push_back(CDefHandler::giveDef("AF06.DEF")); //teal
- flags4.push_back(CDefHandler::giveDef("AF07.DEF")); //pink
- for(int q=0; q<8; ++q)
- {
- for(int o=0; o<flags4[q]->ourImages.size(); ++o)
- {
- if(flags4[q]->ourImages[o].groupNumber==6)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.imName = std::string();
- flags4[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags4[q]->ourImages[o].groupNumber==7)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.groupNumber = 11;
- nci.imName = std::string();
- flags4[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags4[q]->ourImages[o].groupNumber==8)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.groupNumber = 12;
- nci.imName = std::string();
- flags4[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- }
- for(int o=0; o<flags4[q]->ourImages.size(); ++o)
- {
- if(flags4[q]->ourImages[o].groupNumber==1)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.groupNumber = 13;
- nci.imName = std::string();
- flags4[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags4[q]->ourImages[o].groupNumber==2)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.groupNumber = 14;
- nci.imName = std::string();
- flags4[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- if(flags4[q]->ourImages[o].groupNumber==3)
- {
- for(int e=0; e<8; ++e)
- {
- Cimage nci;
- nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
- nci.groupNumber = 10;
- nci.groupNumber = 15;
- nci.imName = std::string();
- flags4[q]->ourImages.push_back(nci);
- }
- o+=8;
- }
- }
- for(int ff=0; ff<flags4[q]->ourImages.size(); ++ff)
- {
- SDL_SetColorKey(flags4[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
- SDL_MapRGB(flags4[q]->ourImages[ff].bitmap->format, 0, 255, 255)
- );
- }
- flags4[q]->alphaTransformed = true;
- }
- }
- SDL_Surface * Graphics::getPic(int ID, bool fort, bool builded)
- {
- if (ID==-1)
- return smallIcons->ourImages[0].bitmap;
- else if (ID==-2)
- return smallIcons->ourImages[1].bitmap;
- else if (ID==-3)
- return smallIcons->ourImages[2+F_NUMBER*4].bitmap;
- else if (ID>F_NUMBER || ID<-3)
- throw new std::exception("Invalid ID");
- else
- {
- int pom = 3;
- if(!fort)
- pom+=F_NUMBER*2;
- pom += ID*2;
- if (!builded)
- pom--;
- return smallIcons->ourImages[pom].bitmap;
- }
- }
|