Proper screen switching
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
|
||||
typedef enum GameScreen {
|
||||
SCREEN_GAME,
|
||||
SCREEN_PAUSE_MENU,
|
||||
SCREEN_MAIN_MENU,
|
||||
SCREEN_SETTINGS,
|
||||
} GameScreen;
|
||||
|
||||
81
game/main.c
81
game/main.c
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user