Add transperency when units are behind
This commit is contained in:
31
game/main.c
31
game/main.c
@@ -350,7 +350,8 @@ static void renderGame(Game *game, float dt) {
|
||||
BeginMode2D(game->camera);
|
||||
|
||||
// Map
|
||||
bzTileMapDraw(&game->map);
|
||||
BzTileMap *map = &game->map;
|
||||
bzTileMapDraw(map);
|
||||
// Ground UI
|
||||
drawPlayerInputUIGround();
|
||||
// Entities
|
||||
@@ -380,12 +381,22 @@ static void renderGame(Game *game, float dt) {
|
||||
src.height -= 0.02f;
|
||||
if (t[i].flipX) src.width *= -1.0f;
|
||||
if (t[i].flipY) src.height *= -1.0f;
|
||||
drawData[drawIdx++] = (DrawData) {
|
||||
DrawData draw = (DrawData) {
|
||||
.src = src,
|
||||
.dst = dst,
|
||||
.origin = origin,
|
||||
.rotation = r[i]
|
||||
.rotation = r[i],
|
||||
.canHaveAlpha = true,
|
||||
};
|
||||
if (ecs_has_id(ECS, it.entities[i], ecs_id(Unit)) ||
|
||||
ecs_has_id(ECS, it.entities[i], ecs_id(Arm))) {
|
||||
Vector2 pos = {dst.x, dst.y};
|
||||
Vec2i cellPos = bzTileMapPosToTile(map, pos);
|
||||
bzTileMapSetCollisions(map, true, COLL_LAYER_TRANSPARENCY,
|
||||
cellPos.x, cellPos.y, 1, 1);
|
||||
draw.canHaveAlpha = false;
|
||||
}
|
||||
drawData[drawIdx++] = draw;
|
||||
}
|
||||
}
|
||||
BZ_ASSERT(drawIdx == numDraws);
|
||||
@@ -394,8 +405,20 @@ static void renderGame(Game *game, float dt) {
|
||||
Texture2D tex = game->tileset.tiles;
|
||||
for (i32 i = 0; i < numDraws; i++) {
|
||||
DrawData draw = drawData[i];
|
||||
DrawTexturePro(tex, draw.src, draw.dst, draw.origin, draw.rotation, WHITE);
|
||||
Vector2 pos = {
|
||||
draw.dst.x,
|
||||
draw.dst.y - draw.dst.height * 0.5f,
|
||||
};
|
||||
Color c = WHITE;
|
||||
if (draw.canHaveAlpha) {
|
||||
Vec2i mapPos = bzTileMapPosToTile(map, pos);
|
||||
if (bzTileMapHasCollision(map, COLL_LAYER_TRANSPARENCY, mapPos.x, mapPos.y)) {
|
||||
c.a = 180;
|
||||
}
|
||||
}
|
||||
DrawTexturePro(tex, draw.src, draw.dst, draw.origin, draw.rotation, c);
|
||||
}
|
||||
bzTileMapClearCollisionLayer(&game->map, COLL_LAYER_TRANSPARENCY);
|
||||
Vector2 target = GetMousePosition();
|
||||
target = GetScreenToWorld2D(target, game->camera);
|
||||
static f32 elapsed = 0;
|
||||
|
||||
Reference in New Issue
Block a user