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 | |
parent | 95bdaa95050696cd36f12ea58c5df65dad23c4f5 (diff) |
Finally have a real game play loop
Diffstat (limited to 'src')
-rw-r--r-- | src/entities/antifaShip.c | 2 | ||||
-rw-r--r-- | src/entities/missile.c | 6 | ||||
-rw-r--r-- | src/entities/mussolini.c | 2 | ||||
-rw-r--r-- | src/gameScreen.c | 59 | ||||
-rw-r--r-- | src/gameScreen.h | 10 | ||||
-rw-r--r-- | src/levels.h | 1 |
6 files changed, 68 insertions, 12 deletions
diff --git a/src/entities/antifaShip.c b/src/entities/antifaShip.c index 0f64d14..15350cd 100644 --- a/src/entities/antifaShip.c +++ b/src/entities/antifaShip.c @@ -231,7 +231,7 @@ void controlAntifaShipKeyboardAndMouse(Game * game, Entity * entity) { else if (IsKeyDown(KEY_LEFT_CONTROL)) speedMod = game->settings.speedMod; - printf("%f\n", speedMod); + //printf("%f\n", speedMod); data->forwardSpeed += (speed * game->settings.scrollBarSpeed * speedMod); diff --git a/src/entities/missile.c b/src/entities/missile.c index beb167c..df0b48d 100644 --- a/src/entities/missile.c +++ b/src/entities/missile.c @@ -49,13 +49,13 @@ void updateMissile(Game * game, Entity * entity) { if (data->timeToLive != MISSILE_LIVE_FOREVER) if (GetTime() - data->birthDay >= data->timeToLive) { missileGoBoomBoom(game, entity); - puts("counted downa downasdjkfdjskl down"); + //puts("counted downa downasdjkfdjskl down"); } // We are quite close to the player indeed. if (Vector3Distance(player->position, entity->position) <= data->boomBoomAt) { missileGoBoomBoom(game, entity); - puts("you were fucking hit by this big ass missile"); + //puts("you were fucking hit by this big ass missile"); } entityCheckTransformedCollisionModel(entity); @@ -115,5 +115,5 @@ void missileGoBoomBoom(Game * game, Entity * entity) { entity->health = 0.0; - printf("This old fuck did %f damage at %f distance\n", damage, distance); + //printf("This old fuck did %f damage at %f distance\n", damage, distance); } diff --git a/src/entities/mussolini.c b/src/entities/mussolini.c index a7428da..95810b5 100644 --- a/src/entities/mussolini.c +++ b/src/entities/mussolini.c @@ -69,7 +69,7 @@ void updateMussoliniGuns(Game * game, Entity * entity) { startMissileCountDown(&missile, 4.0); scheduleEntityToAdd(&game->world, missile); - puts("shoot shoot"); + //puts("shoot shoot"); data->timeSinceLastMissile = t; } 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); diff --git a/src/gameScreen.h b/src/gameScreen.h index 5637feb..d2b058d 100644 --- a/src/gameScreen.h +++ b/src/gameScreen.h @@ -8,7 +8,7 @@ #define GAME_SCREEN_H #define GAME_SCREEN_TEXT_SIZE 20.0 -#define GAME_SCREEN_NEXT_LEVEL_DELAY 2.0 +#define GAME_SCREEN_NEXT_LEVEL_DELAY 4.0 #define GAME_SCREEN_TARGET_INFO_MAX 20 #define GAME_SCREEN_ZOOM_VIEW_SIZE 100 // Size it renders at. @@ -16,9 +16,12 @@ #define GAME_SCREEN_SKY_BOX_SIZE 1020.0 -#define GAME_SCREEN_SHOW_GAME_OVER_FOR 2.0 +#define GAME_SCREEN_SHOW_GAME_OVER_FOR 4.0 #define GAME_SCREEN_GAME_OVER_FONT_SIZE 100 +#define GAME_SCREEN_GAME_COMPLETE_SHOW_FOR 6.0 +#define GAME_SCREEN_GAME_COMPLETE_FONT_SIZE 100 + // Gui stuff and shit. typedef struct GameScreen { Vector2 infoTextPosition; @@ -40,6 +43,9 @@ typedef struct GameScreen { bool gameOver; double gameOverAt; + bool gameComplete; + double gameCompleteAt; + RenderTexture zoomViewTexture; Vector2 zoomViewPosition; diff --git a/src/levels.h b/src/levels.h index 9107715..f14ec71 100644 --- a/src/levels.h +++ b/src/levels.h @@ -6,6 +6,7 @@ #define LEVELS_H #define LEVELS_COUNT 13 +#define GAME_LEVELS_COMPLETE_AT 11 #define NO_LEVEL -1 |