aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornathansmithsmith <nathansmith7@mailfence.com>2023-10-03 13:50:23 -0600
committernathansmithsmith <nathansmith7@mailfence.com>2023-10-03 13:50:23 -0600
commit0aaad98b1f7d8a2e3021a5ef350be8e8a026cee2 (patch)
tree08b4a72e377947d329249161ae1982169b17672c /src
parent2bd87ba9d98973e59e89fab4be60ce4ef4cf95ae (diff)
Levels working
Diffstat (limited to 'src')
-rw-r--r--src/entities/antifaShip.c1
-rw-r--r--src/gameScreen.c57
-rw-r--r--src/gameScreen.h5
-rw-r--r--src/levels.c4
-rw-r--r--src/levels/level1.c12
5 files changed, 76 insertions, 3 deletions
diff --git a/src/entities/antifaShip.c b/src/entities/antifaShip.c
index bd64545..36d438c 100644
--- a/src/entities/antifaShip.c
+++ b/src/entities/antifaShip.c
@@ -82,6 +82,7 @@ void controlAntifaShipKeyboardAndMouse(Game * game, Entity * entity) {
if (data->shouldInitMousePosition) {
data->shouldInitMousePosition = false;
SetMousePosition(0, 0);
+ data->lastMouse = Vector2Zero();
}
// Get mouse values.
diff --git a/src/gameScreen.c b/src/gameScreen.c
index ba5981a..b956059 100644
--- a/src/gameScreen.c
+++ b/src/gameScreen.c
@@ -18,6 +18,7 @@ void initGameScreenGui(GameScreen * gameScreen) {
initRadar(&gameScreen->radar);
gameScreen->mainCamera = FIRST_PERSON_CAMERA;
+ gameScreen->levelComplete = false;
}
void initGameScreen(GameScreen * gameScreen) {
@@ -105,13 +106,69 @@ void handleGameScreenInput(Game * game, GameScreen * gameScreen) {
}
}
+void drawNextLevelScreen(Game * game, GameScreen * gameScreen) {
+ float width = GetScreenWidth();
+ float height = GetScreenHeight();
+
+ size_t bufSize = 100;
+ char buf[bufSize];
+
+ // Complete message.
+ snprintf(
+ buf,
+ bufSize,
+ "Level %d complete",
+ game->levels.currentLevel + 1
+ );
+
+ DrawText(
+ buf,
+ (width / 2.0) - (50.0 * strnlen(buf, bufSize) / 4.0),
+ height / 3.0,
+ 50,
+ GREEN
+ );
+}
+
+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) {
+ gameScreen->levelComplete = false;
+ startLevel(game, &game->levels, gameScreen->lastLevel + 1);
+ }
+
+ return;
+ }
+
+ bool complete = updateLevel(game, &game->levels);
+
+ // This fucker been completed.
+ if (complete) {
+ gameScreen->lastLevel = game->levels.currentLevel;
+ endLevel(game, &game->levels);
+ gameScreen->levelComplete = true;
+ gameScreen->timeAtLevelComplete = GetTime();
+ }
+}
+
void updateGameScreen(Game * game) {
GameScreen * gameScreen = &game->gameScreen;
handleGameScreenInput(game, gameScreen);
ClearBackground(BLACK);
+
+ // Levels indeed.
+ gameScreenHandleLevels(game, gameScreen);
+
+ if (gameScreen->levelComplete)
+ return;
+ // GUI.
drawGameScreenGui(game);
// Update world.
diff --git a/src/gameScreen.h b/src/gameScreen.h
index f12b8ea..1fdf089 100644
--- a/src/gameScreen.h
+++ b/src/gameScreen.h
@@ -7,6 +7,7 @@
#define GAME_SCREEN_H
#define GAME_SCREEN_TEXT_SIZE 20.0
+#define GAME_SCREEN_NEXT_LEVEL_DELAY 2.0
// Gui stuff and shit.
typedef struct GameScreen {
@@ -14,6 +15,10 @@ typedef struct GameScreen {
Gyroscope gyroscope;
Radar radar;
CameraId mainCamera;
+
+ bool levelComplete;
+ double timeAtLevelComplete;
+ int lastLevel;
} GameScreen;
void initGameScreen(GameScreen * gameScreen);
diff --git a/src/levels.c b/src/levels.c
index 50034c1..a5b29d4 100644
--- a/src/levels.c
+++ b/src/levels.c
@@ -4,8 +4,8 @@
#include "levelsInclude.h"
const LevelInfo levelInfoList[LEVELS_COUNT] = {
- (LevelInfo){initTestLevel, closeTestLevel, updateTestLevel},
- (LevelInfo){initLevel1, closelevel1, updateLevel1}
+ (LevelInfo){initLevel1, closelevel1, updateLevel1},
+ (LevelInfo){initTestLevel, closeTestLevel, updateTestLevel}
};
void initLevels(Levels * levels) {
diff --git a/src/levels/level1.c b/src/levels/level1.c
index f473c85..2706418 100644
--- a/src/levels/level1.c
+++ b/src/levels/level1.c
@@ -4,12 +4,22 @@
#include "entity.h"
void initLevel1(Game * game, Levels * levels) {
+ WorldEntry entries[] = {
+ (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()}
+ };
+
+ addEntriesToWorld(
+ &game->world,
+ game,
+ entries,
+ sizeof(entries) / sizeof(WorldEntry)
+ );
}
void closelevel1(Levels * levels) {
}
bool updateLevel1(Game * game, Levels * levels) {
- return false;
+ return IsKeyDown(KEY_G);
}