diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 111 |
1 files changed, 99 insertions, 12 deletions
@@ -5,6 +5,12 @@ #include "storage.h" #include "bitset.h" +enum component_t +{ + C_TRANSFORM = (int) 0, + C_COLLIDER, +}; + typedef struct { int x; @@ -25,6 +31,28 @@ typedef struct } collider_t; void +sys_collide(storage_t *storage, entity_t eid) +{ + printf("Inside collide, id = %i\n", eid); + transform_t *transform = GET_COMPONENT(storage, transform_t, eid); + collider_t *collider = GET_COMPONENT(storage, collider_t, eid); + printTransform(transform); + printf("\n"); +} + +void +sys_move(storage_t *storage, entity_t eid) +{ + printf("Inside move, id = %i\n", eid); + transform_t *transform = GET_COMPONENT(storage, transform_t, eid); + printTransform(transform); + printf("\n"); +} + + +// Engine functions + +void initStorage(storage_t *storage) { storage->componentsStored = 0; @@ -32,6 +60,10 @@ initStorage(storage_t *storage) storage->objects = (component_pair_t *) malloc(MAX_COMPONENTS * sizeof(component_pair_t)); bitarena_init(&storage->objectSignatures, MAX_OBJECTS); + storage->systemsStored = 0; + storage->systems = (system_t *) malloc(4096 * sizeof(system_t)); + bitarena_init(&storage->systemSignatures, 4096); + REGISTER_COMPONENT(storage, transform_t); REGISTER_COMPONENT(storage, collider_t); } @@ -39,30 +71,83 @@ initStorage(storage_t *storage) void loadScene(storage_t *storage) { - bitset_t s1 = bitarena_at(&storage->objectSignatures, 0); - bitset_t s2 = bitarena_at(&storage->objectSignatures, 1); + // bitset_t s1 = bitarena_at(&storage->objectSignatures, 0); + // bitset_t s2 = bitarena_at(&storage->objectSignatures, 1); - bitset_set(s1, 9); - bitset_set(s2, 9); + // bitset_set(s1, 9); + // bitset_set(s2, 9); - bitset_print(s1); - bitset_print(s2); + // bitset_print(s1); + // bitset_print(s2); + + // bitset_t sAnd = bitset_and(s1, s2); + // printf("Bitset is zero: %i\n", bitset_isZero(sAnd)); + // printf("Bitset is equals: %i\n", bitset_equals(s1, s2)); - bitset_t sAnd = bitset_and(s1, s2); - printf("Bitset is zero: %i\n", bitset_isZero(sAnd)); - printf("Bitset is equals: %i\n", bitset_equals(s1, s2)); - entity_t e1 = createEntity(storage); + ADD_COMPONENT(storage, e1, transform_t); + ADD_COMPONENT(storage, e1, collider_t); + transform_t *t1 = GET_COMPONENT(storage, transform_t, e1); t1->x = 13; t1->y = 37; - printTransform(t1); + // printTransform(t1); + + collider_t *c1 = GET_COMPONENT(storage, collider_t, e1); + c1->height = 50; + c1->width = 50; + c1->collisionsCount = 5; entity_t e2 = createEntity(storage); + ADD_COMPONENT(storage, e2, transform_t); + transform_t *t2 = GET_COMPONENT(storage, transform_t, e2); t2->x = 14; t2->y = 88; - printTransform(t2); + // printTransform(t2); + + entity_t e3 = createEntity(storage); + ADD_COMPONENT(storage, e3, transform_t); + + transform_t *t3 = GET_COMPONENT(storage, transform_t, e3); + t3->x = 228; + t3->y = 123; + // printTransform(t3); + + { + char *components[] = {"transform_t", "collider_t", NULL}; + bitset_t bitset = createSignature(storage, components); + // printf("Collide bitset: "); + // bitset_print(bitset); + registerSystem(storage, sys_collide, bitset); + } + + { + char *components[] = {"transform_t", NULL}; + bitset_t bitset = createSignature(storage, components); + // printf("Move bitset: "); + // bitset_print(bitset); + registerSystem(storage, sys_move, bitset); + } +} + +void +update(storage_t *storage) +{ + for (entity_t i = 0; i < storage->objectsStored; ++i) + { + for (int j = 0; j < storage->systemsStored; ++j) + { + bitset_t objBitset = bitarena_at(&storage->objectSignatures, i); + bitset_t sysBitset = bitarena_at(&storage->systemSignatures, j); + bitset_t bitAnd = bitset_and(objBitset, sysBitset); + + if (bitset_equals(bitAnd, sysBitset)) + { + storage->systems[j](storage, i); + } + } + } } int @@ -71,5 +156,7 @@ main() storage_t storage; initStorage(&storage); loadScene(&storage); + update(&storage); + return 0; } |