diff options
Diffstat (limited to 'src/levels/level3.c')
-rw-r--r-- | src/levels/level3.c | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/src/levels/level3.c b/src/levels/level3.c index 799a5ee..4d688fc 100644 --- a/src/levels/level3.c +++ b/src/levels/level3.c @@ -1,8 +1,19 @@ #include "level3.h" #include "game.h" #include "world.h" +#include "entityGrouping.h" void initLevel3(Game * game, Levels * levels) { + levels->data = KF_MALLOC((sizeof(Level3))); + + if (levels->data == NULL) { + ALLOCATION_ERROR; + return; + } + + Level3 * data = (Level3*)levels->data; + data->stage = 0; + WorldEntry entries[] = { (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()}, (WorldEntry){ENTITY_CAPORALE, (Vector3){0.0, 0.0, 300.0}, QuaternionIdentity()} @@ -17,12 +28,43 @@ void initLevel3(Game * game, Levels * levels) { } void closelevel3(Levels * levels) { - + if (levels->data != NULL) + KF_FREE(levels->data); } bool updateLevel3(Game * game, Levels * levels) { - if (game->world.entitiesCount == 1) - return true; + int i; + Level3 * data = (Level3*)levels->data; + bool levelDone = false; + + Vector3 groups[] = { + (Vector3){0.0, 0.0, 800.0}, + (Vector3){0.0, 0.0, -800.0} + }; + + switch (data->stage) { + case 0: + if (game->world.entitiesCount == 1) { + Vector3 playerPosition = getEntityFromWorld(game->world, 0)->position; + Vector3 spacing = (Vector3){0.0, 15.0, 15.0}; + + for (i = 0; i < sizeof(groups) / sizeof(Vector3); ++i) + addSoldatoGroupWithLeader(game, ENTITY_CAPORALE, 3, Vector3Add(groups[i], playerPosition), spacing); + + data->stage = 1; + } + + break; + case 1: + if (game->world.entitiesCount == 1) { + levelDone = true; + } + + break; + default: + levelDone = true; + break; + } - return false; + return levelDone; } |