diff options
author | nathansmithsmith <nathansmith7@mailfence.com> | 2023-10-03 13:50:23 -0600 |
---|---|---|
committer | nathansmithsmith <nathansmith7@mailfence.com> | 2023-10-03 13:50:23 -0600 |
commit | 0aaad98b1f7d8a2e3021a5ef350be8e8a026cee2 (patch) | |
tree | 08b4a72e377947d329249161ae1982169b17672c /src/gameScreen.c | |
parent | 2bd87ba9d98973e59e89fab4be60ce4ef4cf95ae (diff) |
Levels working
Diffstat (limited to 'src/gameScreen.c')
-rw-r--r-- | src/gameScreen.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/gameScreen.c b/src/gameScreen.c index ba5981a..b956059 100644 --- a/src/gameScreen.c +++ b/src/gameScreen.c @@ -18,6 +18,7 @@ void initGameScreenGui(GameScreen * gameScreen) { initRadar(&gameScreen->radar); gameScreen->mainCamera = FIRST_PERSON_CAMERA; + gameScreen->levelComplete = false; } void initGameScreen(GameScreen * gameScreen) { @@ -105,13 +106,69 @@ void handleGameScreenInput(Game * game, GameScreen * gameScreen) { } } +void drawNextLevelScreen(Game * game, GameScreen * gameScreen) { + float width = GetScreenWidth(); + float height = GetScreenHeight(); + + size_t bufSize = 100; + char buf[bufSize]; + + // Complete message. + snprintf( + buf, + bufSize, + "Level %d complete", + game->levels.currentLevel + 1 + ); + + DrawText( + buf, + (width / 2.0) - (50.0 * strnlen(buf, bufSize) / 4.0), + height / 3.0, + 50, + GREEN + ); +} + +void gameScreenHandleLevels(Game * game, GameScreen * gameScreen) { + // Show complete screen if level complete. + if (gameScreen->levelComplete) { + drawNextLevelScreen(game, gameScreen); + + // Next fucking level. + if (GetTime() - gameScreen->timeAtLevelComplete >= GAME_SCREEN_NEXT_LEVEL_DELAY) { + gameScreen->levelComplete = false; + startLevel(game, &game->levels, gameScreen->lastLevel + 1); + } + + return; + } + + bool complete = updateLevel(game, &game->levels); + + // This fucker been completed. + if (complete) { + gameScreen->lastLevel = game->levels.currentLevel; + endLevel(game, &game->levels); + gameScreen->levelComplete = true; + gameScreen->timeAtLevelComplete = GetTime(); + } +} + void updateGameScreen(Game * game) { GameScreen * gameScreen = &game->gameScreen; handleGameScreenInput(game, gameScreen); ClearBackground(BLACK); + + // Levels indeed. + gameScreenHandleLevels(game, gameScreen); + + if (gameScreen->levelComplete) + return; + // GUI. drawGameScreenGui(game); // Update world. |