diff options
Diffstat (limited to 'src/tiledfile.c')
-rw-r--r-- | src/tiledfile.c | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/src/tiledfile.c b/src/tiledfile.c index c1ba42e..0b37bae 100644 --- a/src/tiledfile.c +++ b/src/tiledfile.c @@ -5,8 +5,9 @@ const int i = 1; #define is_bigendian() ( (*(char*)&i) == 0 ) -Texture2D processTilemapTexture(int * tilelayout, int width, int height) { +void processTilemapTexture(Texture2D *loc, int * tilelayout, int width, int height) { Color *pixels = (Color*) malloc(width * height * sizeof(Color)); + printf("%d x %d\n", width, height); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { @@ -25,14 +26,32 @@ Texture2D processTilemapTexture(int * tilelayout, int width, int height) { .mipmaps = 1 }; - Texture2D checked = LoadTextureFromImage(checkedIm); + *loc = LoadTextureFromImage(checkedIm); UnloadImage(checkedIm); - return checked; } +void readrgba(Texture2D *loc, int width, int height, FILE *file) { + char *pixels = malloc(width*height*4); + printf("%d\n", width*height*4); + fread(pixels, (size_t) width*height*4, (size_t) 1, file); + + Image checkedIm = { + .data = pixels, + .width = width, + .height = height, + .format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, + .mipmaps = 1 + }; + + *loc = LoadTextureFromImage(checkedIm); + UnloadImage(checkedIm); + +} + + //! read a big endian bytes from file -int readb(char *out, size_t noBytes, FILE *file) { +int readb(char * out, size_t noBytes, FILE * file) { if (!fread(out, (size_t)1, (size_t) noBytes, file)) return 1; @@ -51,11 +70,11 @@ int readb(char *out, size_t noBytes, FILE *file) { } -Texture2D loadTileMap(char *filename) { - int width, height, tilebytes; - int *tilelayout; +void loadTileMap(char * filename, Texture2D * tilemap, Texture2D * atlas, int * atlasSize) { + int width, height, tilebytes, tilesize, atlasWidth, atlasHeight; + int * tilelayout; - FILE *file; + FILE * file; file = fopen(filename, "rb"); // skip header @@ -64,17 +83,23 @@ Texture2D loadTileMap(char *filename) { readb((char *)&width, 4, file); // 4 bytes for int height readb((char *)&height, 4, file); - // 1 byte saying how big each tile is + // 4 bytes saying how big each tile is readb((char *)&tilebytes, 4, file); - printf("tilebytes: %d\n", tilebytes); + fprintf(stderr, "loading %d bytes per tile for %d tiles\n", tilebytes, width*height); tilelayout = malloc(width*height*tilebytes); - int tile; - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - readb((char *)&tile, tilebytes, file); - tilelayout[y*width + x] = tile; - } - } - return processTilemapTexture(tilelayout, width, height); + fread(tilelayout, tilebytes, width*height, file); + processTilemapTexture(tilemap, tilelayout, width, height); + + // read the pixel size of each tile + readb((char *)&tilesize, 4, file); + // read the atlas size + readb((char *)&atlasWidth, 4, file); + readb((char *)&atlasHeight, 4, file); + atlasSize[0] = atlasWidth; + atlasSize[1] = atlasHeight; + + // read the atlas itself + readrgba(atlas, atlasWidth * tilesize, atlasHeight * tilesize, file); + fprintf(stderr, "Successfully loaded tilemap from %s\n", filename); } |