From 315f92ef1443069f9971a4ebb8811bf058b7250b Mon Sep 17 00:00:00 2001 From: mateuszb Date: Sun, 20 Jan 2008 15:26:34 +0000 Subject: [PATCH] bugfix and speedup --- CHeroWindow.cpp | 20 +++++++--- CHeroWindow.h | 2 + hch/CLodHandler.cpp | 91 ++++++++++++++++++++------------------------- hch/CLodHandler.h | 2 +- 4 files changed, 57 insertions(+), 58 deletions(-) diff --git a/CHeroWindow.cpp b/CHeroWindow.cpp index cee02eef1..e1c6f2104 100644 --- a/CHeroWindow.cpp +++ b/CHeroWindow.cpp @@ -310,11 +310,11 @@ void CHeroWindow::quit() SDL_FreeSurface(curBack); curBack = NULL; - for(int v=0; vlclickable.size(); ++v) + /*for(int v=0; vlclickable.size(); ++v) { if(dynamic_cast(LOCPLINT->lclickable[v])) LOCPLINT->lclickable.erase(LOCPLINT->lclickable.begin()+v); - } + }*/ portraitArea->deactivate(); delete artFeet; @@ -673,17 +673,25 @@ void CHeroWindow::redrawCurBack() CSDL_Ext::printAt(manastr.str(), 212, 247, GEOR16, zwykly, curBack); } -CArtPlace::CArtPlace(CArtifact *art): ourArt(art){} +CArtPlace::CArtPlace(CArtifact *art): ourArt(art), active(false){} void CArtPlace::activate() { - ClickableL::activate(); + if(!active) + { + ClickableL::activate(); + active = true; + } } void CArtPlace::clickLeft(boost::logic::tribool down) { } void CArtPlace::deactivate() { - ClickableL::deactivate(); + if(active) + { + active = false; + ClickableL::deactivate(); + } } void CArtPlace::show(SDL_Surface *to) { @@ -694,7 +702,7 @@ void CArtPlace::show(SDL_Surface *to) } CArtPlace::~CArtPlace() { - ClickableL::deactivate(); + deactivate(); } void LClickableArea::activate() diff --git a/CHeroWindow.h b/CHeroWindow.h index 57f47823a..602981663 100644 --- a/CHeroWindow.h +++ b/CHeroWindow.h @@ -25,6 +25,8 @@ public: class CArtPlace: public ClickableL, public IShowable { +private: + bool active; public: const CArtifact * ourArt; CArtPlace(CArtifact * art); diff --git a/hch/CLodHandler.cpp b/hch/CLodHandler.cpp index bd6a52cdf..77ced1230 100644 --- a/hch/CLodHandler.cpp +++ b/hch/CLodHandler.cpp @@ -167,7 +167,6 @@ SDL_Surface * CPCXConv::getSurface() SDL_Surface * ret; BMPHeader bh; - BMPPalette pal[256]; Epcxformat format; int fSize,i,y; bool check1, check2; @@ -209,23 +208,12 @@ SDL_Surface * CPCXConv::getSurface() { it = pcxs-256*3; for (int i=0;i<256;i++) - { - pal[i].R=pcx[it++]; - pal[i].G=pcx[it++]; - pal[i].B=pcx[it++]; - pal[i].F='\0'; - } - } - if (format==PCX8B) - { - - for(int i=0; i<256; ++i) { SDL_Color tp; - tp.r = pal[i].R; - tp.g = pal[i].G; - tp.b = pal[i].B; - tp.unused = pal[i].F; + tp.r = pcx[it++]; + tp.g = pcx[it++]; + tp.b = pcx[it++]; + tp.unused = 0; *(ret->format->palette->colors+i) = tp; } for (y=bh.y;y>0;y--) @@ -283,16 +271,16 @@ SDL_Surface * CLodHandler::loadBitmap(std::string fname) { std::cout<<"File "<offset,std::ios_base::beg); + fseek(FLOD, ourEntry->offset, 0); unsigned char * outp; if (ourEntry->size==0) //file is not compressed { outp = new unsigned char[ourEntry->realSize]; - FLOD.read((char*)outp, ourEntry->realSize); + fread((char*)outp, 1, ourEntry->realSize, FLOD); CDefHandler * nh = new CDefHandler; nh->openFromMemory(outp, ourEntry->realSize, std::string((char*)ourEntry->name)); nh->alphaTransformed = false; @@ -403,8 +391,8 @@ CDefHandler * CLodHandler::giveDef(std::string defName) else //we will decompress file { outp = new unsigned char[ourEntry->size]; - FLOD.read((char*)outp, ourEntry->size); - FLOD.seekg(0, std::ios_base::beg); + fread((char*)outp, 1, ourEntry->size, FLOD); + fseek(FLOD, 0, 0); unsigned char * decomp = NULL; int decRes = infs2(outp, ourEntry->size, ourEntry->realSize, decomp); CDefHandler * nh = new CDefHandler; @@ -451,12 +439,12 @@ std::vector CLodHandler::extractManyFiles(std::vectoropenFromMemory(outp, entries[i].realSize, std::string((char*)entries[i].name)); nh->alphaTransformed = false; @@ -465,8 +453,8 @@ std::vector CLodHandler::extractManyFiles(std::vector entries; unsigned int totalFiles;