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);
}