Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SDL/SDL.h>
- #include <SDL/SDL_image.h>
- #include <SDL/SDL_ttf.h>
- #include <iostream>
- #include <fstream>
- #include <string>
- #include "Map.h"
- #include "Tile.h"
- using namespace std;
- #ifndef UTILS_H
- #define UTILS_H
- SDL_Surface* loadImage(const char* filename) {
- SDL_Surface* loadedImage = IMG_Load(filename);
- SDL_Surface* optimizedImage = NULL;
- if(loadedImage) {
- optimizedImage = SDL_DisplayFormat(loadedImage);
- SDL_FreeSurface(loadedImage);
- SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB(optimizedImage->format, 255, 0, 255));
- cout << optimizedImage << endl;
- }
- return optimizedImage;
- }
- Map* loadMap(const char* filename) {
- cout << "Loading map..." << endl;
- ifstream stream;
- stream.open(filename, ios::binary);
- int width = -1;
- stream.read((char*)&width, sizeof(int));
- int height = -1;
- stream.read((char*)&height, sizeof(int));
- int size = -1;
- stream.read((char*)&size, sizeof(int));
- cout << "width: " << width << endl;
- cout << "height: " << height << endl;
- cout << "size: " << size << endl;
- Map* map = new Map(width, height, size);
- int numSheets = -1;
- stream.read((char*)&numSheets, sizeof(int));
- cout << "numSheets: " << numSheets << endl;
- for(int i = 0; i < numSheets; i++) {
- int len = -1;
- stream.read((char*)&len, sizeof(int));
- cout << "len: " << len << endl;
- char loadedString[len];
- stream.read(loadedString, sizeof(char*)*len);
- string path = loadedString;
- cout << "string: '" << loadedString << "'" << endl;
- SDL_Surface* sheet = loadImage(loadedString);
- cout << "loaded sheet" << endl;
- map->addSheet(sheet, path);
- cout << "added sheet" << endl;
- cout << "within map string: " << map->getSheetPath(map->numSheets()-1) << endl;
- cout << "Load: " << sheet << endl;
- }
- cout << "Loading tiles..." << endl;
- for(int i = 0; i < width; i++) {
- for(int j = 0; j < height; j++) {
- int sheetNum = -1;
- //cout << "sheetNum: " << sheetNum << endl;
- stream.read((char*)&sheetNum, sizeof(int));
- SDL_Surface* sheet = map->getSheet(sheetNum);
- int x = i*size;
- int y = j*size;
- if(sheetNum != -1) {
- cout << "load ij: " << i << ", " << j << endl;
- cout << "load x: " << x << ", " << y << endl;
- }
- int sx = -1;
- stream.read((char*)&sx, sizeof(int));
- int sy = -1;
- stream.read((char*)&sy, sizeof(int));
- Tile tile(sheet, x, y, size, sx, sy);
- map->setTile(0, tile, i, j);
- /*
- if(sheetNum != -1) {
- cout << "sheetNum: " << sheetNum << endl;
- cout << "sx: " << sx << endl;
- cout << "sy: " << sy << endl;
- cout << "Going to next iteration..." << endl;
- }*/
- }
- }
- //load layer 2
- for(int i = 0; i < width; i++) {
- for(int j = 0; j < height; j++) {
- int sheetNum = -1;
- //cout << "sheetNum: " << sheetNum << endl;
- stream.read((char*)&sheetNum, sizeof(int));
- SDL_Surface* sheet = map->getSheet(sheetNum);
- int x = i*size;
- int y = j*size;
- if(sheetNum != -1) {
- cout << "load ij: " << i << ", " << j << endl;
- cout << "load x: " << x << ", " << y << endl;
- }
- int sx = -1;
- stream.read((char*)&sx, sizeof(int));
- int sy = -1;
- stream.read((char*)&sy, sizeof(int));
- Tile tile(sheet, x, y, size, sx, sy);
- map->setTile(1, tile, i, j);
- /*
- if(sheetNum != -1) {
- cout << "sheetNum: " << sheetNum << endl;
- cout << "sx: " << sx << endl;
- cout << "sy: " << sy << endl;
- cout << "Going to next iteration..." << endl;
- }*/
- }
- }
- stream.close();
- cout << "done with method" << endl;
- return map;
- }
- void saveMap(const char* filename, Map* map) {
- cout << "Saving map..." << endl;
- ofstream stream;
- stream.open(filename, ios::binary);
- int width = map->getWidth();
- int height = map->getHeight();
- int size = map->getTileSize();
- cout << "width: " << width << endl;
- stream.write((char*)&width, sizeof(int));
- cout << "height: " << height << endl;
- stream.write((char*)&height, sizeof(int));
- cout << "size: " << size << endl;
- stream.write((char*)&size, sizeof(int));
- int numSheets = map->numSheets();
- cout << "numSheets: " << numSheets << endl;
- stream.write((char*)&numSheets, sizeof(int));
- for(int i = 0; i < numSheets; i++) {
- const char* filePath = map->getSheetPath(i).c_str();
- int filePathLen = strlen(filePath);
- cout << "strlen(filePath): " << filePathLen << endl;
- stream.write((char*)&filePathLen, sizeof(int));
- cout << "filePath: " << filePath << endl;
- stream.write(filePath, sizeof(char*)*filePathLen);
- }
- for(int i = 0; i < width; i++) {
- for(int j = 0; j < height; j++) {
- int sheetNum = map->getSheetNum(0, i, j);
- stream.write((char*)&sheetNum, sizeof(int));
- Tile t = map->getTile(0, i, j);
- int sx = t.getSheetX();
- int sy = t.getSheetY();
- stream.write((char*)&sx, sizeof(int));
- stream.write((char*)&sy, sizeof(int));
- if(sheetNum != -1) {
- cout << "sheetNum: " << sheetNum << endl;
- cout << "sx: " << sx << endl;
- cout << "sy: " << sy << endl;
- }
- }
- }
- //save layer 2
- for(int i = 0; i < width; i++) {
- for(int j = 0; j < height; j++) {
- int sheetNum = map->getSheetNum(1, i, j);
- stream.write((char*)&sheetNum, sizeof(int));
- Tile t = map->getTile(1, i, j);
- int sx = t.getSheetX();
- int sy = t.getSheetY();
- stream.write((char*)&sx, sizeof(int));
- stream.write((char*)&sy, sizeof(int));
- if(sheetNum != -1) {
- cout << "sheetNum: " << sheetNum << endl;
- cout << "sx: " << sx << endl;
- cout << "sy: " << sy << endl;
- }
- }
- }
- stream.close();
- }
- //from: http://gpwiki.org/index.php/SDL_ttf:Tutorials:Basic_Font_Rendering
- TTF_Font* loadFont(const char* file, int ptsize)
- {
- TTF_Font* tmpfont;
- tmpfont = TTF_OpenFont(file, ptsize);
- return tmpfont;
- }
- void drawText(TTF_Font* font, SDL_Surface* dest, string text, int x, int y) {
- SDL_Surface* fontSurface = TTF_RenderText_Solid(font, text.c_str(), (SDL_Color){255, 255, 255});
- SDL_Rect offset;
- offset.x = x;
- offset.y = y;
- SDL_BlitSurface(fontSurface, NULL, dest, &offset);
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment