diff options
author | nathansmithsmith <thenathansmithsmith@gmail.com> | 2023-12-22 00:38:28 -0700 |
---|---|---|
committer | nathansmithsmith <thenathansmithsmith@gmail.com> | 2023-12-22 00:38:28 -0700 |
commit | 123e581f76d58df67bcf041f510c529601dae502 (patch) | |
tree | 8814977a4b5e6dd9d5f1f2dcf5f68461aeeb54db /src/gameScreen.c | |
parent | 95bdaa95050696cd36f12ea58c5df65dad23c4f5 (diff) |
Finally have a real game play loop
Diffstat (limited to 'src/gameScreen.c')
-rw-r--r-- | src/gameScreen.c | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/src/gameScreen.c b/src/gameScreen.c index 9b6dae5..ab228b2 100644 --- a/src/gameScreen.c +++ b/src/gameScreen.c @@ -54,6 +54,7 @@ void initGameScreen(Game * game, GameScreen * gameScreen) { gameScreen->levelComplete = false; gameScreen->healthAtLevelEnd = ENTITY_MAX_HEALTH; gameScreen->nextLevelInsultNum = 0; + gameScreen->gameComplete = false; // Gyroscope indeed initGyroscope(&gameScreen->gyroscope); @@ -244,20 +245,25 @@ void drawNextLevelScreen(Game * game, GameScreen * gameScreen) { DrawText( insult, - (width / 2.0) - (20.0 * strlen(insult) / 4.0), + (width / 2.0) - (GAME_SCREEN_TEXT_SIZE * strlen(insult) / 4.0), height / 3.0 + 70.0, - 20, + GAME_SCREEN_TEXT_SIZE, GREEN ); } +void callThisFuckerAtGameComplete(Game * game, GameScreen * gameScreen) { + gameScreen->gameComplete = true; + gameScreen->gameCompleteAt = GetTime(); +} + 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) { + if (GetTime() - gameScreen->timeAtLevelComplete >= GAME_SCREEN_NEXT_LEVEL_DELAY || IsKeyPressed(KEY_SPACE)) { gameScreen->levelComplete = false; startLevel(game, &game->levels, gameScreen->lastLevel + 1); getEntityFromWorld(game->world, 0)->health = Clamp(gameScreen->healthAtLevelEnd * 1.5, 0.0, 1.0); @@ -273,6 +279,10 @@ void gameScreenHandleLevels(Game * game, GameScreen * gameScreen) { gameScreen->lastLevel = game->levels.currentLevel; gameScreen->healthAtLevelEnd = getEntityFromWorld(game->world, 0)->health; + // Game is complete lol. + if (game->levels.currentLevel == GAME_LEVELS_COMPLETE_AT) + callThisFuckerAtGameComplete(game, gameScreen); + endLevel(game, &game->levels); gameScreen->levelComplete = true; @@ -372,13 +382,14 @@ void drawGameOverGameScreen(Game * game, GameScreen * gameScreen) { height / 3.0 }; - DrawText(gameOverMsg, position.x, position.y, GAME_SCREEN_GAME_OVER_FONT_SIZE, WHITE); + DrawText(gameOverMsg, position.x, position.y, GAME_SCREEN_GAME_OVER_FONT_SIZE, GREEN); } void resetGame(Game * game, GameScreen * gameScreen) { gameScreen->gameOver = false; gameScreen->lastLevel = 0; gameScreen->levelComplete = false; + gameScreen->gameComplete = false; resetKillLog(&game->killLog); startLevel(game, &game->levels, 0); @@ -391,7 +402,7 @@ bool handleGameOver(Game * game, GameScreen * gameScreen) { if (gameScreen->gameOver) { // To main after after so much time. - if (GetTime() - gameScreen->gameOverAt >= GAME_SCREEN_SHOW_GAME_OVER_FOR) { + if (GetTime() - gameScreen->gameOverAt >= GAME_SCREEN_SHOW_GAME_OVER_FOR || IsKeyPressed(KEY_SPACE)) { closeGameScreen(game); game->screenId = SCREEN_MAIN_MENU; resetGame(game, gameScreen); @@ -417,6 +428,38 @@ bool handleGameOver(Game * game, GameScreen * gameScreen) { return gameScreen->gameOver; } +void handleGameComplete(Game * game, GameScreen * gameScreen) { + float width = GetScreenWidth(); + float height = GetScreenHeight(); + + const char gameCompleteMsg[] = "Game Complete"; + + // Game over message. + Vector2 position = (Vector2){ + width / 2.0 - ((sizeof(gameCompleteMsg) + 1) * (GAME_SCREEN_GAME_COMPLETE_FONT_SIZE / 2.0) / 2.0), + height / 3.0 + }; + + DrawText(gameCompleteMsg, position.x, position.y, GAME_SCREEN_GAME_COMPLETE_FONT_SIZE, GREEN); + + // Funny little shitty message. + const char funnyLittleMsg[] = "I guess you don't completely suck at this game lmao"; + + position = (Vector2){ + width / 2.0 - ((sizeof(funnyLittleMsg) + 1) * (GAME_SCREEN_TEXT_SIZE / 2.0) / 2.0), + height / 3.0 + GAME_SCREEN_GAME_COMPLETE_FONT_SIZE + 10 + }; + + DrawText(funnyLittleMsg, position.x, position.y, GAME_SCREEN_TEXT_SIZE, GREEN); + + // End game. + if (GetTime() - gameScreen->gameCompleteAt >= GAME_SCREEN_GAME_COMPLETE_SHOW_FOR || IsKeyPressed(KEY_SPACE)) { + closeGameScreen(game); + game->screenId = SCREEN_MAIN_MENU; + resetGame(game, gameScreen); + } +} + void updateGameScreen(Game * game) { GameScreen * gameScreen = &game->gameScreen; @@ -429,6 +472,12 @@ void updateGameScreen(Game * game) { drawGameOverGameScreen(game, gameScreen); return; } + + // Game complete stuff. + if (gameScreen->gameComplete) { + handleGameComplete(game, gameScreen); + return; + } // Levels indeed. gameScreenHandleLevels(game, gameScreen); |