diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tiledfile.c | 46 |
1 files changed, 17 insertions, 29 deletions
diff --git a/src/tiledfile.c b/src/tiledfile.c index 0b37bae..ada29e5 100644 --- a/src/tiledfile.c +++ b/src/tiledfile.c @@ -5,19 +5,7 @@ const int i = 1; #define is_bigendian() ( (*(char*)&i) == 0 ) -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++) { - int tile = tilelayout[y*width + x]; - pixels[y*width + x] = (Color){ - (int) tile, 0, 0, 0 - }; - } - } - +void textureFromPixels(Texture2D *loc, Color *pixels, int width, int height) { Image checkedIm = { .data = pixels, .width = width, @@ -28,25 +16,23 @@ void processTilemapTexture(Texture2D *loc, int * tilelayout, int width, int heig *loc = LoadTextureFromImage(checkedIm); UnloadImage(checkedIm); - } -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); +void processTilemapTexture(Texture2D *loc, int * tilelayout, int width, int height) { + Color *pixels = (Color*) malloc(width * height * sizeof(Color)); - Image checkedIm = { - .data = pixels, - .width = width, - .height = height, - .format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, - .mipmaps = 1 - }; + for (int i = 0; i < width*height; i++) { + pixels[i] = (Color){ tilelayout[i], 0, 0, 0 }; + } - *loc = LoadTextureFromImage(checkedIm); - UnloadImage(checkedIm); + textureFromPixels(loc, pixels, width, height); +} +//! read rgba image from file +void readrgba(Texture2D *loc, int width, int height, FILE *file) { + Color *pixels = malloc(width*height*4); + fread(pixels, (size_t) width*height*4, (size_t) 1, file); + textureFromPixels(loc, pixels, width, height); } @@ -69,7 +55,7 @@ int readb(char * out, size_t noBytes, FILE * file) { return 0; } - +//! load tilemap data from file void loadTileMap(char * filename, Texture2D * tilemap, Texture2D * atlas, int * atlasSize) { int width, height, tilebytes, tilesize, atlasWidth, atlasHeight; int * tilelayout; @@ -86,9 +72,11 @@ void loadTileMap(char * filename, Texture2D * tilemap, Texture2D * atlas, int * // 4 bytes saying how big each tile is readb((char *)&tilebytes, 4, file); - fprintf(stderr, "loading %d bytes per tile for %d tiles\n", tilebytes, width*height); + fprintf(stderr, "loading %d bytes per tile for %d (%dx%d) tiles\n", tilebytes, width*height, width, height); tilelayout = malloc(width*height*tilebytes); fread(tilelayout, tilebytes, width*height, file); + + // create a texture from the tilelayout data processTilemapTexture(tilemap, tilelayout, width, height); // read the pixel size of each tile |