From 0cf8b424b26d69cfe27295c86df90f80b64415ea Mon Sep 17 00:00:00 2001 From: Ulysse Cura Date: Tue, 11 Aug 2026 11:22:52 +0200 Subject: [PATCH] Working entity draw priority. --- SDL3_Core | 2 +- TODO.md | 5 ++--- src/components/sprite_component.c | 4 +++- src/game.c | 23 ++++++++++++++++++++--- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/SDL3_Core b/SDL3_Core index 50dc383..ea7f745 160000 --- a/SDL3_Core +++ b/SDL3_Core @@ -1 +1 @@ -Subproject commit 50dc383e2d027add50672b0003744b7845019780 +Subproject commit ea7f7453133cb3ce231db074986820cbba86c0a6 diff --git a/TODO.md b/TODO.md index a19fdeb..d12cb7b 100644 --- a/TODO.md +++ b/TODO.md @@ -4,8 +4,6 @@ ###### Features -- [ ] Work on entities draw order - - [ ] Create tilemap management and display - [ ] Find tilemap building format - [ ] Add building support for tilemaps in asset builder @@ -26,9 +24,10 @@ ### In progress - ### Done +- [x] Work on entities draw order + - [x] Make entities react to events - [x] Work on events (publish / subscribe) diff --git a/src/components/sprite_component.c b/src/components/sprite_component.c index fceadbb..012a37e 100644 --- a/src/components/sprite_component.c +++ b/src/components/sprite_component.c @@ -32,8 +32,10 @@ inline int sprite_component_init(component_t *component) inline int sprite_component_update(component_t *component) { sprite_component_data_t *component_data = component->data; + transform_component_data_t *transform_component_data = component_data->transform_component_data; - component_data->dst_rect = component_data->transform_component_data->bounds; + component_data->dst_rect = transform_component_data->bounds; + component->entity->draw_priority = transform_component_data->bounds.y + transform_component_data->bounds.h; return EXIT_SUCCESS; } diff --git a/src/game.c b/src/game.c index f93cf5d..8b30ae9 100644 --- a/src/game.c +++ b/src/game.c @@ -41,7 +41,13 @@ int game_init(void) }; if(!entity_new_component(player_entity, SPRITE_COMPONENT)) return EXIT_FAILURE; - if(!entity_new_component(player_entity, ANIMATION_SYSTEM)) return EXIT_FAILURE; + + component = entity_new_component(player_entity, ANIMATION_SYSTEM); + if(!component) return EXIT_FAILURE; + + ((animation_system_data_t *)component->data)->loop = true; + ((animation_system_data_t *)component->data)->play = true; + component = entity_new_component(player_entity, HITBOX_COMPONENT); if(!component) return EXIT_FAILURE; @@ -56,6 +62,7 @@ int game_init(void) }; if(!entity_new_component(player_entity, PHYSICS_SYSTEM)) return EXIT_FAILURE; + if(!entity_new_component(player_entity, PLAYER_SYSTEM)) return EXIT_FAILURE; /* ======== Lever ========*/ @@ -77,7 +84,12 @@ int game_init(void) if(sprite_component_set_texture(component->data, "lever_sheet")) return EXIT_FAILURE; - if(!entity_new_component(lever_entity, ANIMATION_SYSTEM)) return EXIT_FAILURE; + component = entity_new_component(lever_entity, ANIMATION_SYSTEM); + if(!component) return EXIT_FAILURE; + + ((animation_system_data_t *)component->data)->nb_frames = 3; + ((animation_system_data_t *)component->data)->frame_delay_ms = LEVER_DEFAULT_ANIMATION_SPEED; + if(animation_system_create_frames_clips(component->data)) return EXIT_FAILURE; component = entity_new_component(lever_entity, HITBOX_COMPONENT); if(!component) return EXIT_FAILURE; @@ -126,7 +138,12 @@ int game_init(void) if(sprite_component_set_texture(component->data, "barred_door_sheet")) return EXIT_FAILURE; - if(!entity_new_component(door_entity, ANIMATION_SYSTEM)) return EXIT_FAILURE; + component = entity_new_component(door_entity, ANIMATION_SYSTEM); + if(!component) return EXIT_FAILURE; + + ((animation_system_data_t *)component->data)->nb_frames = 8; + ((animation_system_data_t *)component->data)->frame_delay_ms = DOOR_DEFAULT_ANIMATION_SPEED; + if(animation_system_create_frames_clips(component->data)) return EXIT_FAILURE; component = entity_new_component(door_entity, HITBOX_COMPONENT); if(!component) return EXIT_FAILURE;