aboutsummaryrefslogtreecommitdiff
path: root/src/levels/level5.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/levels/level5.c')
-rw-r--r--src/levels/level5.c86
1 files changed, 86 insertions, 0 deletions
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;
+}