#include #include #include #include #include #include #include "fmap.h" using namespace std; SDL_Texture* loadTexture(const string &filename, SDL_Renderer *ren) { SDL_Texture *texture = IMG_LoadTexture(ren, filename.c_str()); if (texture == nullptr) { throw runtime_error("Failed to load image : " + filename + IMG_GetError()); } return texture; } void chargerMapTileset(ifstream &file, Map* m, SDL_Renderer *ren) { string ligne; file >> ligne; // #tileset file >> ligne; // nom du fichier m->tileset = loadTexture(ligne, ren); file >> m->nbtilesX >> m->nbtilesY; int widthTileset; int heightTileset; SDL_QueryTexture(m->tileset, NULL, NULL, &widthTileset, &heightTileset); m->LARGEUR_TILE = widthTileset/m->nbtilesX; m->HAUTEUR_TILE = heightTileset/m->nbtilesY; string nameTile; string typeTile; // Initialisation des coordonnées des tiles dans la texture du tileset (sources) for(int j = 0, numtile = 0; j < m->nbtilesY; j++) { for(int i = 0; i < m->nbtilesX; i++, numtile++) { m->props.push_back(TileProp()); m->props[numtile].R.w = m->LARGEUR_TILE; m->props[numtile].R.h = m->HAUTEUR_TILE; m->props[numtile].R.x = i*m->LARGEUR_TILE; m->props[numtile].R.y = j*m->HAUTEUR_TILE; file >> nameTile >> typeTile; m->props[numtile].mur = 0; if (typeTile == "mur") m->props[numtile].mur = 1; } } } void chargerMapLevel(ifstream &file, Map* m) { string levelTxt; file >> levelTxt; // #level file >> m->nbtiles_largeur_monde >> m->nbtiles_hauteur_monde; vector v(m->nbtiles_largeur_monde, 0); for(int y = 0; y < m->nbtiles_hauteur_monde; y++) { m->schema.push_back(v); for(int x = 0; x < m->nbtiles_largeur_monde; x++) { int tmp; file >> tmp; if (tmp >= m->nbtilesX * m->nbtilesY) { cout << "level tile hors limite" << endl; SDL_Quit(); system("pause"); exit(-1); } m->schema[y][x] = tmp; } } } Map* chargerMap(string level, SDL_Renderer *ren) { ifstream file(level.c_str(), ios::in); Map* m; if (! file) { cout << "fichier " << level << " introuvable !!" << endl; SDL_Quit(); system("pause"); exit(-1); } m = new Map(); chargerMapTileset(file, m, ren); chargerMapLevel(file, m); file.close(); return m; } int afficherMap(Map* m, SDL_Renderer *pRenderer) { SDL_Rect Rect_dest; Rect_dest.w = m->LARGEUR_TILE; Rect_dest.h = m->HAUTEUR_TILE; int numero_tile; for(int y = 0; y < m->nbtiles_hauteur_monde; y++) { for(int x = 0; x < m->nbtiles_largeur_monde; x++) { Rect_dest.x = x*m->LARGEUR_TILE; Rect_dest.y = y*m->HAUTEUR_TILE; numero_tile = m->schema[y][x]; SDL_RenderCopy(pRenderer, m->tileset, &(m->props[numero_tile].R), &Rect_dest); } } return 0; }