Set up flecs
This commit is contained in:
parent
337a20cb4e
commit
f5a0e762fa
1 changed files with 40 additions and 0 deletions
40
main.c
40
main.c
|
@ -20,6 +20,7 @@ typedef struct app_state {
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
Clay_SDL3RendererData rendererData;
|
Clay_SDL3RendererData rendererData;
|
||||||
ClayVideoDemo_Data demoData;
|
ClayVideoDemo_Data demoData;
|
||||||
|
ecs_world_t *world;
|
||||||
} AppState;
|
} AppState;
|
||||||
|
|
||||||
SDL_Surface *sample_image;
|
SDL_Surface *sample_image;
|
||||||
|
@ -92,14 +93,22 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) {
|
||||||
SDL_GetWindowSize(state->window, &width, &height);
|
SDL_GetWindowSize(state->window, &width, &height);
|
||||||
Clay_Initialize(clayMemory, (Clay_Dimensions) { (float) width, (float) height }, (Clay_ErrorHandler) { HandleClayErrors });
|
Clay_Initialize(clayMemory, (Clay_Dimensions) { (float) width, (float) height }, (Clay_ErrorHandler) { HandleClayErrors });
|
||||||
Clay_SetMeasureTextFunction(SDL_MeasureText, state->rendererData.fonts);
|
Clay_SetMeasureTextFunction(SDL_MeasureText, state->rendererData.fonts);
|
||||||
|
Clay_SetDebugModeEnabled(true);
|
||||||
|
|
||||||
state->demoData = ClayVideoDemo_Initialize();
|
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;
|
*appstate = state;
|
||||||
return SDL_APP_CONTINUE;
|
return SDL_APP_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
|
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
|
||||||
|
AppState *state = appstate;
|
||||||
SDL_AppResult ret_val = SDL_APP_CONTINUE;
|
SDL_AppResult ret_val = SDL_APP_CONTINUE;
|
||||||
|
|
||||||
switch (event->type) {
|
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);
|
Clay_UpdateScrollContainers(true, (Clay_Vector2) { event->wheel.x, event->wheel.y }, 0.01f);
|
||||||
break;
|
break;
|
||||||
case SDL_EVENT_KEY_DOWN:
|
case SDL_EVENT_KEY_DOWN:
|
||||||
|
if (event->key.repeat) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
SDL_Log("Pressed key: %s\n", SDL_GetKeyName(event->key.key));
|
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;
|
break;
|
||||||
case SDL_EVENT_KEY_UP:
|
case SDL_EVENT_KEY_UP:
|
||||||
SDL_Log("Released key: %s\n", SDL_GetKeyName(event->key.key));
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -134,6 +170,8 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
|
||||||
SDL_AppResult SDL_AppIterate(void *appstate) {
|
SDL_AppResult SDL_AppIterate(void *appstate) {
|
||||||
AppState *state = appstate;
|
AppState *state = appstate;
|
||||||
|
|
||||||
|
ecs_progress(state->world, 0);
|
||||||
|
|
||||||
Clay_RenderCommandArray render_commands = ClayVideoDemo_CreateLayout(&state->demoData);
|
Clay_RenderCommandArray render_commands = ClayVideoDemo_CreateLayout(&state->demoData);
|
||||||
|
|
||||||
SDL_SetRenderDrawColor(state->rendererData.renderer, 0, 0, 0, 255);
|
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)
|
if (state->rendererData.textEngine)
|
||||||
TTF_DestroyRendererTextEngine(state->rendererData.textEngine);
|
TTF_DestroyRendererTextEngine(state->rendererData.textEngine);
|
||||||
|
|
||||||
|
ecs_fini(state->world);
|
||||||
|
|
||||||
SDL_free(state);
|
SDL_free(state);
|
||||||
}
|
}
|
||||||
TTF_Quit();
|
TTF_Quit();
|
||||||
|
|
Loading…
Reference in a new issue