aboutsummaryrefslogtreecommitdiff
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
parentc28b9fdb3c15248604d38717a03e98c78ac88961 (diff)
Just in case some shit happens to my laptop
-rw-r--r--src/entities/antifaShip.c4
-rw-r--r--src/entities/soldato.c2
-rw-r--r--src/entities/soldato.h2
-rw-r--r--src/gameScreen.c79
-rw-r--r--src/gameScreen.h5
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;