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 | |
parent | c28b9fdb3c15248604d38717a03e98c78ac88961 (diff) |
Just in case some shit happens to my laptop
-rw-r--r-- | src/entities/antifaShip.c | 4 | ||||
-rw-r--r-- | src/entities/soldato.c | 2 | ||||
-rw-r--r-- | src/entities/soldato.h | 2 | ||||
-rw-r--r-- | src/gameScreen.c | 79 | ||||
-rw-r--r-- | src/gameScreen.h | 5 |
5 files changed, 80 insertions, 12 deletions
diff --git a/src/entities/antifaShip.c b/src/entities/antifaShip.c index 2b98721..b90060e 100644 --- a/src/entities/antifaShip.c +++ b/src/entities/antifaShip.c @@ -204,6 +204,10 @@ void controlAntifaShipKeyboardAndMouse(Game * game, Entity * entity) { data->lastMouse = Vector2Zero(); } + // Kill me hehehe + if (IsKeyPressed(KEY_K)) + entity->health = 0.0; + // Shoot bullet. if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) toggleAntifaShipAutoTarget(game, entity); diff --git a/src/entities/soldato.c b/src/entities/soldato.c index 8372345..3f548ac 100644 --- a/src/entities/soldato.c +++ b/src/entities/soldato.c @@ -154,14 +154,12 @@ void drawSoldato(Game * game, Entity * entity) { entityDraw(entity); // Debug gun. - /* Soldato * data = (Soldato*)entity->data; DrawLine3D( entity->position, Vector3Add(entity->position, Vector3Scale(data->gunTarget, SOLDATO_GUN_MAX_RANGE)), BLUE ); - */ /* Entity * leader; diff --git a/src/entities/soldato.h b/src/entities/soldato.h index 44d1c08..efde07d 100644 --- a/src/entities/soldato.h +++ b/src/entities/soldato.h @@ -8,7 +8,7 @@ #define SOLDATO_COOLDOWN 1.0 #define SOLDATO_AIM_RADIOUS 1.5 #define SOLDATO_BULLET_DAMAGE 0.01 -#define SOLDATO_GUN_TARGETING_SPEED 2.0 +#define SOLDATO_GUN_TARGETING_SPEED 10.0 // 3.0 #define SOLDATO_GUN_MAX_RANGE 400.0 #define SOLDATO_ROTATION_SPEED 0.5 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); diff --git a/src/gameScreen.h b/src/gameScreen.h index 6cf95de..5bcd288 100644 --- a/src/gameScreen.h +++ b/src/gameScreen.h @@ -16,6 +16,8 @@ #define GAME_SCREEN_SKY_BOX_SIZE 1020.0 +#define GAME_SCREEN_SHOW_GAME_OVER_FOR 2.0 + // Gui stuff and shit. typedef struct GameScreen { Vector2 infoTextPosition; @@ -30,6 +32,9 @@ typedef struct GameScreen { double timeAtLevelComplete; int lastLevel; + bool gameOver; + double gameOverAt; + RenderTexture zoomViewTexture; Vector2 zoomViewPosition; |