ajtgarber

Map (Utils.h)

May 5th, 2011
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.70 KB | None | 0 0
  1. #include <SDL/SDL.h>
  2. #include <SDL/SDL_image.h>
  3. #include <SDL/SDL_ttf.h>
  4. #include <iostream>
  5. #include <fstream>
  6.  
  7. #include "Map.h"
  8. #include "Tile.h"
  9.  
  10. using namespace std;
  11.  
  12. inline SDL_Surface* loadImage(char* filename) {
  13.     SDL_Surface* loadedImage = IMG_Load(filename);
  14.     SDL_Surface* optimizedImage = NULL;
  15.     if(loadedImage) {
  16.         optimizedImage = SDL_DisplayFormat(loadedImage);
  17.         SDL_FreeSurface(loadedImage);
  18.         SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB(optimizedImage->format, 255, 0, 255)); 
  19.         cout << optimizedImage << endl;
  20.     }
  21.     return optimizedImage;
  22. }
  23.  
  24. inline Map loadMap(char* filename) {
  25.     cout << "Loading map..." << endl;
  26.     ifstream stream;
  27.     stream.open(filename, ios::binary);
  28.  
  29.     int width = -1;
  30.     stream.read((char*)&width, sizeof(int));
  31.     int height = -1;
  32.     stream.read((char*)&height, sizeof(int));
  33.     int size = -1;
  34.     stream.read((char*)&size, sizeof(int));
  35.  
  36.     cout << "width: " << width << endl;
  37.     cout << "height: " << height << endl;
  38.     cout << "size: " << size << endl;
  39.    
  40.     Map map(width, height, size);
  41.    
  42.     int numSheets = -1;
  43.     stream.read((char*)&numSheets, sizeof(int));
  44.     cout << "numSheets: " << numSheets << endl;
  45.     for(int i = 0; i < numSheets; i++) {
  46.         int len = -1;
  47.         stream.read((char*)&len, sizeof(int));
  48.         cout << "len: " << len << endl;
  49.         char string[len];
  50.         stream.read(string, sizeof(char*)*len);
  51.         cout << "string: '" << string << "'" << endl;
  52.         SDL_Surface* sheet = loadImage(string);
  53.         cout << "sheet == null: " << (sheet == NULL) << endl;
  54.         map.addSheet(sheet, string);
  55.         cout << "Load: " << sheet << endl;
  56.     }
  57.  
  58.     for(int i = 0; i < width; i++) {
  59.         for(int j = 0; j < height; j++) {
  60.             int sheetNum = -1;
  61.             stream.read((char*)&sheetNum, sizeof(int));
  62.             SDL_Surface* sheet = map.getSheet(sheetNum);
  63.  
  64.             int x = i*size;
  65.             int y = j*size;
  66.             int sx = -1;
  67.             stream.read((char*)&sx, sizeof(int));
  68.             int sy = -1;
  69.             stream.read((char*)&sy, sizeof(int));
  70.             Tile tile(sheet, x, y, size, sx, sy);
  71.             map.setTile(tile, i, j);   
  72.             if(sheetNum != -1) {
  73.                 cout << "sheetNum: " << sheetNum << endl;
  74.                 cout << "sx: " << sx << endl;
  75.                 cout << "sy: " << sy << endl;
  76.                 cout << "Going to next iteration..." << endl;
  77.             }
  78.         }
  79.     }
  80.  
  81.     stream.close();
  82.     cout << "done with method" << endl;
  83.     return map;
  84. }
  85.  
  86. inline void saveMap(char* filename, Map* map) {
  87.     cout << "Saving map..." << endl;
  88.     ofstream stream;
  89.     stream.open(filename, ios::binary);
  90.    
  91.     int width = map->getWidth();
  92.     int height = map->getHeight();
  93.     int size = map->getTileSize();
  94.  
  95.     cout << "width: " << width << endl;
  96.     stream.write((char*)&width, sizeof(int));
  97.     cout << "height: " << height << endl;
  98.     stream.write((char*)&height, sizeof(int));
  99.     cout << "size: " << size << endl;
  100.     stream.write((char*)&size, sizeof(int));
  101.  
  102.     int numSheets = map->numSheets();
  103.     cout << "numSheets: " << numSheets << endl;
  104.     stream.write((char*)&numSheets, sizeof(int));
  105.     for(int i = 0; i < numSheets; i++) {
  106.         char* filePath = map->getSheetPath(i);
  107.         int filePathLen = strlen(filePath);
  108.         cout << "strlen(filePath): " << filePathLen << endl;
  109.         stream.write((char*)&filePathLen, sizeof(int));
  110.         cout << "filePath: " << filePath << endl;
  111.         stream.write(filePath, sizeof(char*)*filePathLen);
  112.     }
  113.  
  114.     for(int i = 0; i < width; i++) {
  115.         for(int j = 0; j < height; j++) {
  116.             int sheetNum = map->getSheetNum(i, j);
  117.             stream.write((char*)&sheetNum, sizeof(int));
  118.  
  119.             Tile t = map->getTile(i, j);
  120.             int sx = t.getSheetX();
  121.             int sy = t.getSheetY();
  122.             stream.write((char*)&sx, sizeof(int));
  123.             stream.write((char*)&sy, sizeof(int));
  124.  
  125.             if(sheetNum != -1) {
  126.                 cout << "sheetNum: " << sheetNum << endl;
  127.                 cout << "sx: " << sx << endl;
  128.                 cout << "sy: " << sy << endl;
  129.             }
  130.         }
  131.     }
  132.    
  133.     stream.close();
  134. }
Advertisement
Add Comment
Please, Sign In to add comment