diff options
Diffstat (limited to 'src/levels/level5.c')
-rw-r--r-- | src/levels/level5.c | 86 |
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; +} |