aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornathansmithsmith <thenathansmithsmith@gmail.com>2023-12-04 11:47:23 -0700
committernathansmithsmith <thenathansmithsmith@gmail.com>2023-12-04 11:47:23 -0700
commita3957cac6cbc33f5ec88b9c15aeaf267f2bcd6b8 (patch)
treefa7e1b96442c4b1db00202dde879225ee5150346
parent305fb5484044dd17d3db21930882ba7ba541bf7f (diff)
Made level 5
-rw-r--r--src/entities/sergente.c6
-rw-r--r--src/game.c2
-rw-r--r--src/gameScreen.c2
-rw-r--r--src/levels.c1
-rw-r--r--src/levels.h2
-rw-r--r--src/levels/level5.c86
-rw-r--r--src/levels/level5.h15
-rw-r--r--src/levelsInclude.h1
8 files changed, 108 insertions, 7 deletions
diff --git a/src/entities/sergente.c b/src/entities/sergente.c
index 0721d1e..39baf85 100644
--- a/src/entities/sergente.c
+++ b/src/entities/sergente.c
@@ -1,10 +1,6 @@
#include "sergente.h"
#include "assets.h"
#include "game.h"
-#include <float.h>
-#include <limits.h>
-#include <raylib.h>
-#include <raymath.h>
void initSergente(Entity * entity, Game * game) {
entity->model = &game->assets.models[SERGENTE_ASSET];
@@ -12,6 +8,8 @@ void initSergente(Entity * entity, Game * game) {
entity->transformedCollisionModel = entityCreateCollisionModel(*entity->model);
setEntityRadius(entity);
+ entity->health = 0.375;
+
// Allocate data.
entity->data = KF_MALLOC(sizeof(Sergente));
diff --git a/src/game.c b/src/game.c
index 8cdd793..84366aa 100644
--- a/src/game.c
+++ b/src/game.c
@@ -33,7 +33,7 @@ void initGame(Game * game) {
// Levels.
initLevels(&game->levels);
- startLevel(game, &game->levels, 3);
+ startLevel(game, &game->levels, 4);
}
void closeGame(Game * game) {
diff --git a/src/gameScreen.c b/src/gameScreen.c
index 82e96f2..ff9b4d3 100644
--- a/src/gameScreen.c
+++ b/src/gameScreen.c
@@ -217,7 +217,7 @@ void drawNextLevelScreen(Game * game, GameScreen * gameScreen) {
buf,
bufSize,
"Level %d complete",
- game->levels.currentLevel + 1
+ gameScreen->lastLevel + 1
);
DrawText(
diff --git a/src/levels.c b/src/levels.c
index c41456f..3eee7c4 100644
--- a/src/levels.c
+++ b/src/levels.c
@@ -9,6 +9,7 @@ const LevelInfo levelInfoList[LEVELS_COUNT] = {
(LevelInfo){initLevel2, closelevel2, updateLevel2},
(LevelInfo){initLevel3, closelevel3, updateLevel3},
(LevelInfo){initLevel4, closelevel4, updateLevel4},
+ (LevelInfo){initLevel5, closelevel5, updateLevel5},
(LevelInfo){initTestLevel, closeTestLevel, updateTestLevel}
};
diff --git a/src/levels.h b/src/levels.h
index 2c24536..d9230a8 100644
--- a/src/levels.h
+++ b/src/levels.h
@@ -5,7 +5,7 @@
#ifndef LEVELS_H
#define LEVELS_H
-#define LEVELS_COUNT 5
+#define LEVELS_COUNT 6
#define NO_LEVEL -1
diff --git a/src/levels/level5.c b/src/levels/level5.c
new file mode 100644
index 0000000..d08cec6
--- /dev/null
+++ b/src/levels/level5.c
@@ -0,0 +1,86 @@
+#include "level5.h"
+#include "game.h"
+#include "world.h"
+#include "entityGrouping.h"
+
+void initLevel5(Game * game, Levels * levels) {
+ levels->data = KF_MALLOC(sizeof(Level5));
+
+ if (levels->data == NULL) {
+ ALLOCATION_ERROR;
+ return;
+ }
+
+ Level5 * data = (Level5*)levels->data;
+ data->stage = 0;
+
+ WorldEntry entries[] = {
+ (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()},
+ (WorldEntry){ENTITY_SERGENTE, (Vector3){0.0, 0.0, 300.0}, QuaternionIdentity()}
+ };
+
+ addEntriesToWorld(
+ &game->world,
+ game,
+ entries,
+ sizeof(entries) / sizeof(WorldEntry)
+ );
+}
+
+void closelevel5(Levels * levels) {
+ if (levels->data != NULL)
+ KF_FREE(levels->data);
+}
+
+bool updateLevel5(Game * game, Levels * levels) {
+ Level5 * data = (Level5*)levels->data;
+ bool levelDone = false;
+ Vector3 playerPosition = getEntityFromWorld(game->world, 0)->position;
+
+ switch (data->stage) {
+ case 0:
+ if (game->world.entitiesCount == 1) {
+ WorldEntry entries[] = {
+ (WorldEntry){ENTITY_SERGENTE, Vector3Add((Vector3){0.0, 0.0, 800.0}, playerPosition), QuaternionIdentity()},
+ (WorldEntry){ENTITY_SERGENTE, Vector3Add((Vector3){0.0, 0.0, -800.0}, playerPosition), QuaternionIdentity()},
+ (WorldEntry){ENTITY_SERGENTE, Vector3Add((Vector3){0.0, 800.0, 0.0}, playerPosition), QuaternionIdentity()},
+ (WorldEntry){ENTITY_SERGENTE, Vector3Add((Vector3){0.0, -800.0, 0.0}, playerPosition), QuaternionIdentity()}
+ };
+
+ addEntriesToWorld(
+ &game->world,
+ game,
+ entries,
+ sizeof(entries) / sizeof(WorldEntry)
+ );
+
+ data->stage = 1;
+ }
+
+ break;
+ case 1:
+ if (game->world.entitiesCount == 1) {
+ addEntityGroupToWorld(
+ game,
+ ENTITY_SOLDATO,
+ 10,
+ Vector3Add((Vector3){1000.0, 0.0, 1000.0}, playerPosition),
+ (Vector3){0.0, 10.0, 10.0}
+ );
+
+ data->stage = 2;
+ }
+
+ break;
+ case 2:
+ if (game->world.entitiesCount == 1)
+ levelDone = true;
+
+ break;
+ default:
+ levelDone = true;
+ break;
+ }
+
+ return levelDone;
+}
diff --git a/src/levels/level5.h b/src/levels/level5.h
new file mode 100644
index 0000000..ecf60df
--- /dev/null
+++ b/src/levels/level5.h
@@ -0,0 +1,15 @@
+#include "gameCommon.h"
+#include "levels.h"
+
+#ifndef LEVEL5_H
+#define LEVEL5_H
+
+typedef struct Level5 {
+ int stage;
+} Level5;
+
+void initLevel5(Game * game, Levels * levels);
+void closelevel5(Levels * levels);
+bool updateLevel5(Game * game, Levels * levels);
+
+#endif
diff --git a/src/levelsInclude.h b/src/levelsInclude.h
index 15a2988..6d76c7c 100644
--- a/src/levelsInclude.h
+++ b/src/levelsInclude.h
@@ -3,5 +3,6 @@
#include "levels/level2.h"
#include "levels/level3.h"
#include "levels/level4.h"
+#include "levels/level5.h"
// As you can tell I fucking hate your stupid fat ass