aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--;198
1 files changed, 0 insertions, 198 deletions
diff --git a/; b/;
deleted file mode 100644
index 34bfcb3..0000000
--- a/;
+++ /dev/null
@@ -1,198 +0,0 @@
-#include "world.h"
-#include "game.h"
-
-void initWorld(World * world) {
- world->entities = NULL;
- world->entitiesCount = 0;
-
- world->lookUp = NULL;
- world->lookUpSize = 0;
-
- world->vacantIds = NULL;
- world->vacantIdsCount = 0;
-}
-
-void freeWorld(World * world) {
- int i;
-
- if (world->entities == NULL)
- return;
-
- // Close entities.
- for (i = 0; i < world->entitiesCount; ++i)
- closeEntity(&world->entities[i]);
-
- KF_FREE(world->entities);
- KF_FREE(world->lookUp);
-
- if (world->vacantIds != NULL)
- KF_FREE(world->vacantIds);
-}
-
-// Not for direct use.
-KfError pushVacantId(World * world, EntityId id) {
- ++world->vacantIdsCount;
-
- // Allocate.
- if (world->vacantIds == NULL)
- world->vacantIds = (EntityId*)KF_CALLOC(1, sizeof(EntityId));
- else
- world->vacantIds = (EntityId*)KF_REALLOCARRAY(
- world->vacantIds,
- world->vacantIdsCount,
- sizeof(EntityId)
- );
-
- if (world->vacantIds == NULL) {
- ALLOCATION_ERROR;
- return KFERROR;
- }
-
- world->vacantIds[world->vacantIdsCount - 1] = id;
- return KFSUCCESS;
-}
-
-// Not for direct use.
-EntityId popVacantId(World * world) {
- EntityId id;
-
- // Already empty.
- if (world->vacantIds == NULL)
- return ENTITY_ID_NONE;
-
- id = world->vacantIds[world->vacantIdsCount - 1];
-
- // Decrease count.
- --world->vacantIdsCount;
-
- // Free or recallocate.
- if (world->vacantIdsCount == 0) {
- KF_FREE(world->vacantIds);
- world->vacantIds = NULL;
- } else {
- world->vacantIds = (EntityId*)KF_REALLOCARRAY(
- world->vacantIds,
- world->vacantIdsCount,
- sizeof(EntityId)
- );
- }
-
- return id;
-}
-
-EntityId addEntityToWorld(World * world, Entity entity) {
- EntityId id;
- EntityId poppedId;
-
- // Not allocated.
- if (world->entities == NULL) {
- // Allocate.
- world->entities = (Entity*)KF_CALLOC(1, sizeof(Entity));
- world->lookUp = (EntityId*)KF_CALLOC(1, sizeof(EntityId));
- world->entitiesCount = 1;
- world->lookUpSize = 1;
-
- if (world->entities == NULL || world->lookUp == NULL) {
- ALLOCATION_ERROR;
- return ENTITY_ID_NONE;
- }
-
- // Set entity and id.
- world->entities[0] = entity;
- world->lookUp[0] = 0;
- return 0;
- }
-
- ++world->entitiesCount;
-
- // Resize.
- world->entities = (Entity*)KF_REALLOCARRAY(
- world->entities,
- world->entitiesCount,
- sizeof(Entity)
- );
-
- if (world->entities == NULL) {
- ALLOCATION_ERROR;
- return ENTITY_ID_NONE;
- }
-
- // Set entity.
- world->entities[world->entitiesCount - 1] = entity;
-
- // Set look up.
- poppedId = popVacantId(world);
-
- // Got popped id.
- if (poppedId != ENTITY_ID_NONE) {
- world->lookUp[poppedId] = world->entitiesCount - 1;
- return poppedId;
- }
-
- ++world->lookUpSize;
-
- world->lookUp = (EntityId*)KF_REALLOCARRAY(
- world->lookUp,
- world->lookUpSize,
- sizeof(EntityId)
- );
-
- if (world->lookUp == NULL) {
- ALLOCATION_ERROR;
- return ENTITY_ID_NONE;
- }
-
- // Set id.
- id = world->lookUpSize - 1;
- world->lookUp[id] = world->entitiesCount - 1;
- return id;
-}
-
-KfError removeEntityFromWorld(World * world, EntityId id) {
- int i;
- int pos;
-
- if (world->entitiesCount == 1)
- return KFERROR;
-
- // Get position in list.
- pos = world->lookUp[id];
-
- if (pos == ENTITY_ID_NONE)
- return KFSUCCESS;
-
- // Close entity.
- closeEntity(&world->entities[pos]);
-
- // Move back entities.
- for (i = pos; i < world->entitiesCount - 1; ++i)
- world->entities[i] = world->entities[i + 1];
-
- return KFSUCCESS;
-}
-
-void updateWorld(World * world, Game * game) {
- int i;
- Entity * entity;
-
- for (i = 0; i < world->entitiesCount; ++i) {
- entity = &world->entities[i];
-
- // Call update callback.
- if (entity->updateCb != NULL)
- entity->updateCb(game, entity, i);
- }
-}
-
-void drawWorld(World * world, Game * game) {
- int i;
- Entity * entity;
-
- for (i = 0; i < world->entitiesCount; ++i) {
- entity = &world->entities[i];
-
- // Call draw callback.
- if (entity->drawCb != NULL)
- entity->drawCb(game, entity, i);
- }
-}