Add top bar game UI
This commit is contained in:
BIN
assets/game.png
BIN
assets/game.png
Binary file not shown.
|
Before Width: | Height: | Size: 366 KiB After Width: | Height: | Size: 368 KiB |
@@ -331,6 +331,17 @@ typedef enum AnimType {
|
|||||||
ANIM_NONE,
|
ANIM_NONE,
|
||||||
} AnimType;
|
} AnimType;
|
||||||
|
|
||||||
|
static EntityType getEntityTile(EntityType type) {
|
||||||
|
switch (type) {
|
||||||
|
case ENTITY_WORKER: return 27;
|
||||||
|
case ENTITY_WOOD: return 7424;
|
||||||
|
case ENTITY_STONE: return 7425;
|
||||||
|
case ENTITY_GOLD: return 7426;
|
||||||
|
case ENTITY_POP: return 7427;
|
||||||
|
default: return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool entityHasAnimation(EntityType entity, AnimType type) {
|
static bool entityHasAnimation(EntityType entity, AnimType type) {
|
||||||
switch (entity) {
|
switch (entity) {
|
||||||
case ENTITY_WORKER:
|
case ENTITY_WORKER:
|
||||||
|
|||||||
47
game/main.c
47
game/main.c
@@ -280,6 +280,12 @@ void update(float dt, void *userData) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void drawOverScreen(Color c) {
|
||||||
|
i32 width = GetScreenWidth();
|
||||||
|
i32 height = GetScreenHeight();
|
||||||
|
|
||||||
|
DrawRectangle(0, 0, width, height, c);
|
||||||
|
}
|
||||||
static void renderGame(Game *game, float dt) {
|
static void renderGame(Game *game, float dt) {
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
BeginMode2D(game->camera);
|
BeginMode2D(game->camera);
|
||||||
@@ -300,13 +306,48 @@ static void renderGame(Game *game, float dt) {
|
|||||||
|
|
||||||
EndMode2D();
|
EndMode2D();
|
||||||
|
|
||||||
}
|
// UI
|
||||||
static void drawOverScreen(Color c) {
|
|
||||||
i32 width = GetScreenWidth();
|
i32 width = GetScreenWidth();
|
||||||
i32 height = GetScreenHeight();
|
i32 height = GetScreenHeight();
|
||||||
|
bzUIBegin(UI, width, height);
|
||||||
|
|
||||||
|
bzUISetParentLayout(UI, (BzUILayout) {
|
||||||
|
.type = BZ_UI_LAYOUT_FLEX_BOX,
|
||||||
|
.flags = BZ_UI_FLEX_DIR_COLUMN |
|
||||||
|
BZ_UI_FLEX_JUSTIFY_SPACE_BETWEEN |
|
||||||
|
BZ_UI_FLEX_ALIGN_CENTER
|
||||||
|
});
|
||||||
|
// top bar
|
||||||
|
f32 topBarHeight = 0.05f;
|
||||||
|
BzUINode *topBar = uiPushDivParentPercentage(1.0f, topBarHeight);
|
||||||
|
bzUISetParentLayout(UI, (BzUILayout) {
|
||||||
|
.type = BZ_UI_LAYOUT_FLEX_BOX,
|
||||||
|
.flags = BZ_UI_FLEX_DIR_ROW |
|
||||||
|
BZ_UI_FLEX_ALIGN_CENTER |
|
||||||
|
BZ_UI_FLEX_JUSTIFY_START
|
||||||
|
});
|
||||||
|
Color topBarBG = {0, 0, 0, 50};
|
||||||
|
bzUISetBackgroundStyle(UI, topBar, (BzUIBackgroundStyle) {
|
||||||
|
.normal = topBarBG,
|
||||||
|
.hover = topBarBG,
|
||||||
|
.active = topBarBG,
|
||||||
|
});
|
||||||
|
BzTileset *tileset = &game->tileset;
|
||||||
|
Rectangle woodRec = bzTilesetGetTileRegion(tileset, getEntityTile(ENTITY_WOOD));
|
||||||
|
Rectangle stoneRec = bzTilesetGetTileRegion(tileset, getEntityTile(ENTITY_STONE));
|
||||||
|
Rectangle goldRec = bzTilesetGetTileRegion(tileset, getEntityTile(ENTITY_GOLD));
|
||||||
|
Rectangle popRec = bzTilesetGetTileRegion(tileset, getEntityTile(ENTITY_POP));
|
||||||
|
uiGameResCount(100, -1, woodRec, tileset->tiles);
|
||||||
|
uiGameResCount(100, -1, stoneRec, tileset->tiles);
|
||||||
|
uiGameResCount(100, -1, goldRec, tileset->tiles);
|
||||||
|
uiGameResCount(25, 100, popRec, tileset->tiles);
|
||||||
|
bzUIPopParent(UI);
|
||||||
|
|
||||||
|
|
||||||
|
bzUIEnd(UI);
|
||||||
|
|
||||||
DrawRectangle(0, 0, width, height, c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void renderMainMenu(Game *game, float dt) {
|
static void renderMainMenu(Game *game, float dt) {
|
||||||
i32 width = GetScreenWidth();
|
i32 width = GetScreenWidth();
|
||||||
i32 height = GetScreenHeight();
|
i32 height = GetScreenHeight();
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ Font getFont() {
|
|||||||
return game->font;
|
return game->font;
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiPushDivParentPercentage(f32 xPercent, f32 yPercent) {
|
BzUINode *uiPushDivParentPercentage(f32 xPercent, f32 yPercent) {
|
||||||
bzUIPushDiv(UI, (BzUISize) {
|
return bzUIPushDiv(UI, (BzUISize) {
|
||||||
.kind = BZ_UI_SIZE_REL_PARENT,
|
.kind = BZ_UI_SIZE_REL_PARENT,
|
||||||
.value = xPercent,
|
.value = xPercent,
|
||||||
}, (BzUISize) {
|
}, (BzUISize) {
|
||||||
@@ -201,3 +201,40 @@ void uiSettingsCheckbox(const char *txt, bool *check) {
|
|||||||
void uiSettingsSlider(const char *txt, f32 *value) {
|
void uiSettingsSlider(const char *txt, f32 *value) {
|
||||||
uiBaseSlider(txt, getFont(), 1.0f, value, 0, 10);
|
uiBaseSlider(txt, getFont(), 1.0f, value, 0, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uiGameResCount(i32 amount, i32 capacity, Rectangle icon, Texture2D texture) {
|
||||||
|
bzUIPushDiv(UI, (BzUISize) { BZ_UI_SIZE_CHILD_SUM },
|
||||||
|
(BzUISize) { BZ_UI_SIZE_CHILD_MAX });
|
||||||
|
bzUISetParentLayout(UI, (BzUILayout) {
|
||||||
|
BZ_UI_LAYOUT_FLEX_BOX,
|
||||||
|
BZ_UI_FLEX_DIR_ROW | BZ_UI_FLEX_ALIGN_CENTER
|
||||||
|
});
|
||||||
|
char buf[64];
|
||||||
|
BzUIKey id = bzUIGetUniqueKey(UI);
|
||||||
|
if (capacity == -1)
|
||||||
|
snprintf(buf, sizeof(buf), "%d##%d", amount, id);
|
||||||
|
else
|
||||||
|
snprintf(buf, sizeof(buf), "%d/%d##%d", amount, capacity, id);
|
||||||
|
const f32 scl = 0.4f;
|
||||||
|
uiBaseLabel(buf, getFont(), scl);
|
||||||
|
|
||||||
|
BzUINode *iconNode = bzUINodeMake(UI, id, &(BzUINodeDesc) {
|
||||||
|
.flags = BZ_UI_DRAW_SPRITE | BZ_UI_ALIGN_CENTER,
|
||||||
|
.semanticSize[BZ_UI_AXIS_X] = {
|
||||||
|
BZ_UI_SIZE_PIXELS, 80 * scl * uiGetScale(),
|
||||||
|
},
|
||||||
|
.semanticSize[BZ_UI_AXIS_Y] = {
|
||||||
|
BZ_UI_SIZE_PIXELS, 80 * scl * uiGetScale(),
|
||||||
|
},
|
||||||
|
.margin = {0, 0, 20 * uiGetScale(), 0}
|
||||||
|
});
|
||||||
|
bzUISetSpriteStyle(UI, iconNode, (BzUISpriteStyle) {
|
||||||
|
.rec = icon,
|
||||||
|
.texture = texture,
|
||||||
|
.tintNormal = WHITE,
|
||||||
|
.tintHover = WHITE,
|
||||||
|
.tintActive = WHITE,
|
||||||
|
});
|
||||||
|
|
||||||
|
bzUIPopParent(UI);
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ extern BzUI *UI; // defined in main.c
|
|||||||
|
|
||||||
f32 uiGetScale();
|
f32 uiGetScale();
|
||||||
|
|
||||||
void uiPushDivParentPercentage(f32 xPercent, f32 yPercent);
|
BzUINode *uiPushDivParentPercentage(f32 xPercent, f32 yPercent);
|
||||||
|
|
||||||
// Template stuff
|
// Template stuff
|
||||||
void uiBaseLabel(const char *txt, Font font, f32 scl);
|
void uiBaseLabel(const char *txt, Font font, f32 scl);
|
||||||
@@ -25,4 +25,6 @@ bool uiSettingsButton(const char *txt);
|
|||||||
void uiSettingsCheckbox(const char *txt, bool *check);
|
void uiSettingsCheckbox(const char *txt, bool *check);
|
||||||
void uiSettingsSlider(const char *txt, f32 *value);
|
void uiSettingsSlider(const char *txt, f32 *value);
|
||||||
|
|
||||||
|
void uiGameResCount(i32 amount, i32 capacity, Rectangle icon, Texture2D texture);
|
||||||
|
|
||||||
#endif //PIXELDEFENSE_UI_WIDGETS_H
|
#endif //PIXELDEFENSE_UI_WIDGETS_H
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ anim_writer = AnimationWriter(writer, "entity", "anim", entity_tiles)
|
|||||||
|
|
||||||
anim_writer.output_enum()
|
anim_writer.output_enum()
|
||||||
anim_writer.output_anim_enum()
|
anim_writer.output_anim_enum()
|
||||||
|
|
||||||
|
anim_writer.output_enum_to_tile("getEntityTile")
|
||||||
anim_writer.output_has_anim("entityHasAnimation")
|
anim_writer.output_has_anim("entityHasAnimation")
|
||||||
anim_writer.output_anim_sequence("entityGetAnimationSequence")
|
anim_writer.output_anim_sequence("entityGetAnimationSequence")
|
||||||
anim_writer.output_anim_frame("entityGetAnimationFrame")
|
anim_writer.output_anim_frame("entityGetAnimationFrame")
|
||||||
|
|||||||
Reference in New Issue
Block a user