Proper screen switching

This commit is contained in:
2024-01-02 12:28:09 +01:00
parent b48c353c14
commit ef274d93fd
2 changed files with 65 additions and 17 deletions

View File

@@ -6,6 +6,7 @@
typedef enum GameScreen {
SCREEN_GAME,
SCREEN_PAUSE_MENU,
SCREEN_MAIN_MENU,
SCREEN_SETTINGS,
} GameScreen;

View File

@@ -268,6 +268,14 @@ void update(float dt, void *userData) {
switch (game->screen) {
case SCREEN_GAME:
updatePlayerInput();
if (IsKeyReleased(input->mapping.backBtn)) {
game->screen = SCREEN_PAUSE_MENU;
}
break;
case SCREEN_PAUSE_MENU:
if (IsKeyReleased(input->mapping.backBtn)) {
game->screen = SCREEN_GAME;
}
break;
case SCREEN_MAIN_MENU:
break;
@@ -333,32 +341,34 @@ static void renderGame(Game *game, float dt) {
drawPlayerInputUI();
EndMode2D();
}
static void renderGameMenu(Game *game, float dt) {
// UI
i32 width = GetScreenWidth();
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
.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
.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,
.normal = topBarBG,
.hover = topBarBG,
.active = topBarBG,
});
BzTileset *tileset = &game->tileset;
Rectangle woodRec = bzTilesetGetTileRegion(tileset, getEntityTile(ENTITY_WOOD));
@@ -370,12 +380,47 @@ static void renderGame(Game *game, float dt) {
uiGameResCount(100, -1, stoneRec, tileset->tiles);
uiGameResCount(100, -1, foodRec, tileset->tiles);
uiGameResCount(250, -1, goldRec, tileset->tiles);
uiGameResCount(25, 100, popRec, tileset->tiles);
uiGameResCount(1, 10, popRec, tileset->tiles);
bzUIPopParent(UI);
bzUIEnd(UI);
}
static void renderPauseMenu(Game *game, float dt) {
i32 width = GetScreenWidth();
i32 height = GetScreenHeight();
game->camera.zoom = 3 * uiGetScale();
bzUIBegin(UI, width, height);
bzUISetParentLayout(UI, (BzUILayout) {
.type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN
});
uiPushDivParentPercentage(1.0f, 0.4f);
bzUISetParentLayout(UI, (BzUILayout) {
.type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_JUSTIFY_CENTER | BZ_UI_FLEX_ALIGN_CENTER
});
uiMainMenuLabel("Paused");
bzUIPopParent(UI);
uiPushDivParentPercentage(1.0f, 0.6f);
bzUISetParentLayout(UI, (BzUILayout) {
.type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER
});
if (uiMainMenuButton("Resume")) {
game->screen = SCREEN_GAME;
}
if (uiMainMenuButton("Exit")) {
game->screen = SCREEN_MAIN_MENU;
unloadMap(game);
loadMap(game, "assets/maps/main_menu_01.tmj");
}
bzUIPopParent(UI);
bzUIEnd(UI);
}
static void renderMainMenu(Game *game, float dt) {
@@ -403,7 +448,7 @@ static void renderMainMenu(Game *game, float dt) {
.type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER
});
if (uiMainMenuButton("Play") || true) {
if (uiMainMenuButton("Play")) {
game->screen = SCREEN_GAME;
unloadMap(game);
loadMap(game, "assets/maps/map_01.tmj");
@@ -477,16 +522,18 @@ void render(float dt, void *userData) {
Game *game = ecs_singleton_get_mut(ECS, Game);
const InputState *input = ecs_singleton_get(ECS, InputState);;
if (IsKeyReleased(input->mapping.backBtn)) {
game->screen = SCREEN_MAIN_MENU;
}
Color shadow = BLACK;
shadow.a = 35;
switch (game->screen) {
case SCREEN_GAME:
renderGame(game, dt);
renderGameMenu(game, dt);
break;
case SCREEN_PAUSE_MENU:
renderGame(game, dt);
drawOverScreen(shadow);
renderPauseMenu(game, dt);
break;
case SCREEN_MAIN_MENU:
renderGame(game, dt);