aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent95bdaa95050696cd36f12ea58c5df65dad23c4f5 (diff)
Finally have a real game play loop
Diffstat (limited to 'src')
-rw-r--r--src/entities/antifaShip.c2
-rw-r--r--src/entities/missile.c6
-rw-r--r--src/entities/mussolini.c2
-rw-r--r--src/gameScreen.c59
-rw-r--r--src/gameScreen.h10
-rw-r--r--src/levels.h1
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