From 3cfdce9d967aca9b8b87f5bb0f839c687d6706cd Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Wed, 13 Dec 2023 16:31:28 +0100 Subject: [PATCH] Add BzTileID which refers to the tileset --- engine/breeze/map/map.c | 11 ++++++----- engine/breeze/map/tileset.c | 5 +---- engine/breeze/map/tileset.h | 7 ++++--- game/buildings.c | 2 +- game/main.c | 3 +-- game/map_init.c | 9 +++++---- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/engine/breeze/map/map.c b/engine/breeze/map/map.c index 28d93f2..f9d745d 100644 --- a/engine/breeze/map/map.c +++ b/engine/breeze/map/map.c @@ -334,9 +334,10 @@ static void drawLayer(BzTileLayer *layer, BzTileset *tileset) { for (i32 y = 0; y < layer->height; y++) { for (i32 x = 0; x < layer->width; x++) { - BzTile tile = bzTileLayerGetTile(layer, x, y); - if (tile - tileset->startID != -1) { - Rectangle rec = bzTilesetGetTileRegion(tileset, tile); + BzTile tile = bzTileLayerGetTile(layer, x, y); + BzTileID tileID = bzTilesetGetTileID(tileset, tile); + if (tileID != -1) { + Rectangle rec = bzTilesetGetTileRegion(tileset, tileID); DrawTextureRec(tileset->tiles, rec, drawPos, WHITE); } drawPos.x += (float) tileset->tileWidth; @@ -382,7 +383,7 @@ BzTileObjectGroup *bzTileMapGetObjects(BzTileMap *map, i32 slotID) { BZ_ASSERT(slotID >= 0 && slotID < map->objectGroupCount); return &map->objectGroups[slotID]; } -static f32 abs(f32 x) { +static f32 absf32(f32 x) { return x > 0 ? x : -x; } @@ -399,7 +400,7 @@ f32 bzTileMapRayCast(BzTileMap *map, Vector2 from, Vector2 to, f32 maxDst, Vecto // sqrtf(1 + (dir.y / dir.x) * (dir.y / dir.x)), // sqrtf(1 + (dir.x / dir.y) * (dir.x / dir.y)) //}; - Vector2 stepSize = {abs(1.0f / dir.x), abs(1.0f / dir.y)}; + Vector2 stepSize = {absf32(1.0f / dir.x), absf32(1.0f / dir.y)}; i32 cellX = (i32) from.x; i32 cellY = (i32) from.y; diff --git a/engine/breeze/map/tileset.c b/engine/breeze/map/tileset.c index 90d0a9b..ceb3427 100644 --- a/engine/breeze/map/tileset.c +++ b/engine/breeze/map/tileset.c @@ -78,7 +78,7 @@ BzTileset bzTilesetCreate(const BzTilesetDesc *desc) { return tileset; } -BzTile bzTilesetGetTile(BzTileset *tileset, BzTile tile) { +BzTile bzTilesetGetTileID(BzTileset *tileset, BzTile tile) { if (tile == 0) return -1; tile = tile - tileset->startID; @@ -86,7 +86,6 @@ BzTile bzTilesetGetTile(BzTileset *tileset, BzTile tile) { return tile; } Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID) { - tileID = tileID - tileset->startID; if (tileID < 0 || tileID >= tileset->tileCount) { return (Rectangle){}; } @@ -96,8 +95,6 @@ Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID) { tileset->tileWidth, tileset->tileHeight}; } BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID) { - tileID = tileID - tileset->startID; - if (tileID < 0 || tileID >= tileset->tileCount) { return (BzTileShape) {.type = BZ_TILE_SHAPE_NONE}; } diff --git a/engine/breeze/map/tileset.h b/engine/breeze/map/tileset.h index 3f059aa..99de1b7 100644 --- a/engine/breeze/map/tileset.h +++ b/engine/breeze/map/tileset.h @@ -6,6 +6,7 @@ #include typedef i32 BzTile; +typedef i32 BzTileID; typedef struct BzTilesetDesc { const char *path; @@ -46,9 +47,9 @@ extern BzTileset BZ_TILESET_INVALID; BzTileset bzTilesetCreate(const BzTilesetDesc *desc); -BzTile bzTilesetGetTile(BzTileset *tileset, BzTile tile); -Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID); -BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID); +BzTileID bzTilesetGetTileID(BzTileset *tileset, BzTile tile); +Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTileID tileID); +BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTileID tileID); void bzTilesetDestroy(BzTileset *tileset); diff --git a/game/buildings.c b/game/buildings.c index 276fee5..f5b4008 100644 --- a/game/buildings.c +++ b/game/buildings.c @@ -29,7 +29,7 @@ bool canPlaceBuilding(BzTileMap *map, BuildingType type, BzTile tileX, BzTile ti for (i32 y = tileY; y < tileY + sizeY; y++) { for (i32 x = tileX; x < tileX + sizeX; x++) { BzTile tile = bzTileLayerGetTile(buildLayer, x, y); - tile = bzTilesetGetTile(tileset, tile); + tile = bzTilesetGetTileID(tileset, tile); tile = getTileBuilding(tile); //if (tile == BUILDINGS_ROAD) // return false; diff --git a/game/main.c b/game/main.c index 225ba60..3497486 100644 --- a/game/main.c +++ b/game/main.c @@ -58,7 +58,7 @@ void terrainRender(BzTileMap *map, BzTileLayer *layer) { for (i32 y = 0; y < layer->height; y++) { for (i32 x = 0; x < layer->width; x++) { BzTile tile = bzTileLayerGetTile(layer, x, y); - tile = bzTilesetGetTile(tileset, tile); + tile = bzTilesetGetTileID(tileset, tile); if (tile != -1) { if (terrainHasAnimation(tile)) { f32 frameDuration = terrainGetAnimationFrame(tile, 0).duration / 1000.0f; @@ -66,7 +66,6 @@ void terrainRender(BzTileMap *map, BzTileLayer *layer) { i32 frameIdx = (i32) (elapsed / frameDuration) % numFrames; tile = terrainGetAnimationFrame(tile, frameIdx).frame; } - tile += tileset->startID; Rectangle rec = bzTilesetGetTileRegion(tileset, tile); DrawTextureRec(tileset->tiles, rec, drawPos, WHITE); } diff --git a/game/map_init.c b/game/map_init.c index 65e1ba6..7827bdb 100644 --- a/game/map_init.c +++ b/game/map_init.c @@ -63,7 +63,7 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) { for (i32 x = 0; x < layer->width; x++) { BzTile ownerTile = data[y * layer->width + x]; BzTile buildingRawTile = buildingData[y * layer->width + x]; - BzTile buildingTile = bzTilesetGetTile(buildingTileset, buildingRawTile); + BzTile buildingTile = bzTilesetGetTileID(buildingTileset, buildingRawTile); buildingTile = getTileBuilding(buildingTile); if (buildingTile == BUILDING_NONE || ownerTile == 0) continue; // We have a building @@ -76,7 +76,7 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) { ecs_entity_t e = ecs_new_id(ECS); ecs_set(ECS, e, Position, {.x = x * tileWidth, .y = y * tileHeight}); ecs_set(ECS, e, TileSize, {.sizeX = size.sizeX * tileWidth, .sizeY = size.sizeY * tileHeight}); - ownerTile = bzTilesetGetTile(buildingTileset, ownerTile); + ownerTile = bzTilesetGetTileID(buildingTileset, ownerTile); ownerTile = getTileBuilding(ownerTile); ecs_set(ECS, e, Owner, {.playerID=ownerTile}); ecs_add_id(ECS, e, Selectable); @@ -100,7 +100,7 @@ bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) { for (i32 x = 0; x < layer->width; x++) { BzTile tile = layer->data[y * layer->width + x]; BzTile layerTile = tile; - tile = bzTilesetGetTile(tileset, tile); + tile = bzTilesetGetTileID(tileset, tile); if (tile == -1) continue; // Not a tree f32 sizeX = tileset->tileWidth; @@ -115,7 +115,8 @@ bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) { ecs_set(ECS, e, Position, {posX, posY}); ecs_set(ECS, e, Size, {sizeX, sizeY}); ecs_set(ECS, e, Rotation, {0}); - ecs_set(ECS, e, TextureRegion, {tileset->tiles, bzTilesetGetTileRegion(tileset, layerTile)}); + BzTile tileID = bzTilesetGetTileID(tileset, layerTile); + ecs_set(ECS, e, TextureRegion, {tileset->tiles, bzTilesetGetTileRegion(tileset, tileID)}); ecs_set(ECS, e, Resource, {RES_WOOD, 20}); ecs_add_id(ECS, e, Selectable); ecs_add_id(ECS, e, Harvestable);