basic-game-framework/src/tilemap.h

42 lines
1.0 KiB
C

#ifndef _tilemap_h
#define _tilemap_h
#include "corelib/render.h"
#define TILEMAP_MAX_SIZE 16384
#define TILESET_MAX_SIZE 255
typedef struct tile_t {
sprite_t sprite;
short walkable;
} tile_t;
typedef struct tileset_t {
tile_t* set;
size_t size;
} tileset_t;
typedef struct tilemap_t {
size_t tiles[TILEMAP_MAX_SIZE];
int width, height;
float x, y;
} tilemap_t;
static inline int get_tilemap_index(const tilemap_t* tilemap, int x, int y) {
return x + y * tilemap->width;
}
static inline size_t get_tile(const tilemap_t* tilemap, int x, int y) {
return *(tilemap->tiles + get_tilemap_index(tilemap, x, y));
}
static inline void set_tile(tilemap_t* tilemap, int x, int y, size_t value) {
*(tilemap->tiles + get_tilemap_index(tilemap, x, y)) = value;
}
extern void draw_tilemap(const tilemap_t* tilemap, const tileset_t* tileset);
/*load csv tilemap from file*/
extern int load_tilemap(tilemap_t* tilemap, const char* file);
/*write csv tilemap to file*/
extern int save_tilemap(const tilemap_t* tilemap, const char* file);
#endif /* _tilemap_h */