diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab index eb8ba12..f66d81a 100644 --- a/prefabs/game.gcprefab +++ b/prefabs/game.gcprefab @@ -388,13 +388,14 @@ - + - + + diff --git a/src/components/particule_component.c b/src/components/particule_component.c index 2ab0285..7e37953 100644 --- a/src/components/particule_component.c +++ b/src/components/particule_component.c @@ -57,7 +57,7 @@ component; return; for (int i = 0; i < cmp->nb_max_particules; i++) { cmp->particules[i].sprite = &sprites[i]; - create_particule(&cmp->particules[i], i * 20, NULL, \ + create_particule(&cmp->particules[i], (i / 10) * 5, NULL, \ (gc_vector2){0, 0}); } } @@ -84,7 +84,6 @@ const struct particule_component particule_component = { size: sizeof(struct particule_component), dependencies: (char *[]){ "transform_component", - "map_linker", NULL }, ctr: &ctr, diff --git a/src/systems/particule_system.c b/src/systems/particule_system.c index 9d9d98e..a2f1803 100644 --- a/src/systems/particule_system.c +++ b/src/systems/particule_system.c @@ -58,6 +58,42 @@ cmp->texture, sprite_pos); particule_draw(engine, entity, dtime); } +void create_particule_spec(struct particule *particule, int lifetime, \ +void *texture, gc_vector2 pos) +{ + if (!particule || !particule->sprite) + return; + pos.x += (rand() % 2) ? rand() % 2500 : (rand() % 2500) * -1; + pos.y += (rand() % 2) ? rand() % 500 : (rand() % 500) * -1; + particule->lifetime = lifetime; + particule->sprite->texture = texture; + particule->sprite->pos = (gc_vector2){pos.x, pos.y}; + particule->sprite->rect = (gc_int_rect){16, 16,0,0}; + particule->sprite->scale = (gc_vector2){0.6, 0.6}; +} + +void update_entity_type_three(gc_engine *engine, gc_entity *entity, \ +struct particule_component *cmp, float dtime) +{ + struct transform_component *tc = GETCMP(entity, transform_component); + gc_vector2 sprite_pos; + + if (!tc || !cmp || !cmp->particules || !cmp->particules[0].sprite) { + return; + } + sprite_pos = (gc_vector2){tc->position.x + 400, tc->position.y + 5000}; + for (int i = 0; i < cmp->nb_max_particules; i++) { + cmp->particules[i].lifetime -= (cmp->particules[i].lifetime) ? 1 : 0; + cmp->particules[i].sprite->pos.y -= 16; + cmp->particules[i].sprite->pos.x -= 4; + if (!cmp->particules[i].lifetime ) { + create_particule_spec(&cmp->particules[i], cmp->lifetime, \ +cmp->texture, sprite_pos); + } + } + particule_draw(engine, entity, dtime); +} + static void update_entity(gc_engine *engine, va_list args) { gc_entity *entity = va_arg(args, gc_entity *); @@ -71,6 +107,8 @@ static void update_entity(gc_engine *engine, va_list args) return (update_entity_type_one(engine, entity, cmp, dtime)); case 2: return (update_entity_type_two(engine, entity, cmp, dtime)); + case 3: + return (update_entity_type_three(engine, entity, cmp, dtime)); default: break; }