104 lines
2.2 KiB
C
104 lines
2.2 KiB
C
#ifndef BREEZE_MAP_H
|
|
#define BREEZE_MAP_H
|
|
|
|
#include "tileset.h"
|
|
#include "../utils/string.h"
|
|
|
|
#define BZ_MAX_MAP_LAYERS 8
|
|
#define BZ_MAX_MAP_TILESETS 8
|
|
#define BZ_MAP_COLLIDER_DEPTH 2
|
|
|
|
|
|
typedef struct BzTileLayer {
|
|
i32 id;
|
|
|
|
int16_t *data;
|
|
i32 dataCount;
|
|
i16 minData;
|
|
i16 maxData;
|
|
|
|
i32 width;
|
|
i32 height;
|
|
|
|
f32 offsetX;
|
|
f32 offsetY;
|
|
f32 opacity;
|
|
|
|
i32 tilesetIdx;
|
|
} BzTileLayer;
|
|
|
|
typedef struct BzTileObject {
|
|
u32 id;
|
|
BzTileShape shape;
|
|
} BzTileObject;
|
|
|
|
typedef struct BzTileObjectLayer {
|
|
BzTileObject *objects;
|
|
i32 objectCount;
|
|
} BzTileObjectLayer;
|
|
|
|
// Return true, if it should be added to map
|
|
typedef bool BzTileLayerHandler(BzTileLayer *layer);
|
|
typedef bool BzTileObjectsHandler(BzTileObjectLayer *objectLayer);
|
|
|
|
typedef struct BzTileLayerDesc {
|
|
const char *name; // Matches map layer names
|
|
BzTileLayerHandler *handler;
|
|
} BzTileLayerDesc;
|
|
typedef struct BzTileObjectsDesc {
|
|
const char *name; // Matches map layer names
|
|
BzTileObjectsHandler *handler;
|
|
BzStringHashFunc *hashFunc;
|
|
} BzTileObjectsDesc;
|
|
|
|
typedef struct BzTileMapDesc {
|
|
const char *path;
|
|
BzTileset tilesets[BZ_MAX_MAP_TILESETS];
|
|
|
|
BzTileLayerDesc layers[BZ_MAX_MAP_LAYERS];
|
|
BzTileObjectsDesc objectLayers[BZ_MAX_MAP_LAYERS];
|
|
} BzTileMapDesc;
|
|
|
|
typedef struct BzTileCollider {
|
|
BzTileShape shapes[BZ_MAP_COLLIDER_DEPTH];
|
|
} BzTileCollider;
|
|
|
|
typedef struct BzTileMap {
|
|
Color backgroundColor;
|
|
|
|
i32 width;
|
|
i32 height;
|
|
i32 tileWidth;
|
|
i32 tileHeight;
|
|
|
|
BzTileCollider *colliderMap;
|
|
i32 collidersCount;
|
|
|
|
BzTileLayer layers[BZ_MAX_MAP_LAYERS];
|
|
i32 layerCount;
|
|
|
|
BzTileObjectLayer objectLayers[BZ_MAX_MAP_LAYERS];
|
|
i32 objectLayerCount;
|
|
|
|
BzTileset tilesets[BZ_MAX_MAP_TILESETS];
|
|
i32 tilesetCount;
|
|
|
|
bool isValid;
|
|
} BzTileMap;
|
|
|
|
extern BzTileMap BZ_TILEMAP_INVALID;
|
|
|
|
int16_t bzTileLayerGetTile(BzTileLayer *layer, i32 x, i32 y);
|
|
|
|
BzTileMap bzTileMapCreate(const BzTileMapDesc *desc);
|
|
void bzTileMapDestroy(BzTileMap *tilemap);
|
|
|
|
void bzTileMapDraw(BzTileMap *map);
|
|
void bzTileMapDrawColliders(BzTileMap *map);
|
|
bool bzTileMapCanPlace(BzTileMap *map, i32 tileX, i32 tileY, i32 sizeX, i32 sizeY);
|
|
BzTileCollider bzTileMapGetCollider(BzTileMap *map, i32 x, i32 y);
|
|
|
|
|
|
|
|
#endif //BREEZE_MAP_H
|