Cleaning up the scene constructor

This commit is contained in:
Anonymus Raccoon
2020-05-01 15:35:40 +02:00
parent c9e77951c8
commit 1715d0ecd3
4 changed files with 59 additions and 30 deletions
+8 -2
View File
@@ -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);
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);
-27
View File
@@ -8,8 +8,6 @@
#include "engine.h"
#include "entity.h"
#include "utility.h"
#include "prefab.h"
#include <stdlib.h>
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)
+51
View File
@@ -0,0 +1,51 @@
/*
** EPITECH PROJECT, 2020
** my_rpg
** File description:
** scene_constructor.c
*/
#include "scene.h"
#include "prefab.h"
#include "xml.h"
#include <malloc.h>
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);
}
-1
View File
@@ -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) {