| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #include "../stdafx.h"
- #include "CSemiDefHandler.h"
- #include <fstream>
- #include "SDL_image.h"
- extern SDL_Surface * screen;
- std::string CSemiDefHandler::nameFromType (EterrainType typ)
- {
- switch(typ)
- {
- case dirt:
- {
- return std::string("DIRTTL.DEF");
- break;
- }
- case sand:
- {
- return std::string("SANDTL.DEF");
- break;
- }
- case grass:
- {
- return std::string("GRASTL.DEF");
- break;
- }
- case snow:
- {
- return std::string("SNOWTL.DEF");
- break;
- }
- case swamp:
- {
- return std::string("SWMPTL.DEF");
- break;
- }
- case rough:
- {
- return std::string("ROUGTL.DEF");
- break;
- }
- case subterranean:
- {
- return std::string("SUBBTL.DEF");
- break;
- }
- case lava:
- {
- return std::string("LAVATL.DEF");
- break;
- }
- case water:
- {
- return std::string("WATRTL.DEF");
- break;
- }
- case rock:
- {
- return std::string("ROCKTL.DEF");
- break;
- }
- }
- return std::string();
- }
- void CSemiDefHandler::openDef(std::string name, std::string lodName, int dist)
- {
- std::ifstream * is = new std::ifstream();
- is -> open((lodName+"\\"+name).c_str(),std::ios::binary);
- is->seekg(0,std::ios::end); // na koniec
- int andame = is->tellg(); // read length
- is->seekg(0,std::ios::beg); // wracamy na poczatek
- buforD = new unsigned char[andame]; // allocate memory
- is->read((char*)buforD, andame); // read map file to buffer
- defName = name;
- int gdzie = defName.find_last_of("\\");
- defName = defName.substr(gdzie+1, gdzie-defName.length());
- delete is;
- readFileList(dist);
- loadImages(lodName);
- }
- CSemiDefHandler::~CSemiDefHandler()
- {
- for (int i=0;i<ourImages.size();i++)
- SDL_FreeSurface(ourImages[i].bitmap);
- }
- void CSemiDefHandler::readFileList(int dist)
- {
- howManyImgs = buforD[788];
- int i = 800;
- for (int pom=0;pom<howManyImgs;pom++)
- {
- std::string temp;
- while (buforD[i]!=0)
- {
- temp+=buforD[i++];
- }
- i+=dist; //by³o zwiêkszenie tylko o jedno
- if (temp!="")
- {
- temp = temp.substr(0,temp.length()-4) + ".BMP";
- namesOfImgs.push_back(temp);
- }
- else pom--;
- }
- delete buforD;
- }
- void CSemiDefHandler::loadImages(std::string path)
- {
- for (int i=0; i<namesOfImgs.size(); i++)
- {
- openImg((path+"\\_"+defName+"\\"+namesOfImgs[i]).c_str());
- }
- }
- void SDL_DisplayBitmap(const char *file, SDL_Surface *ekran, int x, int y)
- {
- SDL_Surface *image;
- SDL_Rect dest;
- image = SDL_LoadBMP(file);
- if ( image == NULL )
- {
- fprintf(stderr, "Nie mo¿na wczytaæ %s: %s\n", file, SDL_GetError());
- return;
- }
- dest.x = x;
- dest.y = y;
- dest.w = image->w;
- dest.h = image->h;
- SDL_BlitSurface(image, NULL, ekran, &dest);
- SDL_UpdateRects(ekran, 1, &dest);
- SDL_FreeSurface(image);
- }
- void CSemiDefHandler::openImg(const char *name)
- {
- SDL_Surface *image;
- image=IMG_Load(name);
- //SDL_DisplayBitmap(name,image, 0,0);
- if(!image)
- {
- printf("IMG_Load: %s\n", IMG_GetError());
- return;
- // handle error
- }
- Cimage vinya;
- vinya.bitmap = image;
- SDL_SetColorKey(vinya.bitmap,SDL_SRCCOLORKEY,SDL_MapRGB(vinya.bitmap->format,0,255,255));
- vinya.imName = name;
- ourImages.push_back(vinya);
- }
|