From f5a0e762faff0feec61138f012c9216ee64b2f3a Mon Sep 17 00:00:00 2001 From: Lily Rose Date: Sun, 16 Feb 2025 20:05:37 +1100 Subject: [PATCH] Set up flecs --- main.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/main.c b/main.c index c9a95c5..8218404 100644 --- a/main.c +++ b/main.c @@ -20,6 +20,7 @@ typedef struct app_state { SDL_Window *window; Clay_SDL3RendererData rendererData; ClayVideoDemo_Data demoData; + ecs_world_t *world; } AppState; SDL_Surface *sample_image; @@ -92,14 +93,22 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) { SDL_GetWindowSize(state->window, &width, &height); Clay_Initialize(clayMemory, (Clay_Dimensions) { (float) width, (float) height }, (Clay_ErrorHandler) { HandleClayErrors }); Clay_SetMeasureTextFunction(SDL_MeasureText, state->rendererData.fonts); + Clay_SetDebugModeEnabled(true); state->demoData = ClayVideoDemo_Initialize(); + ecs_world_t *world = ecs_init(); + ECS_IMPORT(world, FlecsStats); + ECS_IMPORT(world, FlecsScript); + ecs_singleton_set(world, EcsRest, {0}); // Creates REST server on default port (27750) + state->world = world; + *appstate = state; return SDL_APP_CONTINUE; } SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { + AppState *state = appstate; SDL_AppResult ret_val = SDL_APP_CONTINUE; switch (event->type) { @@ -119,10 +128,37 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { Clay_UpdateScrollContainers(true, (Clay_Vector2) { event->wheel.x, event->wheel.y }, 0.01f); break; case SDL_EVENT_KEY_DOWN: + if (event->key.repeat) { + break; + } SDL_Log("Pressed key: %s\n", SDL_GetKeyName(event->key.key)); + switch (event->key.scancode) { + case SDL_SCANCODE_LCTRL: { + ecs_world_t *world = state->world; + ecs_entity_t e = ecs_entity(world, { .name = "Lily" }); + SDL_Log("Spawned entity [%s]", ecs_get_name(world, e)); + break; + } + case SDL_SCANCODE_X: { + ecs_world_t *world = state->world; + ecs_entity_t e = ecs_new(world); + SDL_Log("Spawned unnamed entity"); + break; + } + } break; case SDL_EVENT_KEY_UP: SDL_Log("Released key: %s\n", SDL_GetKeyName(event->key.key)); + switch (event->key.scancode) { + case SDL_SCANCODE_LCTRL: { + ecs_world_t *world = state->world; + ecs_entity_t e = ecs_lookup(world, "Lily"); + SDL_Log("Entity [%s] is %s", ecs_get_name(world, e), ecs_is_alive(world, e) ? "alive" : "dead"); + ecs_delete(world, e); + SDL_Log("Entity is %s", ecs_is_alive(world, e) ? "alive" : "dead"); + break; + } + } break; default: break; @@ -134,6 +170,8 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { SDL_AppResult SDL_AppIterate(void *appstate) { AppState *state = appstate; + ecs_progress(state->world, 0); + Clay_RenderCommandArray render_commands = ClayVideoDemo_CreateLayout(&state->demoData); SDL_SetRenderDrawColor(state->rendererData.renderer, 0, 0, 0, 255); @@ -173,6 +211,8 @@ void SDL_AppQuit(void *appstate, SDL_AppResult result) { if (state->rendererData.textEngine) TTF_DestroyRendererTextEngine(state->rendererData.textEngine); + ecs_fini(state->world); + SDL_free(state); } TTF_Quit();