ajtgarber

Utils.h (multiple redefinition)

May 14th, 2011
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.99 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. #include <string>
  7.  
  8. #include "Map.h"
  9. #include "Tile.h"
  10.  
  11. using namespace std;
  12.  
  13. #ifndef UTILS_H
  14. #define UTILS_H
  15.  
  16. SDL_Surface* loadImage(const char* filename) {
  17.     SDL_Surface* loadedImage = IMG_Load(filename);
  18.     SDL_Surface* optimizedImage = NULL;
  19.     if(loadedImage) {
  20.         optimizedImage = SDL_DisplayFormat(loadedImage);
  21.         SDL_FreeSurface(loadedImage);
  22.         SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB(optimizedImage->format, 255, 0, 255));
  23.         cout << optimizedImage << endl;
  24.     }
  25.     return optimizedImage;
  26. }
  27.  
  28. Map* loadMap(const char* filename) {
  29.     cout << "Loading map..." << endl;
  30.     ifstream stream;
  31.     stream.open(filename, ios::binary);
  32.  
  33.     int width = -1;
  34.     stream.read((char*)&width, sizeof(int));
  35.     int height = -1;
  36.     stream.read((char*)&height, sizeof(int));
  37.     int size = -1;
  38.     stream.read((char*)&size, sizeof(int));
  39.  
  40.     cout << "width: " << width << endl;
  41.     cout << "height: " << height << endl;
  42.     cout << "size: " << size << endl;
  43.    
  44.     Map* map = new Map(width, height, size);
  45.    
  46.     int numSheets = -1;
  47.     stream.read((char*)&numSheets, sizeof(int));
  48.     cout << "numSheets: " << numSheets << endl;
  49.     for(int i = 0; i < numSheets; i++) {
  50.         int len = -1;
  51.         stream.read((char*)&len, sizeof(int));
  52.         cout << "len: " << len << endl;
  53.         char loadedString[len];
  54.         stream.read(loadedString, sizeof(char*)*len);
  55.         string path = loadedString;
  56.         cout << "string: '" << loadedString << "'" << endl;
  57.         SDL_Surface* sheet = loadImage(loadedString);
  58.         cout << "loaded sheet" << endl;
  59.         map->addSheet(sheet, path);
  60.         cout << "added sheet" << endl;
  61.         cout << "within map string: " << map->getSheetPath(map->numSheets()-1) << endl;
  62.         cout << "Load: " << sheet << endl;
  63.     }
  64.  
  65.     cout << "Loading tiles..." << endl;
  66.     for(int i = 0; i < width; i++) {
  67.         for(int j = 0; j < height; j++) {
  68.             int sheetNum = -1;
  69.             //cout << "sheetNum: " << sheetNum << endl;
  70.             stream.read((char*)&sheetNum, sizeof(int));
  71.             SDL_Surface* sheet = map->getSheet(sheetNum);
  72.  
  73.             int x = i*size;
  74.             int y = j*size;
  75.             if(sheetNum != -1) {
  76.                 cout << "load ij: " << i << ", " << j << endl;
  77.                 cout << "load x: "  << x << ", " << y << endl;
  78.             }
  79.             int sx = -1;
  80.             stream.read((char*)&sx, sizeof(int));
  81.             int sy = -1;
  82.             stream.read((char*)&sy, sizeof(int));
  83.             Tile tile(sheet, x, y, size, sx, sy);
  84.             map->setTile(0, tile, i, j);   
  85.             /*
  86.             if(sheetNum != -1) {
  87.                 cout << "sheetNum: " << sheetNum << endl;
  88.                 cout << "sx: " << sx << endl;
  89.                 cout << "sy: " << sy << endl;
  90.                 cout << "Going to next iteration..." << endl;
  91.             }*/
  92.         }
  93.     }
  94.     //load layer 2
  95.     for(int i = 0; i < width; i++) {
  96.         for(int j = 0; j < height; j++) {
  97.             int sheetNum = -1;
  98.             //cout << "sheetNum: " << sheetNum << endl;
  99.             stream.read((char*)&sheetNum, sizeof(int));
  100.             SDL_Surface* sheet = map->getSheet(sheetNum);
  101.  
  102.             int x = i*size;
  103.             int y = j*size;
  104.             if(sheetNum != -1) {
  105.                 cout << "load ij: " << i << ", " << j << endl;
  106.                 cout << "load x: "  << x << ", " << y << endl;
  107.             }
  108.             int sx = -1;
  109.             stream.read((char*)&sx, sizeof(int));
  110.             int sy = -1;
  111.             stream.read((char*)&sy, sizeof(int));
  112.             Tile tile(sheet, x, y, size, sx, sy);
  113.             map->setTile(1, tile, i, j);   
  114.             /*
  115.             if(sheetNum != -1) {
  116.                 cout << "sheetNum: " << sheetNum << endl;
  117.                 cout << "sx: " << sx << endl;
  118.                 cout << "sy: " << sy << endl;
  119.                 cout << "Going to next iteration..." << endl;
  120.             }*/
  121.         }
  122.     }
  123.  
  124.     stream.close();
  125.     cout << "done with method" << endl;
  126.     return map;
  127. }
  128.  
  129. void saveMap(const char* filename, Map* map) {
  130.     cout << "Saving map..." << endl;
  131.     ofstream stream;
  132.     stream.open(filename, ios::binary);
  133.    
  134.     int width = map->getWidth();
  135.     int height = map->getHeight();
  136.     int size = map->getTileSize();
  137.  
  138.     cout << "width: " << width << endl;
  139.     stream.write((char*)&width, sizeof(int));
  140.     cout << "height: " << height << endl;
  141.     stream.write((char*)&height, sizeof(int));
  142.     cout << "size: " << size << endl;
  143.     stream.write((char*)&size, sizeof(int));
  144.  
  145.     int numSheets = map->numSheets();
  146.     cout << "numSheets: " << numSheets << endl;
  147.     stream.write((char*)&numSheets, sizeof(int));
  148.     for(int i = 0; i < numSheets; i++) {
  149.         const char* filePath = map->getSheetPath(i).c_str();
  150.         int filePathLen = strlen(filePath);
  151.         cout << "strlen(filePath): " << filePathLen << endl;
  152.         stream.write((char*)&filePathLen, sizeof(int));
  153.         cout << "filePath: " << filePath << endl;
  154.         stream.write(filePath, sizeof(char*)*filePathLen);
  155.     }
  156.  
  157.     for(int i = 0; i < width; i++) {
  158.         for(int j = 0; j < height; j++) {
  159.             int sheetNum = map->getSheetNum(0, i, j);
  160.             stream.write((char*)&sheetNum, sizeof(int));
  161.  
  162.             Tile t = map->getTile(0, i, j);
  163.             int sx = t.getSheetX();
  164.             int sy = t.getSheetY();
  165.             stream.write((char*)&sx, sizeof(int));
  166.             stream.write((char*)&sy, sizeof(int));
  167.  
  168.             if(sheetNum != -1) {
  169.                 cout << "sheetNum: " << sheetNum << endl;
  170.                 cout << "sx: " << sx << endl;
  171.                 cout << "sy: " << sy << endl;
  172.             }
  173.         }
  174.     }
  175.     //save layer 2
  176.     for(int i = 0; i < width; i++) {
  177.         for(int j = 0; j < height; j++) {
  178.             int sheetNum = map->getSheetNum(1, i, j);
  179.             stream.write((char*)&sheetNum, sizeof(int));
  180.  
  181.             Tile t = map->getTile(1, i, j);
  182.             int sx = t.getSheetX();
  183.             int sy = t.getSheetY();
  184.             stream.write((char*)&sx, sizeof(int));
  185.             stream.write((char*)&sy, sizeof(int));
  186.  
  187.             if(sheetNum != -1) {
  188.                 cout << "sheetNum: " << sheetNum << endl;
  189.                 cout << "sx: " << sx << endl;
  190.                 cout << "sy: " << sy << endl;
  191.             }
  192.         }
  193.     }
  194.    
  195.     stream.close();
  196. }
  197.  
  198. //from: http://gpwiki.org/index.php/SDL_ttf:Tutorials:Basic_Font_Rendering
  199. TTF_Font* loadFont(const char* file, int ptsize)
  200. {
  201.     TTF_Font* tmpfont;
  202.     tmpfont = TTF_OpenFont(file, ptsize);
  203.     return tmpfont;
  204. }
  205. void drawText(TTF_Font* font, SDL_Surface* dest, string text, int x, int y) {
  206.     SDL_Surface* fontSurface = TTF_RenderText_Solid(font, text.c_str(), (SDL_Color){255, 255, 255});
  207.     SDL_Rect offset;
  208.     offset.x = x;
  209.     offset.y = y;
  210.     SDL_BlitSurface(fontSurface, NULL, dest, &offset);
  211. }
  212.  
  213. #endif
Advertisement
Add Comment
Please, Sign In to add comment