1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

A little threading and minor changes.

This commit is contained in:
Michał W. Urbańczyk 2008-06-16 10:51:14 +00:00
parent 300d540663
commit d5b0bdcf9e
10 changed files with 263 additions and 408 deletions

50
CMT.cpp
View File

@ -48,6 +48,7 @@
#include "CAdvmapInterface.h" #include "CAdvmapInterface.h"
#include "CCastleInterface.h" #include "CCastleInterface.h"
#include "client\Graphics.h" #include "client\Graphics.h"
#include <boost/lambda/lambda.hpp>
#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
# include <fcntl.h> # include <fcntl.h>
# include <io.h> # include <io.h>
@ -324,57 +325,43 @@ void initGameState(Mapa * map, CGameInfo * cgi)
int _tmain(int argc, _TCHAR* argv[]) int _tmain(int argc, _TCHAR* argv[])
{ {
//std::ios_base::sync_with_stdio(0); srand ( time(NULL) );
CPG=NULL;
atexit(SDL_Quit);
CGameInfo * cgi = CGI = new CGameInfo; //contains all global informations about game (texts, lodHandlers, map handler itp.)
//CLuaHandler luatest; //CLuaHandler luatest;
//luatest.test(); //luatest.test();
//CBIKHandler cb; //CBIKHandler cb;
//cb.open("CSECRET.BIK"); //cb.open("CSECRET.BIK");
std::cout << "Starting... " << std::endl;
THC timeHandler tmh, total, pomtime; THC timeHandler tmh, total, pomtime;
int xx=0, yy=0, zz=0;
srand ( time(NULL) );
std::vector<SDL_Surface*> Sprites;
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_AUDIO/*|SDL_INIT_EVENTTHREAD*/)==0) if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_AUDIO/*|SDL_INIT_EVENTTHREAD*/)==0)
{ {
screen = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE|SDL_DOUBLEBUF/*|SDL_FULLSCREEN*/); screen = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE|SDL_DOUBLEBUF/*|SDL_FULLSCREEN*/); //initializing important global surface
THC std::cout<<"\tInitializing screen: "<<pomtime.getDif()<<std::endl;
//initializing important global surface SDL_WM_SetCaption(NAME,""); //set window title
#if SDL_BYTEORDER == SDL_BIG_ENDIAN #if SDL_BYTEORDER == SDL_BIG_ENDIAN
int rmask = 0xff000000; int rmask = 0xff000000;int gmask = 0x00ff0000;int bmask = 0x0000ff00;int amask = 0x000000ff;
int gmask = 0x00ff0000;
int bmask = 0x0000ff00;
int amask = 0x000000ff;
#else #else
int rmask = 0x000000ff; int rmask = 0x000000ff; int gmask = 0x0000ff00; int bmask = 0x00ff0000; int amask = 0xff000000;
int gmask = 0x0000ff00;
int bmask = 0x00ff0000;
int amask = 0xff000000;
#endif #endif
CSDL_Ext::std32bppSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 1, 1, 32, rmask, gmask, bmask, amask); CSDL_Ext::std32bppSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 1, 1, 32, rmask, gmask, bmask, amask);
THC std::cout<<"\tInitializing minors: "<<pomtime.getDif()<<std::endl;
CPG=NULL;
TTF_Init(); TTF_Init();
atexit(TTF_Quit);
atexit(SDL_Quit);
TNRB16 = TTF_OpenFont("Fonts\\tnrb.ttf",16); TNRB16 = TTF_OpenFont("Fonts\\tnrb.ttf",16);
GEOR13 = TTF_OpenFont("Fonts\\georgia.ttf",13); GEOR13 = TTF_OpenFont("Fonts\\georgia.ttf",13);
GEOR16 = TTF_OpenFont("Fonts\\georgia.ttf",16); GEOR16 = TTF_OpenFont("Fonts\\georgia.ttf",16);
GEORXX = TTF_OpenFont("Fonts\\tnrb.ttf",22); GEORXX = TTF_OpenFont("Fonts\\tnrb.ttf",22);
GEORM = TTF_OpenFont("Fonts\\georgia.ttf",10); GEORM = TTF_OpenFont("Fonts\\georgia.ttf",10);
atexit(TTF_Quit);
THC std::cout<<"\tInitializing fonts: "<<pomtime.getDif()<<std::endl;
CMusicHandler * mush = new CMusicHandler; //initializing audio CMusicHandler * mush = new CMusicHandler; //initializing audio
mush->initMusics(); mush->initMusics();
//audio initialized //audio initialized
//screen2 = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE|SDL_DOUBLEBUF/*|SDL_FULLSCREEN*/);
//screen = SDL_ConvertSurface(screen2, screen2->format, SDL_SWSURFACE);
SDL_WM_SetCaption(NAME,""); //set window title
CGameInfo * cgi = CGI = new CGameInfo; //contains all global informations about game (texts, lodHandlers, map handler itp.)
cgi->consoleh = new CConsoleHandler; cgi->consoleh = new CConsoleHandler;
cgi->mush = mush; cgi->mush = mush;
cgi->curh = new CCursorHandler; cgi->curh = new CCursorHandler;
THC std::cout<<"\tInitializing sound and cursor: "<<pomtime.getDif()<<std::endl;
THC std::cout<<"Initializing screen, fonts and sound handling: "<<tmh.getDif()<<std::endl; THC std::cout<<"Initializing screen, fonts and sound handling: "<<tmh.getDif()<<std::endl;
CDefHandler::Spriteh = cgi->spriteh = new CLodHandler(); CDefHandler::Spriteh = cgi->spriteh = new CLodHandler();
cgi->spriteh->init("Data\\H3sprite.lod","Sprites"); cgi->spriteh->init("Data\\H3sprite.lod","Sprites");
@ -403,7 +390,14 @@ int _tmain(int argc, _TCHAR* argv[])
cgi->heroh = heroh; cgi->heroh = heroh;
THC std::cout<<"\tHero handler: "<<pomtime.getDif()<<std::endl; THC std::cout<<"\tHero handler: "<<pomtime.getDif()<<std::endl;
THC std::cout<<"Preparing first handlers: "<<tmh.getDif()<<std::endl; THC std::cout<<"Preparing first handlers: "<<tmh.getDif()<<std::endl;
pomtime.getDif();
graphics = new Graphics(); graphics = new Graphics();
THC std::cout<<"\tMain graphics: "<<tmh.getDif()<<std::endl;
std::vector<CDefHandler **> animacje;
for(std::vector<CHeroClass *>::iterator i = cgi->heroh->heroClasses.begin();i!=cgi->heroh->heroClasses.end();i++)
animacje.push_back(&((*i)->*(&CHeroClass::moveAnim)));
graphics->loadHeroAnim(animacje);
THC std::cout<<"\tHero animations: "<<tmh.getDif()<<std::endl;
THC std::cout<<"Initializing game graphics: "<<tmh.getDif()<<std::endl; THC std::cout<<"Initializing game graphics: "<<tmh.getDif()<<std::endl;
//colors initialization //colors initialization

Binary file not shown.

View File

@ -203,6 +203,7 @@ public:
void moveByOne(bool up); void moveByOne(bool up);
void printSelectedInfo(); void printSelectedInfo();
void printFlags(); void printFlags();
void processMaps(std::vector<std::string> &pliczkiTemp, int &index);
MapSel(); MapSel();
~MapSel(); ~MapSel();
}; };

View File

@ -2,7 +2,13 @@
#include "Graphics.h" #include "Graphics.h"
#include "../hch/CDefHandler.h" #include "../hch/CDefHandler.h"
#include "../hch/CObjectHandler.h" #include "../hch/CObjectHandler.h"
//#include "../hch/CHeroHandler.h"
#include "../SDL_Extensions.h" #include "../SDL_Extensions.h"
#include <boost/assign/std/vector.hpp>
#include <sstream>
#include <iomanip>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
using namespace CSDL_Ext; using namespace CSDL_Ext;
Graphics * graphics = NULL; Graphics * graphics = NULL;
SDL_Surface * Graphics::drawPrimarySkill(const CGHeroInstance *curh, SDL_Surface *ret, int from, int to) SDL_Surface * Graphics::drawPrimarySkill(const CGHeroInstance *curh, SDL_Surface *ret, int from, int to)
@ -157,329 +163,146 @@ Graphics::Graphics()
smallIcons = CDefHandler::giveDef("ITPA.DEF"); smallIcons = CDefHandler::giveDef("ITPA.DEF");
resources32 = CDefHandler::giveDef("RESOURCE.DEF"); resources32 = CDefHandler::giveDef("RESOURCE.DEF");
loadHeroFlags(); loadHeroFlags();
//std::stringstream nm;
//nm<<"AH";
//nm<<std::setw(2);
//nm<<std::setfill('0');
//nm<<heroClasses.size();
//nm<<"_.DEF";
//hc->moveAnim = CDefHandler::giveDef(nm.str());
//for(int o=0; o<hc->moveAnim->ourImages.size(); ++o)
//{
// if(hc->moveAnim->ourImages[o].groupNumber==6)
// {
// for(int e=0; e<8; ++e)
// {
// Cimage nci;
// nci.bitmap = CSDL_Ext::rotate01(hc->moveAnim->ourImages[o+e].bitmap);
// nci.groupNumber = 10;
// nci.imName = std::string();
// hc->moveAnim->ourImages.push_back(nci);
// }
// o+=8;
// }
// if(hc->moveAnim->ourImages[o].groupNumber==7)
// {
// for(int e=0; e<8; ++e)
// {
// Cimage nci;
// nci.bitmap = CSDL_Ext::rotate01(hc->moveAnim->ourImages[o+e].bitmap);
// nci.groupNumber = 11;
// nci.imName = std::string();
// hc->moveAnim->ourImages.push_back(nci);
// }
// o+=8;
// }
// if(hc->moveAnim->ourImages[o].groupNumber==8)
// {
// for(int e=0; e<8; ++e)
// {
// Cimage nci;
// nci.bitmap = CSDL_Ext::rotate01(hc->moveAnim->ourImages[o+e].bitmap);
// nci.groupNumber = 12;
// nci.imName = std::string();
// hc->moveAnim->ourImages.push_back(nci);
// }
// o+=8;
// }
//}
//for(int o=0; o<hc->moveAnim->ourImages.size(); ++o)
//{
// if(hc->moveAnim->ourImages[o].groupNumber==1)
// {
// Cimage nci;
// nci.bitmap = CSDL_Ext::rotate01(hc->moveAnim->ourImages[o].bitmap);
// nci.groupNumber = 13;
// nci.imName = std::string();
// hc->moveAnim->ourImages.push_back(nci);
// //o+=1;
// }
// if(hc->moveAnim->ourImages[o].groupNumber==2)
// {
// Cimage nci;
// nci.bitmap = CSDL_Ext::rotate01(hc->moveAnim->ourImages[o].bitmap);
// nci.groupNumber = 14;
// nci.imName = std::string();
// hc->moveAnim->ourImages.push_back(nci);
// //o+=1;
// }
// if(hc->moveAnim->ourImages[o].groupNumber==3)
// {
// Cimage nci;
// nci.bitmap = CSDL_Ext::rotate01(hc->moveAnim->ourImages[o].bitmap);
// nci.groupNumber = 15;
// nci.imName = std::string();
// hc->moveAnim->ourImages.push_back(nci);
// //o+=1;
// }
//}
//for(int ff=0; ff<hc->moveAnim->ourImages.size(); ++ff)
//{
// CSDL_Ext::alphaTransform(hc->moveAnim->ourImages[ff].bitmap);
//}
//hc->moveAnim->alphaTransformed = true;
} }
void Graphics::loadHeroFlags() void Graphics::loadHeroAnim(std::vector<CDefHandler **> & anims)
{ {
flags1.push_back(CDefHandler::giveDef("ABF01L.DEF")); //red for(int i=0; i<anims.size();i++)
flags1.push_back(CDefHandler::giveDef("ABF01G.DEF")); //blue {
flags1.push_back(CDefHandler::giveDef("ABF01R.DEF")); //tan std::stringstream nm;
flags1.push_back(CDefHandler::giveDef("ABF01D.DEF")); //green nm<<"AH";
flags1.push_back(CDefHandler::giveDef("ABF01B.DEF")); //orange nm<<std::setw(2);
flags1.push_back(CDefHandler::giveDef("ABF01P.DEF")); //purple nm<<std::setfill('0');
flags1.push_back(CDefHandler::giveDef("ABF01W.DEF")); //teal nm<<i;
flags1.push_back(CDefHandler::giveDef("ABF01K.DEF")); //pink nm<<"_.DEF";
std::string name = nm.str();
(*anims[i]) = CDefHandler::giveDef(name);
//(CDefHandler*)(((void*)hc)+((void*)moveAnim)) = CDefHandler::giveDef(name);
for(int o=0; o<(*anims[i])->ourImages.size(); ++o)
{
if((*anims[i])->ourImages[o].groupNumber==6)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap);
nci.groupNumber = 10;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
}
o+=8;
}
if((*anims[i])->ourImages[o].groupNumber==7)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap);
nci.groupNumber = 11;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
}
o+=8;
}
if((*anims[i])->ourImages[o].groupNumber==8)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap);
nci.groupNumber = 12;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
}
o+=8;
}
}
for(int o=0; o<(*anims[i])->ourImages.size(); ++o)
{
if((*anims[i])->ourImages[o].groupNumber==1)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o].bitmap);
nci.groupNumber = 13;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
//o+=1;
}
if((*anims[i])->ourImages[o].groupNumber==2)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o].bitmap);
nci.groupNumber = 14;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
//o+=1;
}
if((*anims[i])->ourImages[o].groupNumber==3)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o].bitmap);
nci.groupNumber = 15;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
//o+=1;
}
}
for(int ff=0; ff<(*anims[i])->ourImages.size(); ++ff)
{
CSDL_Ext::alphaTransform((*anims[i])->ourImages[ff].bitmap);
}
(*anims[i])->alphaTransformed = true;
}
}
void Graphics::loadHeroFlags(std::pair<std::vector<CDefHandler *> Graphics::*, std::vector<const char *> > &pr, bool mode)
{
for(int i=0;i<8;i++)
(this->*pr.first).push_back(CDefHandler::giveDef(pr.second[i]));
for(int q=0; q<8; ++q) for(int q=0; q<8; ++q)
{ {
for(int o=0; o<flags1[q]->ourImages.size(); ++o) for(int o=0; o<(this->*pr.first)[q]->ourImages.size(); ++o)
{ {
if(flags1[q]->ourImages[o].groupNumber==6) if((this->*pr.first)[q]->ourImages[o].groupNumber==6)
{ {
for(int e=0; e<8; ++e) for(int e=0; e<8; ++e)
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap);
nci.groupNumber = 10; nci.groupNumber = 10;
nci.imName = std::string(); nci.imName = std::string();
flags1[q]->ourImages.push_back(nci); (this->*pr.first)[q]->ourImages.push_back(nci);
} }
o+=8; o+=8;
} }
if(flags1[q]->ourImages[o].groupNumber==7) if((this->*pr.first)[q]->ourImages[o].groupNumber==7)
{ {
for(int e=0; e<8; ++e) for(int e=0; e<8; ++e)
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap);
nci.groupNumber = 11; nci.groupNumber = 11;
nci.imName = std::string(); nci.imName = std::string();
flags1[q]->ourImages.push_back(nci); (this->*pr.first)[q]->ourImages.push_back(nci);
} }
o+=8; o+=8;
} }
if(flags1[q]->ourImages[o].groupNumber==8) if((this->*pr.first)[q]->ourImages[o].groupNumber==8)
{ {
for(int e=0; e<8; ++e) for(int e=0; e<8; ++e)
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap);
nci.groupNumber = 12; nci.groupNumber = 12;
nci.imName = std::string(); nci.imName = std::string();
flags1[q]->ourImages.push_back(nci); (this->*pr.first)[q]->ourImages.push_back(nci);
} }
o+=8; o+=8;
} }
} }
if (mode)
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) for(int o=0; o<flags4[q]->ourImages.size(); ++o)
{ {
if(flags4[q]->ourImages[o].groupNumber==1) if(flags4[q]->ourImages[o].groupNumber==1)
@ -488,7 +311,6 @@ void Graphics::loadHeroFlags()
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
nci.groupNumber = 10;
nci.groupNumber = 13; nci.groupNumber = 13;
nci.imName = std::string(); nci.imName = std::string();
flags4[q]->ourImages.push_back(nci); flags4[q]->ourImages.push_back(nci);
@ -501,7 +323,6 @@ void Graphics::loadHeroFlags()
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
nci.groupNumber = 10;
nci.groupNumber = 14; nci.groupNumber = 14;
nci.imName = std::string(); nci.imName = std::string();
flags4[q]->ourImages.push_back(nci); flags4[q]->ourImages.push_back(nci);
@ -514,7 +335,6 @@ void Graphics::loadHeroFlags()
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
nci.groupNumber = 10;
nci.groupNumber = 15; nci.groupNumber = 15;
nci.imName = std::string(); nci.imName = std::string();
flags4[q]->ourImages.push_back(nci); flags4[q]->ourImages.push_back(nci);
@ -522,16 +342,43 @@ void Graphics::loadHeroFlags()
o+=8; o+=8;
} }
} }
}
for(int ff=0; ff<flags4[q]->ourImages.size(); ++ff) for(int ff=0; ff<(this->*pr.first)[q]->ourImages.size(); ++ff)
{ {
SDL_SetColorKey(flags4[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY, SDL_SetColorKey((this->*pr.first)[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
SDL_MapRGB(flags4[q]->ourImages[ff].bitmap->format, 0, 255, 255) SDL_MapRGB((this->*pr.first)[q]->ourImages[ff].bitmap->format, 0, 255, 255)
); );
} }
flags4[q]->alphaTransformed = true; (this->*pr.first)[q]->alphaTransformed = true;
} }
} }
void Graphics::loadHeroFlags()
{
using namespace boost::assign;
timeHandler th;
std::vector<CDefHandler *> Graphics::*point;
std::pair<std::vector<CDefHandler *> Graphics::*, std::vector<const char *> > pr[4];
pr[0].first = &Graphics::flags1;
pr[0].second+=("ABF01L.DEF"),("ABF01G.DEF"),("ABF01R.DEF"),("ABF01D.DEF"),("ABF01B.DEF"),
("ABF01P.DEF"),("ABF01W.DEF"),("ABF01K.DEF");
pr[1].first = &Graphics::flags2;
pr[1].second+=("ABF02L.DEF"),("ABF02G.DEF"),("ABF02R.DEF"),("ABF02D.DEF"),("ABF02B.DEF"),
("ABF02P.DEF"),("ABF02W.DEF"),("ABF02K.DEF");
pr[2].first = &Graphics::flags3;
pr[2].second+=("ABF03L.DEF"),("ABF03G.DEF"),("ABF03R.DEF"),("ABF03D.DEF"),("ABF03B.DEF"),
("ABF03P.DEF"),("ABF03W.DEF"),("ABF03K.DEF");
pr[3].first = &Graphics::flags4;
pr[3].second+=("AF00.DEF"),("AF01.DEF"),("AF02.DEF"),("AF03.DEF"),("AF04.DEF"),
("AF05.DEF"),("AF06.DEF"),("AF07.DEF");
boost::thread_group grupa;
grupa.create_thread(boost::bind(&Graphics::loadHeroFlags,this,boost::ref(pr[3]),true));
grupa.create_thread(boost::bind(&Graphics::loadHeroFlags,this,boost::ref(pr[2]),false));
grupa.create_thread(boost::bind(&Graphics::loadHeroFlags,this,boost::ref(pr[1]),false));
grupa.create_thread(boost::bind(&Graphics::loadHeroFlags,this,boost::ref(pr[0]),false));
grupa.join_all();
std::cout << "Flagi: "<<th.getDif()<<std::endl;
}
SDL_Surface * Graphics::getPic(int ID, bool fort, bool builded) SDL_Surface * Graphics::getPic(int ID, bool fort, bool builded)
{ {
if (ID==-1) if (ID==-1)

View File

@ -5,6 +5,7 @@ struct SDL_Surface;
class CGHeroInstance; class CGHeroInstance;
class CGTownInstance; class CGTownInstance;
class CDefHandler; class CDefHandler;
class CHeroClass;
class Graphics class Graphics
{ {
public: public:
@ -31,6 +32,8 @@ public:
//functions //functions
Graphics(); Graphics();
void loadHeroFlags(); void loadHeroFlags();
void loadHeroFlags(std::pair<std::vector<CDefHandler *> Graphics::*, std::vector<const char *> > &pr, bool mode);
void loadHeroAnim(std::vector<CDefHandler **> & anims);
SDL_Surface * drawHeroInfoWin(const CGHeroInstance * curh); SDL_Surface * drawHeroInfoWin(const CGHeroInstance * curh);
SDL_Surface * drawPrimarySkill(const CGHeroInstance *curh, SDL_Surface *ret, int from=0, int to=PRIMARY_SKILLS); SDL_Surface * drawPrimarySkill(const CGHeroInstance *curh, SDL_Surface *ret, int from=0, int to=PRIMARY_SKILLS);
SDL_Surface * drawTownInfoWin(const CGTownInstance * curh); SDL_Surface * drawTownInfoWin(const CGTownInstance * curh);

View File

@ -121,7 +121,7 @@
AdditionalIncludeDirectories="G:\vcmt\repa\include" AdditionalIncludeDirectories="G:\vcmt\repa\include"
StringPooling="true" StringPooling="true"
BasicRuntimeChecks="0" BasicRuntimeChecks="0"
RuntimeLibrary="3" RuntimeLibrary="2"
EnableFunctionLevelLinking="false" EnableFunctionLevelLinking="false"
WarningLevel="3" WarningLevel="3"
DebugInformationFormat="3" DebugInformationFormat="3"

View File

@ -9,6 +9,7 @@
#include "boost/filesystem/operations.hpp" #include "boost/filesystem/operations.hpp"
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/replace.hpp> #include <boost/algorithm/string/replace.hpp>
#include <boost/thread.hpp>
DLL_EXPORT int readNormalNr (int pos, int bytCon, unsigned char * str) DLL_EXPORT int readNormalNr (int pos, int bytCon, unsigned char * str)
{ {
int ret=0; int ret=0;
@ -34,6 +35,7 @@ unsigned char * CLodHandler::giveFile(std::string defName, int * length)
return NULL; return NULL;
} }
if(length) *length = ourEntry->realSize; if(length) *length = ourEntry->realSize;
mutex->lock();
fseek(FLOD, ourEntry->offset, 0); fseek(FLOD, ourEntry->offset, 0);
unsigned char * outp; unsigned char * outp;
if (ourEntry->offset<0) //file is in the sprites/ folder; no compression if (ourEntry->offset<0) //file is in the sprites/ folder; no compression
@ -44,6 +46,7 @@ unsigned char * CLodHandler::giveFile(std::string defName, int * length)
strcat(name,(char*)ourEntry->name); strcat(name,(char*)ourEntry->name);
FILE * f = fopen(name,"rb"); FILE * f = fopen(name,"rb");
int result = fread(outp,1,ourEntry->realSize,f); int result = fread(outp,1,ourEntry->realSize,f);
mutex->unlock();
if(result<0) {std::cout<<"Error in file reading: "<<name<<std::endl;delete[] outp; return NULL;} if(result<0) {std::cout<<"Error in file reading: "<<name<<std::endl;delete[] outp; return NULL;}
else else
return outp; return outp;
@ -52,13 +55,14 @@ unsigned char * CLodHandler::giveFile(std::string defName, int * length)
{ {
outp = new unsigned char[ourEntry->realSize]; outp = new unsigned char[ourEntry->realSize];
fread((char*)outp, 1, ourEntry->realSize, FLOD); fread((char*)outp, 1, ourEntry->realSize, FLOD);
mutex->unlock();
return outp; return outp;
} }
else //we will decompress file else //we will decompress file
{ {
outp = new unsigned char[ourEntry->size]; outp = new unsigned char[ourEntry->size];
fread((char*)outp, 1, ourEntry->size, FLOD); fread((char*)outp, 1, ourEntry->size, FLOD);
fseek(FLOD, 0, 0); mutex->unlock();
unsigned char * decomp = NULL; unsigned char * decomp = NULL;
int decRes = infs2(outp, ourEntry->size, ourEntry->realSize, decomp); int decRes = infs2(outp, ourEntry->size, ourEntry->realSize, decomp);
delete[] outp; delete[] outp;
@ -340,6 +344,7 @@ int CLodHandler::readNormalNr (unsigned char* bufor, int bytCon, bool cyclic)
void CLodHandler::init(std::string lodFile, std::string dirName) void CLodHandler::init(std::string lodFile, std::string dirName)
{ {
mutex = new boost::mutex;
std::string Ts; std::string Ts;
FLOD = fopen(lodFile.c_str(), "rb"); FLOD = fopen(lodFile.c_str(), "rb");
fseek(FLOD, 8, 0); fseek(FLOD, 8, 0);

View File

@ -9,7 +9,8 @@
struct SDL_Surface; struct SDL_Surface;
class CDefHandler; class CDefHandler;
class CDefEssential; class CDefEssential;
namespace boost
{class mutex;};
namespace NLoadHandlerHelp namespace NLoadHandlerHelp
{ {
const int dmHelp=0, dmNoExtractingMask=1; const int dmHelp=0, dmNoExtractingMask=1;
@ -44,6 +45,7 @@ public:
FILE* FLOD; FILE* FLOD;
nodrze<Entry> entries; nodrze<Entry> entries;
unsigned int totalFiles; unsigned int totalFiles;
boost::mutex *mutex;
int readNormalNr (unsigned char* bufor, int bytCon, bool cyclic=false); //lod header reading helper int readNormalNr (unsigned char* bufor, int bytCon, bool cyclic=false); //lod header reading helper
int infs(unsigned char * in, int size, int realSize, std::ofstream & out, int wBits=15); //zlib fast handler int infs(unsigned char * in, int size, int realSize, std::ofstream & out, int wBits=15); //zlib fast handler

View File

@ -326,7 +326,6 @@ CGTownInstance::CGTownInstance()
builded=-1; builded=-1;
destroyed=-1; destroyed=-1;
garrisonHero=NULL; garrisonHero=NULL;
//state->owner=-1;
town=NULL; town=NULL;
visitingHero = NULL; visitingHero = NULL;
} }
@ -335,7 +334,7 @@ CGObjectInstance::CGObjectInstance(): animPhaseShift(rand()%0xff)
{ {
//std::cout << "Tworze obiekt "<<this<<std::endl; //std::cout << "Tworze obiekt "<<this<<std::endl;
//state = new CLuaObjectScript(); //state = new CLuaObjectScript();
//state = NULL; state = NULL;
tempOwner = 254; tempOwner = 254;
blockVisit = false; blockVisit = false;
} }

View File

@ -121,7 +121,7 @@
StringPooling="true" StringPooling="true"
MinimalRebuild="false" MinimalRebuild="false"
BasicRuntimeChecks="0" BasicRuntimeChecks="0"
RuntimeLibrary="3" RuntimeLibrary="2"
EnableFunctionLevelLinking="false" EnableFunctionLevelLinking="false"
WarningLevel="3" WarningLevel="3"
DebugInformationFormat="3" DebugInformationFormat="3"
@ -367,6 +367,10 @@
Filter="h;hpp;hxx;hm;inl;inc;xsd" Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
> >
<File
RelativePath="..\hch\CArtHandler.h"
>
</File>
<File <File
RelativePath="..\hch\CCreatureHandler.h" RelativePath="..\hch\CCreatureHandler.h"
> >