Separate object layers, asign layers to proper slots

This commit is contained in:
2023-11-09 08:38:57 +01:00
parent 4458a26c4f
commit fa79af2a17
9 changed files with 226 additions and 72 deletions

View File

@@ -6,6 +6,25 @@
BzTileset BZ_TILESET_INVALID = {.isValid = false};
BzTileShape bzCuteObjectToTileShape(cute_tiled_object_t *object) {
BzTileShape shape = {BZ_TILE_SHAPE_NONE};
if (object->ellipse)
shape.type = BZ_TILE_SHAPE_ELLIPSE;
else if (object->point)
shape.type = BZ_TILE_SHAPE_POINT;
else if (!object->vertices)
shape.type = BZ_TILE_SHAPE_RECT;
else
return shape;
shape.x = object->x;
shape.y = object->y;
shape.sizeX = object->width;
shape.sizeY = object->height;
return shape;
}
BzTileset bzTilesetCreate(const BzTilesetDesc *desc) {
BzTileset tileset = {};
cute_tiled_tileset_t *cuteTileset = cute_tiled_load_external_tileset(desc->path, NULL);
@@ -24,7 +43,7 @@ BzTileset bzTilesetCreate(const BzTilesetDesc *desc) {
tileset.tileCount = tileset.width * tileset.tileHeight;
tileset.tileColliders = bzAlloc(tileset.tileCount * sizeof(*tileset.tileColliders));
for (i32 i = 0; i < tileset.tileCount; i++) {
tileset.tileColliders[i] = (BzTileCollider) {BZ_TILE_COLLIDER_NONE};
tileset.tileColliders[i] = (BzTileShape) {BZ_TILE_SHAPE_NONE};
}
cute_tiled_tile_descriptor_t *cuteTile = cuteTileset->tiles;
@@ -34,14 +53,7 @@ BzTileset bzTilesetCreate(const BzTilesetDesc *desc) {
// NOTE: Only supporting single collider (integer values)
if (cuteObject) {
BzTileCollider collider = {BZ_TILE_COLLIDER_RECT};
if (cuteObject->ellipse)
collider.type = BZ_TILE_COLLIDER_ELLIPSE;
collider.x = (i8) cuteObject->x;
collider.y = (i8) cuteObject->y;
collider.sizeX = (i8) cuteObject->width;
collider.sizeY = (i8) cuteObject->height;
BzTileShape collider = bzCuteObjectToTileShape(cuteObject);
tileset.tileColliders[cuteTile->tile_index] = collider;
}
}
@@ -68,11 +80,11 @@ Rectangle bzTilesetGetTileRegion(BzTileset *tileset, int tileID) {
return (Rectangle) {posX * tileset->tileWidth, posY * tileset->tileHeight,
tileset->tileWidth, tileset->tileHeight};
}
BzTileCollider bzTilesetGetTileCollider(BzTileset *tileset, int tileID) {
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, int tileID) {
tileID = tileID - tileset->startID;
if (tileID < 0 || tileID >= tileset->tileCount) {
return (BzTileCollider) {.type = BZ_TILE_COLLIDER_NONE};
return (BzTileShape) {.type = BZ_TILE_SHAPE_NONE};
}
return tileset->tileColliders[tileID];