diff --git a/include/components/renderer.h b/include/components/renderer.h index 13fe78c..bce2262 100644 --- a/include/components/renderer.h +++ b/include/components/renderer.h @@ -44,6 +44,7 @@ void rend_set_anim(struct renderer *rend, const char *name); void text_ctr(struct renderer *cmp, va_list args); void text_fdctr(gc_scene *scene, struct renderer *cmp, node *n); +void text_safe_destroy(struct renderer *rend); void map_ctr(struct renderer *cmp, va_list args); void map_fdctr(gc_scene *scene, struct renderer *cmp, gc_entity *entity); diff --git a/include/prefab.h b/include/prefab.h index 6203c7a..c1f71c8 100644 --- a/include/prefab.h +++ b/include/prefab.h @@ -14,3 +14,4 @@ int prefab_loadentities(node *n, gc_engine *engine, gc_scene *scene); gc_entity *deserialize_entity(gc_engine *engine, gc_scene *scene, node *n); gc_component *deserialize_component(gc_engine *engine, gc_entity *entity, \ gc_scene *scene, node *n); +void prefab_destroy(gc_scene *scene, int prefab_id); diff --git a/src/components/renderers/text_renderer.c b/src/components/renderers/text_renderer.c index 3d1a450..f475a09 100644 --- a/src/components/renderers/text_renderer.c +++ b/src/components/renderers/text_renderer.c @@ -20,6 +20,11 @@ void destroy_text_renderer(struct renderer *cmp) free(cmp->data); } +void text_safe_destroy(struct renderer *rend) +{ + free(rend->data); +} + int color_from_text(char *txt) { if (txt == NULL) diff --git a/src/deserializer/prefab.c b/src/deserializer/prefab.c index a5f69e0..73bf3fd 100644 --- a/src/deserializer/prefab.c +++ b/src/deserializer/prefab.c @@ -49,4 +49,12 @@ int prefab_loadentities(node *n, gc_engine *engine, gc_scene *scene) if (engine->on_resize && engine->get_screen_size && engine->scene) engine->on_resize(engine, engine->get_screen_size(engine)); return (prefab_id - 1); +} + +void prefab_destroy(gc_scene *scene, int prefab_id) +{ + for (gc_list *li = scene->entities; li; li = li->next) { + if (((gc_entity *)li->data)->prefab_id == prefab_id) + ((gc_entity *)li->data)->destroy(li->data, scene); + } } \ No newline at end of file