diff options
author | nathansmithsmith <nathansmith7@mailfence.com> | 2023-11-07 22:11:06 -0700 |
---|---|---|
committer | nathansmithsmith <nathansmith7@mailfence.com> | 2023-11-07 22:11:06 -0700 |
commit | 28f9f373667e1d676365c1d67d50221eda2c6379 (patch) | |
tree | f7bd490e42be6e68fe1725a565e705f264ab323b /src/gameScreen.c | |
parent | c28b9fdb3c15248604d38717a03e98c78ac88961 (diff) |
Just in case some shit happens to my laptop
Diffstat (limited to 'src/gameScreen.c')
-rw-r--r-- | src/gameScreen.c | 79 |
1 files changed, 70 insertions, 9 deletions
diff --git a/src/gameScreen.c b/src/gameScreen.c index d02e9be..e7c4a1d 100644 --- a/src/gameScreen.c +++ b/src/gameScreen.c @@ -21,15 +21,6 @@ void initGameScreenGui(GameScreen * gameScreen) { gameScreen->zoomViewPosition = (Vector2){width - GAME_SCREEN_ZOOM_VIEW_UI_SIZE - 20.0, 10.0}; gameScreen->killLogPosition = (Vector2){0.0, 40.0}; - - // Gyroscope indeed - initGyroscope(&gameScreen->gyroscope); - - // Radar indeed. - initRadar(&gameScreen->radar); - - gameScreen->mainCamera = FIRST_PERSON_CAMERA; - gameScreen->levelComplete = false; } void initGameScreen(Game * game, GameScreen * gameScreen) { @@ -46,6 +37,16 @@ void initGameScreen(Game * game, GameScreen * gameScreen) { // Zoom view. gameScreen->zoomViewTexture = LoadRenderTexture(GAME_SCREEN_ZOOM_VIEW_SIZE, GAME_SCREEN_ZOOM_VIEW_SIZE); + gameScreen->gameOver = false; + gameScreen->mainCamera = THIRD_PERSON_CAMERA; + gameScreen->levelComplete = false; + + // Gyroscope indeed + initGyroscope(&gameScreen->gyroscope); + + // Radar indeed. + initRadar(&gameScreen->radar); + initStars(&gameScreen->stars); } @@ -327,12 +328,72 @@ void drawZoomViewGameScreen(Game * game, GameScreen * gameScreen) { ); } +void drawGameOverGameScreen(Game * game, GameScreen * gameScreen) { + float width = GetScreenWidth(); + float height = GetScreenHeight(); + + Vector2 position = (Vector2){ + width / 2.0, + height / 2.0 + }; + + DrawText("Game Over", position.x, position.y, 100, WHITE); +} + +void resetGame(Game * game, GameScreen * gameScreen) { + gameScreen->gameOver = false; + gameScreen->lastLevel = 0; + gameScreen->levelComplete = false; + resetKillLog(&game->killLog); + + startLevel(game, &game->levels, 0); +} + +bool handleGameOver(Game * game, GameScreen * gameScreen) { + Entity * player = getEntityFromWorld(game->world, 0); + + // Already game over. + if (gameScreen->gameOver) { + + // To main after after so much time. + if (GetTime() - gameScreen->gameOverAt >= GAME_SCREEN_SHOW_GAME_OVER_FOR) { + closeGameScreen(game); + game->screenId = SCREEN_MAIN_MENU; + resetGame(game, gameScreen); + } + + return true; + } + + // Check if there is player. + if (!gameScreen->levelComplete) { + if (player == NULL) + gameScreen->gameOver = true; + else if (player->health <= 0.0) + gameScreen->gameOver = true; + } + + // End game ): + if (gameScreen->gameOver) { + gameScreen->gameOverAt = GetTime(); + endLevel(game, &game->levels); + } + + return gameScreen->gameOver; +} + void updateGameScreen(Game * game) { GameScreen * gameScreen = &game->gameScreen; handleGameScreenInput(game, gameScreen); ClearBackground(BLACK); + + // Game over ): + if (handleGameOver(game, gameScreen)) { + drawGameOverGameScreen(game, gameScreen); + return; + } // Levels indeed. gameScreenHandleLevels(game, gameScreen); |