aboutsummaryrefslogtreecommitdiff
path: root/src/gameScreen.c
diff options
context:
space:
mode:
authornathansmithsmith <nathansmith7@mailfence.com>2023-11-07 22:11:06 -0700
committernathansmithsmith <nathansmith7@mailfence.com>2023-11-07 22:11:06 -0700
commit28f9f373667e1d676365c1d67d50221eda2c6379 (patch)
treef7bd490e42be6e68fe1725a565e705f264ab323b /src/gameScreen.c
parentc28b9fdb3c15248604d38717a03e98c78ac88961 (diff)
Just in case some shit happens to my laptop
Diffstat (limited to 'src/gameScreen.c')
-rw-r--r--src/gameScreen.c79
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);