Proper screen switching
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
81
game/main.c
81
game/main.c
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user