diff options
author | nathansmithsmith <thenathansmithsmith@gmail.com> | 2023-11-17 18:47:34 -0700 |
---|---|---|
committer | nathansmithsmith <thenathansmithsmith@gmail.com> | 2023-11-17 18:47:34 -0700 |
commit | 6e10d35ca6dc47b2b3ad47dbce0f5c6245a8da72 (patch) | |
tree | dc1601132a1d908c9b51eed56f456b472fcdaddd | |
parent | e7008ea5e51d657782d8facbf52e988bf3f9f7e1 (diff) |
Starting on level 1
-rw-r--r-- | src/entities/antifaShip.h | 2 | ||||
-rw-r--r-- | src/entities/soldato.c | 23 | ||||
-rw-r--r-- | src/entities/soldato.h | 2 | ||||
-rw-r--r-- | src/levels/level1.c | 50 | ||||
-rw-r--r-- | src/levels/level1.h | 4 | ||||
-rw-r--r-- | src/levels/level2.c | 34 | ||||
-rw-r--r-- | src/levels/level2.h | 11 |
7 files changed, 119 insertions, 7 deletions
diff --git a/src/entities/antifaShip.h b/src/entities/antifaShip.h index a99e419..c88cde4 100644 --- a/src/entities/antifaShip.h +++ b/src/entities/antifaShip.h @@ -8,7 +8,7 @@ #define ANTIFA_SHIP_MAX_SPEED 200.0 #define ANTIFA_BULLET_COOLDOWN 0.5 #define ANTIFA_DRAW_BULLET_FOR 0.05 -#define ANTIFA_BULLET_DAMAGE 0.5 +#define ANTIFA_BULLET_DAMAGE 0.125 // Auto target shit. #define ANTIFA_START_AUTO_TARGET_MAX 0.5 // How far off auto target can be entail it drops. diff --git a/src/entities/soldato.c b/src/entities/soldato.c index 28e9b67..917a615 100644 --- a/src/entities/soldato.c +++ b/src/entities/soldato.c @@ -1,5 +1,7 @@ #include "soldato.h" #include "game.h" +#include "entity.h" +#include "world.h" void initSoldato(Entity * entity, Game * game) { entity->model = &game->assets.models[SOLDATO_ASSET]; @@ -7,6 +9,8 @@ void initSoldato(Entity * entity, Game * game) { entity->transformedCollisionModel = entityCreateCollisionModel(*entity->model); setEntityRadius(entity); + entity->health = 0.125; + // Acceleration. entity->useAcceleration = false; @@ -216,3 +220,22 @@ void setSoldatoLeader(Entity * entity1, Entity * entity2) { leader->follow.followerId = follower->id; leader->follow.followerFingerprint = follower->fingerprint; } + +void addSoldatoGroupToWorld(Game * game, int groupSize, Vector3 position, Vector3 spacing) { + int i; + WorldEntry entries[groupSize]; + + for (i = 0; i < groupSize; ++i) + entries[i] = (WorldEntry){ + ENTITY_SOLDATO, + Vector3Add(position, Vector3Multiply((Vector3){i, i, i}, spacing)), + QuaternionIdentity() + }; + + addEntriesToWorld( + &game->world, + game, + entries, + sizeof(entries) / sizeof(WorldEntry) + ); +} diff --git a/src/entities/soldato.h b/src/entities/soldato.h index 392be54..d05a42d 100644 --- a/src/entities/soldato.h +++ b/src/entities/soldato.h @@ -26,4 +26,6 @@ void drawSoldato(Game * game, Entity * entity); void setSoldatoLeader(Entity * entity1, Entity * entity2); +void addSoldatoGroupToWorld(Game * game, int groupSize, Vector3 position, Vector3 spacing); + #endif diff --git a/src/levels/level1.c b/src/levels/level1.c index ed81ecf..06bd518 100644 --- a/src/levels/level1.c +++ b/src/levels/level1.c @@ -2,11 +2,24 @@ #include "game.h" #include "world.h" #include "entity.h" +#include "entitiesInclude.h" void initLevel1(Game * game, Levels * levels) { - WorldEntry entries[2] = { + int i; + + levels->data = KF_MALLOC(sizeof(Level1)); + + if (levels->data == NULL) { + ALLOCATION_ERROR; + return; + } + + Level1 * data = (Level1*)levels->data; + data->stage = 0; + + WorldEntry entries[] = { (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()}, - (WorldEntry){ENTITY_GENERALE, (Vector3){0.0, 10.0, 200.0}, QuaternionIdentity()} + (WorldEntry){ENTITY_SOLDATO, (Vector3){0.0, 10.0, 800.0}, QuaternionIdentity()} }; addEntriesToWorld( @@ -18,12 +31,37 @@ void initLevel1(Game * game, Levels * levels) { } void closelevel1(Levels * levels) { + if (levels->data != NULL) + KF_FREE(levels->data); } bool updateLevel1(Game * game, Levels * levels) { - if (game->world.entitiesCount == 1) - return true; + int i; + Level1 * data = (Level1*)levels->data; + Entity * player = getEntityFromWorld(game->world, 0); + bool levelDone = false; - return IsKeyDown(KEY_G); -} + switch (data->stage) { + case 0: + // Next stage + if (game->world.entitiesCount == 1) { + Vector3 position = Vector3Add(player->position, (Vector3){0.0, 0.0, 1000.0}); + Vector3 spacing = (Vector3){0.0, 10.0, 10.0}; + addSoldatoGroupToWorld(game, 10, position, spacing); + data->stage = 1; + } + + break; + case 1: + if (game->world.entitiesCount == 1) + levelDone = true; + + break; + default: + levelDone = true; + break; + } + + return levelDone; +} diff --git a/src/levels/level1.h b/src/levels/level1.h index 58a7b2c..ed72f5f 100644 --- a/src/levels/level1.h +++ b/src/levels/level1.h @@ -4,6 +4,10 @@ #ifndef LEVEL1_H #define LEVEL1_H +typedef struct Level1 { + int stage; +} Level1; + void initLevel1(Game * game, Levels * levels); void closelevel1(Levels * levels); bool updateLevel1(Game * game, Levels * levels); diff --git a/src/levels/level2.c b/src/levels/level2.c new file mode 100644 index 0000000..4e5dded --- /dev/null +++ b/src/levels/level2.c @@ -0,0 +1,34 @@ +#include "level1.h" +#include "game.h" +#include "world.h" +#include "entity.h" + +void initLevel2(Game * game, Levels * levels) { + int i; + + WorldEntry entries[11] = { + (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()} + }; + + for (i = 1; i < 11; ++i) { + entries[i] = (WorldEntry){ENTITY_SOLDATO, (Vector3){0.0, i * 10.0, i * 10.0 + 200.0}, QuaternionIdentity()}; + } + + addEntriesToWorld( + &game->world, + game, + entries, + sizeof(entries) / sizeof(WorldEntry) + ); +} + +void closelevel2(Levels * levels) { +} + +bool updateLevel2(Game * game, Levels * levels) { + if (game->world.entitiesCount == 1) + return true; + + return false; +} + diff --git a/src/levels/level2.h b/src/levels/level2.h new file mode 100644 index 0000000..06e1c17 --- /dev/null +++ b/src/levels/level2.h @@ -0,0 +1,11 @@ +#include "gameCommon.h" +#include "levels.h" + +#ifndef LEVEL2_H +#define LEVEL2_H + +void initLevel2(Game * game, Levels * levels); +void closelevel2(Levels * levels); +bool updateLevel2(Game * game, Levels * levels); + +#endif |