diff --git a/Makefile b/Makefile index dec3e1d..2ab9b7f 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ SRC = src/engine/engine.c \ src/components/renderers/text_renderer.c \ src/scene/scene.c \ src/scene/scene_loader.c \ + src/scene/scene_destroy.c \ src/utility/arraylen.c \ src/utility/list.c \ src/utility/tupple.c \ diff --git a/src/components/renderers/anim_renderer.c b/src/components/renderers/anim_renderer.c index 4d2b6ce..66f6d49 100644 --- a/src/components/renderers/anim_renderer.c +++ b/src/components/renderers/anim_renderer.c @@ -80,23 +80,22 @@ void anim_fdctr(gc_scene *scene, struct renderer *cmp, node *n) { gc_animholder *hold = malloc(sizeof(gc_animholder)); int animcount = xml_getchildcount_filtered(n, "animation") + 1; - gc_anim *anims = malloc(sizeof(gc_anim) * animcount); int i = 1; - if (!hold || !anims) + hold->anims = malloc(sizeof(gc_anim) * animcount); + if (!hold || !hold->anims) return; sprite_fdctr(scene, cmp, n); hold->sprite = (gc_sprite *)cmp->data; - hold->anims = anims; hold->current = NULL; hold->animcount = animcount; hold->timesince_up = 0; cmp->data = hold; - animation_setnone(&anims[0], hold->sprite); + animation_setnone(&hold->anims[0], hold->sprite); for (n = n->child; n; n = n->next) { if (my_strcmp(n->name, "animation")) continue; - animation_fdctr(&anims[i], hold->sprite, n); + animation_fdctr(&hold->anims[i], hold->sprite, n); i++; } cmp->type = GC_ANIMREND; diff --git a/src/scene/scene.c b/src/scene/scene.c index 8e2c649..9aa5c72 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -69,34 +69,4 @@ int change_scene(gc_engine *engine, gc_scene *scene) if (music) engine->play_music(music); return (0); -} - -void scene_destroy(gc_scene *scene) -{ - void *next = NULL; - gc_tupple *tup = scene->entities_by_cmp; - - for (gc_list *entity = scene->entities; entity; entity = next) { - next = entity->next; - ((gc_entity *)entity->data)->destroy(entity->data); - free(entity); - } - for (gc_list *data = scene->data; data; data = next) { - next = data->next; - if (((gc_data *)data->data)->destroy) - ((gc_data *)data->data)->destroy(data->data); - free(((gc_data *)data->data)->type); - free(data->data); - free(data); - } - for (gc_tupple *tupple = tup; tupple; tupple = tup) { - tup = tupple->next; - for (gc_list *li = tupple->entities; li; li = next) { - next = li->next; - free(li); - } - free(tupple->name); - free(tupple); - } - free(scene); } \ No newline at end of file diff --git a/src/scene/scene_destroy.c b/src/scene/scene_destroy.c new file mode 100644 index 0000000..7ef7f9d --- /dev/null +++ b/src/scene/scene_destroy.c @@ -0,0 +1,49 @@ +/* +** EPITECH PROJECT, 2020 +** Twac +** File description: +** scene_destroy +*/ + +#include "scene.h" +#include "data.h" +#include "list.h" +#include "tupple.h" +#include + +static void free_data(gc_scene *scene) +{ + void *next = NULL; + + for (gc_list *data = scene->data; data; data = next) { + next = data->next; + if (((gc_data *)data->data)->destroy) + ((gc_data *)data->data)->destroy(data->data); + free(((gc_data *)data->data)->type); + free(data->data); + free(data); + } +} + +void scene_destroy(gc_scene *scene) +{ + void *next = NULL; + gc_tupple *tup = scene->entities_by_cmp; + + for (gc_list *entity = scene->entities; entity; entity = next) { + next = entity->next; + ((gc_entity *)entity->data)->destroy(entity->data); + free(entity); + } + free_data(scene); + for (gc_tupple *tupple = tup; tupple; tupple = tup) { + tup = tupple->next; + for (gc_list *li = tupple->entities; li; li = next) { + next = li->next; + free(li); + } + free(tupple->name); + free(tupple); + } + free(scene); +} \ No newline at end of file diff --git a/src/scene/scene_loader.c b/src/scene/scene_loader.c index 2f4c6f0..d71d1e9 100644 --- a/src/scene/scene_loader.c +++ b/src/scene/scene_loader.c @@ -45,8 +45,8 @@ void scene_load_data(gc_engine *engine, gc_scene *scene, node *n) return ((void)my_printf("Couldn't find data loader for the type %s\ \n", data->type)); if (loader->load(data, n) < 0) - return ((void)my_printf("Error while loading data %s (type %s).\n",\ -data->name, data->type)); + return ((void)my_printf("Error while loading data %s (type %s).\ +\n", data->name, data->type)); scene->data = list_add(scene->data, data); } } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_drawer.c b/src/sfml_renderer/sfml_drawer.c index 6327a1a..7606763 100644 --- a/src/sfml_renderer/sfml_drawer.c +++ b/src/sfml_renderer/sfml_drawer.c @@ -20,7 +20,7 @@ struct transform_component *tra, gc_sprite *sprite) sfVector2f scale = (sfVector2f){ tra->size.x * sprite->scale.x / sprite->rect.width, tra->size.y * sprite->scale.y / sprite->rect.height - };; + }; sprite->pos = tra->position; if (!sprite->texture) diff --git a/src/sfml_renderer/sfml_functions.c b/src/sfml_renderer/sfml_functions.c index 9bd7cd2..d558534 100644 --- a/src/sfml_renderer/sfml_functions.c +++ b/src/sfml_renderer/sfml_functions.c @@ -46,10 +46,10 @@ void sfml_handle_events(gc_engine *engine) event.size.width, event.size.height }); - // entities_update_to_cam_size(engine->scene, (gc_vector2) { - // event.size.width, - // event.size.height - // }); + entities_update_to_cam_size(engine->scene, (gc_vector2) { + event.size.width, + event.size.height + }); } } } diff --git a/src/sfml_renderer/sfml_music_player.c b/src/sfml_renderer/sfml_music_player.c index 92a54c9..4e95716 100644 --- a/src/sfml_renderer/sfml_music_player.c +++ b/src/sfml_renderer/sfml_music_player.c @@ -17,9 +17,9 @@ void sfml_play_music(void *music) void sfml_stop_music(gc_engine *engine) { void *music; - + if (!engine->scene) return; - music = engine->scene->get_data(engine->scene, "music", NULL); + music = engine->scene->get_data(engine->scene, "music", NULL); sfMusic_stop(music); } \ No newline at end of file diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c index f9acb10..8fe3c65 100644 --- a/src/systems/sfml_renderer_system.c +++ b/src/systems/sfml_renderer_system.c @@ -40,7 +40,6 @@ gc_entity *entity, float dtime) my_printf("Trying to render a texture with an unknown type.\n"); break; } - (void)dtime; (void)engine; }