diff options
Diffstat (limited to 'src/levels/level6.c')
-rw-r--r-- | src/levels/level6.c | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/levels/level6.c b/src/levels/level6.c index 37397ea..633d336 100644 --- a/src/levels/level6.c +++ b/src/levels/level6.c @@ -1,9 +1,20 @@ +#include "level6.h" #include "game.h" #include "world.h" #include "entity.h" #include "entityGrouping.h" void initLevel6(Game * game, Levels * levels) { + levels->data = KF_MALLOC(sizeof(Level6)); + + if (levels->data == NULL) { + ALLOCATION_ERROR; + return; + } + + Level6 * data = (Level6*)levels->data; + data->stage = 0; + // Add player. WorldEntry entries[] = { (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()}, @@ -19,8 +30,46 @@ void initLevel6(Game * game, Levels * levels) { } void closelevel6(Levels * levels) { + if (levels->data != NULL) + KF_FREE(levels->data); } bool updateLevel6(Game * game, Levels * levels) { - return false; + Level6 * data = (Level6*)levels->data; + bool levelDone = false; + + switch (data->stage) { + case 0: + if (game->world.entitiesCount == 1) { + Vector3 playerPosition = getEntityFromWorld(game->world, 0)->position; + + WorldEntry entries[] = { + (WorldEntry){ENTITY_SERGENTE, + Vector3Add((Vector3){400.0, 400.0, 400.0}, playerPosition), QuaternionIdentity()}, + (WorldEntry){ENTITY_SERGENTE, + Vector3Add((Vector3){-400.0, -400.0, -400.0}, playerPosition), QuaternionIdentity()} + }; + + addEntriesToWorld( + &game->world, + game, + entries, + sizeof(entries) / sizeof(WorldEntry) + ); + + data->stage = 1; + } + + break; + case 1: + if (game->world.entitiesCount == 1) + levelDone = true; + + break; + default: + levelDone = true; + break; + } + + return levelDone; } |