GCC Code Coverage Report


Directory: ./
File: sources/System/system_load_scene.c
Date: 2023-09-29 04:53:15
Exec Total Coverage
Lines: 0 61 0.0%
Branches: 0 32 0.0%

Line Branch Exec Source
1 /*
2 * Filename: /home/thomas/Documents/Perso/our_rpg/sources/System/system_load_scene
3 * Path: /home/thomas/Documents/Perso/our_rpg/sources/System
4 * Created Date: Tuesday, March 21st 2023, 9:40:17 am
5 * Author: Thomas
6 *
7 * Copyright (c) 2023 our_rpg
8 */
9
10 #include "world.h"
11 #include "world_system.h"
12 #include "world_resource.h"
13 #include "world_entity.h"
14 #include "world_loader_constructors.h"
15 #include "json.h"
16
17 ✗ int system_load_scene_constructor(system_t *system)
18 {
19 ✗ system->run = system_load_scene_run;
20 ✗ system->type = S_LOAD_SCENE;
21 ✗ system->active = true;
22 ✗ return 0;
23 }
24
25 ✗ static int update_systems(world_t *world, json_object *systems)
26 {
27 ✗ system_t system = {0};
28 json_object *tmp = 0;
29
30 ✗ while (world->system_list.size(&world->system_list) > 0) {
31 ✗ world->system_list.pop_back(&world->system_list);
32 }
33 ✗ for (int i = 0; i < json_object_array_length(systems); i++) {
34 ✗ tmp = json_object_array_get_idx(systems, i);
35 ✗ for (int j = 0; systems_types[j]; j++) {
36 ✗ if (strcmp(json_object_get_string(tmp), systems_types[j]) == 0) {
37 ✗ systems_constructors[j](&system);
38 ✗ world_add_system(world, &system);
39 ✗ break;
40 }
41 }
42 }
43 ✗ return 0;
44 }
45
46 ✗ static int update_resources(world_t *world, json_object *resources)
47 {
48 ✗ resource_t resource = {0};
49 json_object *tmp = 0;
50 void *data = 0;
51
52 ✗ while (world->resource_list.size(&world->resource_list) > 0) {
53 ✗ (resource_t *){world->resource_list.back(&world->resource_list)}->destructor(world->resource_list.back(&world->resource_list));
54 ✗ world->resource_list.pop_back(&world->resource_list);
55 }
56 ✗ for (int i = 0; i < json_object_array_length(resources); i++) {
57 ✗ tmp = json_object_array_get_idx(resources, i);
58 ✗ for (int j = 0; resources_types[j]; j++) {
59 ✗ if (strcmp(json_object_get_string(json_object_object_get(tmp, "type")), resources_types[j]) == 0) {
60 ✗ char *wooow = json_object_to_json_string(json_object_object_get(tmp, "data"));
61 ✗ resources_constructors[j](&resource, json_object_to_json_string(json_object_object_get(tmp, "data")));
62 ✗ world_add_resource(world, &resource);
63 ✗ break;
64 }
65 }
66 }
67 ✗ return 0;
68 }
69
70 ✗ static int update_entities(world_t *world, json_object *entities)
71 {
72 ✗ entity_t entity = {0};
73 ✗ component_t component = {0};
74 json_object *tmp = 0;
75 void *data = 0;
76
77 ✗ while (world->entity_list.size(&world->entity_list) > 0) {
78 ✗ entity_t *ptr = world->entity_list.back(&world->entity_list);
79 ✗ while (ptr->components.size(&ptr->components) > 0) {
80 ✗ component_destructor(ptr->components.back(&ptr->components));
81 ✗ ptr->components.pop_back(&ptr->components);
82 }
83 ✗ world->entity_list.pop_back(&world->entity_list);
84 }
85 ✗ for (unsigned int i = 0; i < json_object_array_length(entities); i++) {
86 ✗ tmp = json_object_object_get(json_object_array_get_idx(entities, i), "components");
87 ✗ entity_constructor(&entity);
88 ✗ for (unsigned int j = 0; j < json_object_array_length(tmp); j++) {
89 ✗ for (unsigned int k = 0; components_types[k]; k++) {
90 ✗ if (strcmp(json_object_get_string(json_object_object_get(json_object_array_get_idx(tmp, j), "type")), components_types[k]) == 0) {
91 ✗ components_constructors[k](&component, json_object_to_json_string(json_object_object_get(json_object_array_get_idx(tmp, j), "data")));
92 ✗ entity_add_component(&entity, &component);
93 ✗ break;
94 }
95 }
96 }
97 ✗ world_add_entity(world, &entity);
98 }
99 ✗ return 0;
100 }
101
102 ✗ int system_load_scene_run(void *ptr)
103 {
104 world_t *world = ptr;
105 ✗ resource_t *scene_filename = world_get_resource_by_type(world, R_SCENE_FILENAME);
106 json_object *json = 0;
107
108 ✗ if (scene_filename == 0)
109 return -1;
110 ✗ json = json_object_from_file(scene_filename->data);
111 ✗ if (json == 0)
112 return -2;
113 ✗ update_resources(world, json_object_object_get(json_object_object_get(json, "world"), "resources"));
114 ✗ update_systems(world, json_object_object_get(json_object_object_get(json, "world"), "systems"));
115 ✗ update_entities(world, json_object_object_get(json_object_object_get(json, "world"), "entities"));
116 ✗ json_object_put(json);
117 ✗ return 0;
118 }
119