Add BzTileID which refers to the tileset
This commit is contained in:
@@ -335,8 +335,9 @@ static void drawLayer(BzTileLayer *layer, BzTileset *tileset) {
|
|||||||
for (i32 y = 0; y < layer->height; y++) {
|
for (i32 y = 0; y < layer->height; y++) {
|
||||||
for (i32 x = 0; x < layer->width; x++) {
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
BzTile tile = bzTileLayerGetTile(layer, x, y);
|
BzTile tile = bzTileLayerGetTile(layer, x, y);
|
||||||
if (tile - tileset->startID != -1) {
|
BzTileID tileID = bzTilesetGetTileID(tileset, tile);
|
||||||
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
if (tileID != -1) {
|
||||||
|
Rectangle rec = bzTilesetGetTileRegion(tileset, tileID);
|
||||||
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
||||||
}
|
}
|
||||||
drawPos.x += (float) tileset->tileWidth;
|
drawPos.x += (float) tileset->tileWidth;
|
||||||
@@ -382,7 +383,7 @@ BzTileObjectGroup *bzTileMapGetObjects(BzTileMap *map, i32 slotID) {
|
|||||||
BZ_ASSERT(slotID >= 0 && slotID < map->objectGroupCount);
|
BZ_ASSERT(slotID >= 0 && slotID < map->objectGroupCount);
|
||||||
return &map->objectGroups[slotID];
|
return &map->objectGroups[slotID];
|
||||||
}
|
}
|
||||||
static f32 abs(f32 x) {
|
static f32 absf32(f32 x) {
|
||||||
return x > 0 ? x : -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.y / dir.x) * (dir.y / dir.x)),
|
||||||
// sqrtf(1 + (dir.x / dir.y) * (dir.x / dir.y))
|
// 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 cellX = (i32) from.x;
|
||||||
i32 cellY = (i32) from.y;
|
i32 cellY = (i32) from.y;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ BzTileset bzTilesetCreate(const BzTilesetDesc *desc) {
|
|||||||
return tileset;
|
return tileset;
|
||||||
}
|
}
|
||||||
|
|
||||||
BzTile bzTilesetGetTile(BzTileset *tileset, BzTile tile) {
|
BzTile bzTilesetGetTileID(BzTileset *tileset, BzTile tile) {
|
||||||
if (tile == 0)
|
if (tile == 0)
|
||||||
return -1;
|
return -1;
|
||||||
tile = tile - tileset->startID;
|
tile = tile - tileset->startID;
|
||||||
@@ -86,7 +86,6 @@ BzTile bzTilesetGetTile(BzTileset *tileset, BzTile tile) {
|
|||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID) {
|
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID) {
|
||||||
tileID = tileID - tileset->startID;
|
|
||||||
if (tileID < 0 || tileID >= tileset->tileCount) {
|
if (tileID < 0 || tileID >= tileset->tileCount) {
|
||||||
return (Rectangle){};
|
return (Rectangle){};
|
||||||
}
|
}
|
||||||
@@ -96,8 +95,6 @@ Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID) {
|
|||||||
tileset->tileWidth, tileset->tileHeight};
|
tileset->tileWidth, tileset->tileHeight};
|
||||||
}
|
}
|
||||||
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID) {
|
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID) {
|
||||||
tileID = tileID - tileset->startID;
|
|
||||||
|
|
||||||
if (tileID < 0 || tileID >= tileset->tileCount) {
|
if (tileID < 0 || tileID >= tileset->tileCount) {
|
||||||
return (BzTileShape) {.type = BZ_TILE_SHAPE_NONE};
|
return (BzTileShape) {.type = BZ_TILE_SHAPE_NONE};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
|
|
||||||
typedef i32 BzTile;
|
typedef i32 BzTile;
|
||||||
|
typedef i32 BzTileID;
|
||||||
|
|
||||||
typedef struct BzTilesetDesc {
|
typedef struct BzTilesetDesc {
|
||||||
const char *path;
|
const char *path;
|
||||||
@@ -46,9 +47,9 @@ extern BzTileset BZ_TILESET_INVALID;
|
|||||||
|
|
||||||
BzTileset bzTilesetCreate(const BzTilesetDesc *desc);
|
BzTileset bzTilesetCreate(const BzTilesetDesc *desc);
|
||||||
|
|
||||||
BzTile bzTilesetGetTile(BzTileset *tileset, BzTile tile);
|
BzTileID bzTilesetGetTileID(BzTileset *tileset, BzTile tile);
|
||||||
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID);
|
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTileID tileID);
|
||||||
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID);
|
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTileID tileID);
|
||||||
|
|
||||||
void bzTilesetDestroy(BzTileset *tileset);
|
void bzTilesetDestroy(BzTileset *tileset);
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ bool canPlaceBuilding(BzTileMap *map, BuildingType type, BzTile tileX, BzTile ti
|
|||||||
for (i32 y = tileY; y < tileY + sizeY; y++) {
|
for (i32 y = tileY; y < tileY + sizeY; y++) {
|
||||||
for (i32 x = tileX; x < tileX + sizeX; x++) {
|
for (i32 x = tileX; x < tileX + sizeX; x++) {
|
||||||
BzTile tile = bzTileLayerGetTile(buildLayer, x, y);
|
BzTile tile = bzTileLayerGetTile(buildLayer, x, y);
|
||||||
tile = bzTilesetGetTile(tileset, tile);
|
tile = bzTilesetGetTileID(tileset, tile);
|
||||||
tile = getTileBuilding(tile);
|
tile = getTileBuilding(tile);
|
||||||
//if (tile == BUILDINGS_ROAD)
|
//if (tile == BUILDINGS_ROAD)
|
||||||
// return false;
|
// return false;
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ void terrainRender(BzTileMap *map, BzTileLayer *layer) {
|
|||||||
for (i32 y = 0; y < layer->height; y++) {
|
for (i32 y = 0; y < layer->height; y++) {
|
||||||
for (i32 x = 0; x < layer->width; x++) {
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
BzTile tile = bzTileLayerGetTile(layer, x, y);
|
BzTile tile = bzTileLayerGetTile(layer, x, y);
|
||||||
tile = bzTilesetGetTile(tileset, tile);
|
tile = bzTilesetGetTileID(tileset, tile);
|
||||||
if (tile != -1) {
|
if (tile != -1) {
|
||||||
if (terrainHasAnimation(tile)) {
|
if (terrainHasAnimation(tile)) {
|
||||||
f32 frameDuration = terrainGetAnimationFrame(tile, 0).duration / 1000.0f;
|
f32 frameDuration = terrainGetAnimationFrame(tile, 0).duration / 1000.0f;
|
||||||
@@ -66,7 +66,6 @@ void terrainRender(BzTileMap *map, BzTileLayer *layer) {
|
|||||||
i32 frameIdx = (i32) (elapsed / frameDuration) % numFrames;
|
i32 frameIdx = (i32) (elapsed / frameDuration) % numFrames;
|
||||||
tile = terrainGetAnimationFrame(tile, frameIdx).frame;
|
tile = terrainGetAnimationFrame(tile, frameIdx).frame;
|
||||||
}
|
}
|
||||||
tile += tileset->startID;
|
|
||||||
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
||||||
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) {
|
|||||||
for (i32 x = 0; x < layer->width; x++) {
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
BzTile ownerTile = data[y * layer->width + x];
|
BzTile ownerTile = data[y * layer->width + x];
|
||||||
BzTile buildingRawTile = buildingData[y * layer->width + x];
|
BzTile buildingRawTile = buildingData[y * layer->width + x];
|
||||||
BzTile buildingTile = bzTilesetGetTile(buildingTileset, buildingRawTile);
|
BzTile buildingTile = bzTilesetGetTileID(buildingTileset, buildingRawTile);
|
||||||
buildingTile = getTileBuilding(buildingTile);
|
buildingTile = getTileBuilding(buildingTile);
|
||||||
if (buildingTile == BUILDING_NONE || ownerTile == 0) continue;
|
if (buildingTile == BUILDING_NONE || ownerTile == 0) continue;
|
||||||
// We have a building
|
// We have a building
|
||||||
@@ -76,7 +76,7 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) {
|
|||||||
ecs_entity_t e = ecs_new_id(ECS);
|
ecs_entity_t e = ecs_new_id(ECS);
|
||||||
ecs_set(ECS, e, Position, {.x = x * tileWidth, .y = y * tileHeight});
|
ecs_set(ECS, e, Position, {.x = x * tileWidth, .y = y * tileHeight});
|
||||||
ecs_set(ECS, e, TileSize, {.sizeX = size.sizeX * tileWidth, .sizeY = size.sizeY * 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);
|
ownerTile = getTileBuilding(ownerTile);
|
||||||
ecs_set(ECS, e, Owner, {.playerID=ownerTile});
|
ecs_set(ECS, e, Owner, {.playerID=ownerTile});
|
||||||
ecs_add_id(ECS, e, Selectable);
|
ecs_add_id(ECS, e, Selectable);
|
||||||
@@ -100,7 +100,7 @@ bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) {
|
|||||||
for (i32 x = 0; x < layer->width; x++) {
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
BzTile tile = layer->data[y * layer->width + x];
|
BzTile tile = layer->data[y * layer->width + x];
|
||||||
BzTile layerTile = tile;
|
BzTile layerTile = tile;
|
||||||
tile = bzTilesetGetTile(tileset, tile);
|
tile = bzTilesetGetTileID(tileset, tile);
|
||||||
if (tile == -1) continue; // Not a tree
|
if (tile == -1) continue; // Not a tree
|
||||||
|
|
||||||
f32 sizeX = tileset->tileWidth;
|
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, Position, {posX, posY});
|
||||||
ecs_set(ECS, e, Size, {sizeX, sizeY});
|
ecs_set(ECS, e, Size, {sizeX, sizeY});
|
||||||
ecs_set(ECS, e, Rotation, {0});
|
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_set(ECS, e, Resource, {RES_WOOD, 20});
|
||||||
ecs_add_id(ECS, e, Selectable);
|
ecs_add_id(ECS, e, Selectable);
|
||||||
ecs_add_id(ECS, e, Harvestable);
|
ecs_add_id(ECS, e, Harvestable);
|
||||||
|
|||||||
Reference in New Issue
Block a user