aboutsummaryrefslogtreecommitdiff
path: root/src/gameScreen.c
diff options
context:
space:
mode:
authornathansmithsmith <thenathansmithsmith@gmail.com>2023-12-22 00:38:28 -0700
committernathansmithsmith <thenathansmithsmith@gmail.com>2023-12-22 00:38:28 -0700
commit123e581f76d58df67bcf041f510c529601dae502 (patch)
tree8814977a4b5e6dd9d5f1f2dcf5f68461aeeb54db /src/gameScreen.c
parent95bdaa95050696cd36f12ea58c5df65dad23c4f5 (diff)
Finally have a real game play loop
Diffstat (limited to 'src/gameScreen.c')
-rw-r--r--src/gameScreen.c59
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);