From 4e166de112af2bc09b769c5cd4cdf7468f6a0eee Mon Sep 17 00:00:00 2001 From: Robear Selwans Date: Mon, 29 Mar 2021 11:36:51 +0200 Subject: [PATCH] ECS changes Signed-off-by: Robear Selwans --- src/main.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index c0f8ff6..a6b2d7b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,5 @@ #include +#include #include #define NAMESPACE_MODULE evmod_glfw @@ -27,30 +28,48 @@ typedef struct Cmp2 { F32 dummy_f32; } Component2; +int cmp12(ECSQuery query) +{ + Component1 *cmp1 = ECS->getQueryColumn(query, sizeof(Component1), 1); + Component2 *cmp2 = ECS->getQueryColumn(query, sizeof(Component2), 2); + U32 count = ECS->getQueryMatchCount(query); + + for(int i = 1; i <= count; ++i) { + ev_log_trace("Iteration #%d, cmp1: {%d}", i, cmp1[i-1].dummy_i32); + } +} + int main(int argc, char **argv) { evolengine_t *engine = evol_create(); evol_parse_args(engine, argc, argv); evol_init(engine); - evolmodule_t window_module = evol_loadmodule("window"); assert(window_module); - evolmodule_t ecs_module = evol_loadmodule("ecs"); assert(ecs_module); + evolmodule_t window_module = evol_loadmodule("window"); DEBUG_ASSERT(window_module); + evolmodule_t ecs_module = evol_loadmodule("ecs"); DEBUG_ASSERT(ecs_module); IMPORT_NAMESPACES; ECS->newScene(); ECSEntityID ent1 = ECS->createEntity(); + ECSEntityID ent2 = ECS->createEntity(); ECSComponentID Cmp1_ID = ECS->registerComponent("Component1", sizeof(Component1), EV_ALIGNOF(Component1)); ECSComponentID Cmp2_ID = ECS->registerComponent("Component2", sizeof(Component2), EV_ALIGNOF(Component2)); - Component1 c1 = { 555 }; + Component1 c11 = { 555 }; Component2 c2 = { 123, 456.789 }; + Component1 c12 = { 444 }; - ECS->addComponent(ent1, Cmp1_ID, sizeof(Component1), &c1); + ECS->addComponent(ent1, Cmp1_ID, sizeof(Component1), &c11); ECS->addComponent(ent1, Cmp2_ID, sizeof(Component2), &c2); + ECS->addComponent(ent2, Cmp1_ID, sizeof(Component1), &c12); + ECS->addComponent(ent2, Cmp2_ID, sizeof(Component2), &c2); + + ECS->registerSystem("Component1, Component2", EV_ECS_PIPELINE_STAGE_UPDATE, cmp12, "cmp12"); + bool result = 0; while(true) { result |= Window->update(0.0);