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 { typedef enum GameScreen {
SCREEN_GAME, SCREEN_GAME,
SCREEN_PAUSE_MENU,
SCREEN_MAIN_MENU, SCREEN_MAIN_MENU,
SCREEN_SETTINGS, SCREEN_SETTINGS,
} GameScreen; } GameScreen;

View File

@@ -268,6 +268,14 @@ void update(float dt, void *userData) {
switch (game->screen) { switch (game->screen) {
case SCREEN_GAME: case SCREEN_GAME:
updatePlayerInput(); 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; break;
case SCREEN_MAIN_MENU: case SCREEN_MAIN_MENU:
break; break;
@@ -333,32 +341,34 @@ static void renderGame(Game *game, float dt) {
drawPlayerInputUI(); drawPlayerInputUI();
EndMode2D(); EndMode2D();
}
static void renderGameMenu(Game *game, float dt) {
// UI // UI
i32 width = GetScreenWidth(); i32 width = GetScreenWidth();
i32 height = GetScreenHeight(); i32 height = GetScreenHeight();
bzUIBegin(UI, width, height); bzUIBegin(UI, width, height);
bzUISetParentLayout(UI, (BzUILayout) { bzUISetParentLayout(UI, (BzUILayout) {
.type = BZ_UI_LAYOUT_FLEX_BOX, .type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN | .flags = BZ_UI_FLEX_DIR_COLUMN |
BZ_UI_FLEX_JUSTIFY_SPACE_BETWEEN | BZ_UI_FLEX_JUSTIFY_SPACE_BETWEEN |
BZ_UI_FLEX_ALIGN_CENTER BZ_UI_FLEX_ALIGN_CENTER
}); });
// top bar // top bar
f32 topBarHeight = 0.05f; f32 topBarHeight = 0.05f;
BzUINode *topBar = uiPushDivParentPercentage(1.0f, topBarHeight); BzUINode *topBar = uiPushDivParentPercentage(1.0f, topBarHeight);
bzUISetParentLayout(UI, (BzUILayout) { bzUISetParentLayout(UI, (BzUILayout) {
.type = BZ_UI_LAYOUT_FLEX_BOX, .type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_ROW | .flags = BZ_UI_FLEX_DIR_ROW |
BZ_UI_FLEX_ALIGN_CENTER | BZ_UI_FLEX_ALIGN_CENTER |
BZ_UI_FLEX_JUSTIFY_START BZ_UI_FLEX_JUSTIFY_START
}); });
Color topBarBG = {0, 0, 0, 50}; Color topBarBG = {0, 0, 0, 50};
bzUISetBackgroundStyle(UI, topBar, (BzUIBackgroundStyle) { bzUISetBackgroundStyle(UI, topBar, (BzUIBackgroundStyle) {
.normal = topBarBG, .normal = topBarBG,
.hover = topBarBG, .hover = topBarBG,
.active = topBarBG, .active = topBarBG,
}); });
BzTileset *tileset = &game->tileset; BzTileset *tileset = &game->tileset;
Rectangle woodRec = bzTilesetGetTileRegion(tileset, getEntityTile(ENTITY_WOOD)); 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, stoneRec, tileset->tiles);
uiGameResCount(100, -1, foodRec, tileset->tiles); uiGameResCount(100, -1, foodRec, tileset->tiles);
uiGameResCount(250, -1, goldRec, tileset->tiles); uiGameResCount(250, -1, goldRec, tileset->tiles);
uiGameResCount(25, 100, popRec, tileset->tiles); uiGameResCount(1, 10, popRec, tileset->tiles);
bzUIPopParent(UI); bzUIPopParent(UI);
bzUIEnd(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) { static void renderMainMenu(Game *game, float dt) {
@@ -403,7 +448,7 @@ static void renderMainMenu(Game *game, float dt) {
.type = BZ_UI_LAYOUT_FLEX_BOX, .type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER .flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER
}); });
if (uiMainMenuButton("Play") || true) { if (uiMainMenuButton("Play")) {
game->screen = SCREEN_GAME; game->screen = SCREEN_GAME;
unloadMap(game); unloadMap(game);
loadMap(game, "assets/maps/map_01.tmj"); 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); Game *game = ecs_singleton_get_mut(ECS, Game);
const InputState *input = ecs_singleton_get(ECS, InputState);; const InputState *input = ecs_singleton_get(ECS, InputState);;
if (IsKeyReleased(input->mapping.backBtn)) {
game->screen = SCREEN_MAIN_MENU;
}
Color shadow = BLACK; Color shadow = BLACK;
shadow.a = 35; shadow.a = 35;
switch (game->screen) { switch (game->screen) {
case SCREEN_GAME: case SCREEN_GAME:
renderGame(game, dt); renderGame(game, dt);
renderGameMenu(game, dt);
break;
case SCREEN_PAUSE_MENU:
renderGame(game, dt);
drawOverScreen(shadow);
renderPauseMenu(game, dt);
break; break;
case SCREEN_MAIN_MENU: case SCREEN_MAIN_MENU:
renderGame(game, dt); renderGame(game, dt);