diff --git a/include/scene.h b/include/scene.h index d455b74..e04f0db 100644 --- a/include/scene.h +++ b/include/scene.h @@ -36,9 +36,15 @@ struct gc_scene bool is_paused; }; +gc_scene *scene_create(gc_engine *engine, const char *xml); +gc_scene *scene_new(gc_engine *engine); +gc_scene *scene_parse_xml(gc_scene *scene, gc_engine *engine, const char *xml); + callback_t scene_get_callback(gc_scene *scene, char *name); -gc_scene *scene_create(gc_engine *engine, const char *mappath); void scene_load_data(gc_engine *engine, gc_scene *scene, node *n); void *scene_get_data(gc_scene *scene, const char *type, const char *name); void scene_destroy(gc_scene *scene); -void scene_load_entity(gc_scene *this, gc_engine *engine, node *n, int prefab); \ No newline at end of file +void scene_load_entity(gc_scene *this, gc_engine *engine, node *n, int prefab); +gc_data *scene_get_data_ptr(gc_scene *this, void *data); +gc_list *get_entity_by_cmp(gc_scene *scene, const char *cmp_name); + diff --git a/src/scene/scene.c b/src/scene/scene.c index 284bece..612d3c7 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -8,8 +8,6 @@ #include "engine.h" #include "entity.h" #include "utility.h" -#include "prefab.h" -#include gc_list *get_entity_by_cmp(gc_scene *scene, const char *cmp_name) { @@ -45,31 +43,6 @@ gc_data *scene_get_data_ptr(gc_scene *this, void *data) return (NULL); } -gc_scene *scene_create(gc_engine *engine, const char *xmlpath) -{ - gc_scene *scene = malloc(sizeof(gc_scene)); - node *n = NULL; - - if (!scene || (xmlpath && !(n = xml_parse(xmlpath)))) - return (NULL); - scene->is_paused = false; - scene->entities = NULL; - scene->entities_by_cmp = NULL; - scene->add_entity = &entity_add; - scene->get_entity = &entity_get; - scene->get_entity_by_cmp = &get_entity_by_cmp; - scene->destroy = &scene_destroy; - scene->get_data = &scene_get_data; - scene->get_data_ptr = &scene_get_data_ptr; - scene->get_callback = &scene_get_callback; - scene->load_entity = &scene_load_entity; - scene->callbacks = engine->callbacks; - scene_load_data(engine, scene, n); - prefab_loadentities(n, engine, scene); - xml_destroy(n); - return (scene); -} - callback_t scene_get_callback(gc_scene *this, char *name) { if (!name) diff --git a/src/scene/scene_constructor.c b/src/scene/scene_constructor.c new file mode 100644 index 0000000..1b674a9 --- /dev/null +++ b/src/scene/scene_constructor.c @@ -0,0 +1,51 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** scene_constructor.c +*/ + +#include "scene.h" +#include "prefab.h" +#include "xml.h" +#include + +gc_scene *scene_new(gc_engine *engine) +{ + gc_scene *scene = malloc(sizeof(gc_scene)); + + if (!scene) + return (NULL); + scene->is_paused = false; + scene->entities = NULL; + scene->entities_by_cmp = NULL; + scene->add_entity = &entity_add; + scene->get_entity = &entity_get; + scene->get_entity_by_cmp = &get_entity_by_cmp; + scene->destroy = &scene_destroy; + scene->get_data = &scene_get_data; + scene->get_data_ptr = &scene_get_data_ptr; + scene->get_callback = &scene_get_callback; + scene->load_entity = &scene_load_entity; + scene->callbacks = engine->callbacks; + scene->data = NULL; +} + +gc_scene *scene_parse_xml(gc_scene *scene, gc_engine *engine, const char *xml) +{ + node *n = NULL; + + if (!scene || (xml && !(n = xml_parse(xml)))) + return (NULL); + scene_load_data(engine, scene, n); + prefab_loadentities(n, engine, scene); + xml_destroy(n); + return (scene); +} + +gc_scene *scene_create(gc_engine *engine, const char *xml) +{ + gc_scene *scene = scene_new(engine); + scene_parse_xml(scene, engine, xml); + return (scene); +} \ No newline at end of file diff --git a/src/scene/scene_loader.c b/src/scene/scene_loader.c index eef7ddb..9b97c6c 100644 --- a/src/scene/scene_loader.c +++ b/src/scene/scene_loader.c @@ -20,7 +20,6 @@ void scene_load_data(gc_engine *engine, gc_scene *scene, node *n) gc_dataloader *loader; gc_data *data; - scene->data = NULL; if (!(n = xml_getnode(n, "data"))) return; for (n = n->child; n; n = n->next) {