diff --git a/include/systems/particule_system.h b/include/systems/particule_system.h index 9be9768..6271898 100644 --- a/include/systems/particule_system.h +++ b/include/systems/particule_system.h @@ -9,9 +9,12 @@ #define MY_RPG_PARTICULE_SYSTEM_H #include "engine.h" +#include "components/particule_component.h" void particule_update_entity(gc_engine *engine, void *system, \ gc_entity *entity, float dt); +void create_particule(struct particule *particule, int lifetime, \ +void *texture, gc_vector2 pos); extern const struct gc_system particule_system; diff --git a/prefabs/player.gcprefab b/prefabs/player.gcprefab index 4ca9592..994b4e7 100644 --- a/prefabs/player.gcprefab +++ b/prefabs/player.gcprefab @@ -39,6 +39,6 @@ - + diff --git a/prefabs/tilemap.gcmap b/prefabs/tilemap.gcmap index 4ecdfb1..6e8d9b2 100644 --- a/prefabs/tilemap.gcmap +++ b/prefabs/tilemap.gcmap @@ -1304,8 +1304,8 @@ - - + + @@ -1376,8 +1376,8 @@ - - + + @@ -6263,7 +6263,7 @@ - + @@ -7621,7 +7621,7 @@ - + @@ -7958,7 +7958,7 @@ - + @@ -8027,7 +8027,7 @@ - + @@ -8479,7 +8479,7 @@ - + diff --git a/src/components/particule_component.c b/src/components/particule_component.c index dd14d8d..6631796 100644 --- a/src/components/particule_component.c +++ b/src/components/particule_component.c @@ -8,6 +8,7 @@ #include "xml.h" #include "components/particule_component.h" #include "components/map_linker.h" +#include "systems/particule_system.h" #include "component.h" #include #include "utility.h" @@ -25,12 +26,13 @@ component; cmp->texture = va_arg(args, void *); cmp->particules = malloc(sizeof(struct particule_component) * \ (cmp->nb_max_particules + 1)); - sprites = malloc(sizeof(gc_sprite) * (cmp->nb_max_particules)); + sprites = malloc(sizeof(gc_sprite) * (cmp->nb_max_particules + 1)); if (!cmp->particules || !sprites) return; for (int i = 0; i < cmp->nb_max_particules; i++) { cmp->particules[i].sprite = &sprites[i]; - cmp->particules[i].lifetime = 0; + create_particule(&cmp->particules[i], i * 20, NULL, \ +(gc_vector2){0, 0}); } } @@ -48,16 +50,17 @@ component; } cmp->type = xml_getintprop(n, "type"); cmp->nb_max_particules = xml_getintprop(n, "nb_particules_max"); - cmp->texture = ml->tile->texture; + cmp->texture = NULL; cmp->lifetime = xml_getintprop(n, "lifetime"); cmp->particules = malloc(sizeof(struct particule_component) * \ (cmp->nb_max_particules + 1)); - sprites = malloc(sizeof(gc_sprite) * (cmp->nb_max_particules)); + sprites = malloc(sizeof(gc_sprite) * (cmp->nb_max_particules + 1)); if (!cmp->particules || !sprites) return; for (int i = 0; i < cmp->nb_max_particules; i++) { cmp->particules[i].sprite = &sprites[i]; - cmp->particules[i].lifetime = 0; + create_particule(&cmp->particules[i], i * 20, NULL, \ +(gc_vector2){0, 0}); } } diff --git a/src/systems/combat_methods.c b/src/systems/combat_methods.c index a627ea0..649a49c 100644 --- a/src/systems/combat_methods.c +++ b/src/systems/combat_methods.c @@ -101,8 +101,7 @@ gc_scene *scene, gc_engine *engine) if (!player_entity) return; - struct health_component *h_cmp = GETCMP(player_entity, health_component); - if (h_cmp->dead) { + if (GETCMP(player_entity, health_component)->dead) { combat_end(engine, false); return; } diff --git a/src/systems/particule_system.c b/src/systems/particule_system.c index 60698e5..b6919a6 100644 --- a/src/systems/particule_system.c +++ b/src/systems/particule_system.c @@ -22,22 +22,27 @@ void *texture, gc_vector2 pos) particule->lifetime = lifetime; particule->sprite->texture = texture; particule->sprite->pos = pos; - particule->sprite->rect = (gc_int_rect){10, 10,0,0}; - particule->sprite->scale = (gc_vector2){0.5, 0.5}; + particule->sprite->rect = (gc_int_rect){16, 16,0,0}; + particule->sprite->scale = (gc_vector2){1, 1}; } void particule_draw(gc_engine *engine, void *system, \ gc_entity *entity, float dt) { struct particule_component *pm = GETCMP(entity, particule_component); + struct transform_component *tc = GETCMP(entity, transform_component); + gc_vector2 player_pos; - if (!pm || !entity) + if (!pm || !entity || !tc) return; + player_pos = tc->position; for (int i = 0; i < pm->nb_max_particules; i++) { - if (!pm->particules[i].sprite) + if (!pm->particules[i].sprite || !pm->particules[i].sprite->texture) continue; + tc->position = pm->particules[i].sprite->pos; sfmlrenderer_draw_texture(engine, entity, pm->particules[i].sprite, dt); } + tc->position = player_pos; } void particule_update_entity(gc_engine *engine, void *system, gc_entity *entity, \ @@ -49,12 +54,11 @@ float dtime) if (!ml || !tc || !cmp) return; - cmp->texture = ml->tile->texture; - for (int i = 0; i < cmp->nb_max_particules; i++) - cmp->particules[i].lifetime -= (cmp->particules[i].lifetime) ? 1 : 0; for (int i = 0; i < cmp->nb_max_particules; i++) { - if (!cmp->particules[i].lifetime) - create_particule(&cmp->particules[i], cmp->lifetime, cmp->texture, tc->position); + cmp->particules[i].lifetime -= (cmp->particules[i].lifetime) ? 1 : 0; + if (!cmp->particules[i].lifetime) { + create_particule(&cmp->particules[i], cmp->lifetime, ml->tile->texture, tc->position); + } } particule_draw(engine, system, entity, dtime); }