diff --git a/Makefile b/Makefile index c9b1317..ea161f9 100644 --- a/Makefile +++ b/Makefile @@ -6,57 +6,57 @@ ## SRC = src/engine/engine.c \ - src/engine/engine_internal.c \ - src/engine/discard_player.c \ - src/engine/engine_dataloader.c \ - src/entity/entity.c \ - src/entity/entity_factory.c \ - src/component.c \ - src/components/movable_component.c \ - src/components/collision_component.c \ - src/components/transform_component.c \ - src/components/renderer.c \ - src/components/camera_follow.c \ - src/components/fixed_to_cam.c \ - src/components/parallax_component.c \ - src/components/vertex_component.c \ - src/components/controllable_component.c \ - src/components/friction_component.c \ - src/components/friction_giver.c \ - src/components/controllers/keyboard_controller.c \ - src/components/renderers/sprite_renderer.c \ - src/components/renderers/anim_renderer.c \ - src/components/renderers/text_renderer.c \ - src/components/renderers/map_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 \ - src/deserializer/deserialize_entity.c \ - src/deserializer/prefab.c \ - src/system.c \ - src/systems/sfml_renderer_system.c \ - src/systems/movable_system.c \ - src/systems/camera_follow_system.c \ - src/systems/collision_system.c \ - src/systems/parallax_system.c \ - src/systems/controllers/keyboard_controller_system.c \ - src/systems/friction_system.c \ - src/systems/fixed_to_cam_pseudosystem.c \ - src/engine/engine_system_builder.c \ - src/engine/engine_component_builder.c \ - src/utility/vector2.c \ - src/utility/my_realloc.c \ - src/sfml_renderer/sfml_dataloaders.c \ - src/sfml_renderer/sfml_music_player.c \ - src/sfml_renderer/texture_utility.c \ - src/sfml_renderer/sfml_drawer.c \ - src/sfml_renderer/sfml_functions.c \ - src/sfml_renderer/sfml_vertex.c \ - src/ui/setup_ui.c \ - src/ui/button.c + src/engine/engine_internal.c \ + src/engine/discard_player.c \ + src/engine/engine_dataloader.c \ + src/entity/entity.c \ + src/entity/entity_factory.c \ + src/component.c \ + src/components/movable_component.c \ + src/components/collision_component.c \ + src/components/transform_component.c \ + src/components/renderer.c \ + src/components/camera_follow.c \ + src/components/fixed_to_cam.c \ + src/components/parallax_component.c \ + src/components/vertex_component.c \ + src/components/controllable_component.c \ + src/components/friction_component.c \ + src/components/friction_giver.c \ + src/components/controllers/keyboard_controller.c \ + src/components/renderers/sprite_renderer.c \ + src/components/renderers/anim_renderer.c \ + src/components/renderers/text_renderer.c \ + src/components/renderers/map_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 \ + src/deserializer/deserialize_entity.c \ + src/deserializer/prefab.c \ + src/system.c \ + src/systems/sfml_renderer_system.c \ + src/systems/movable_system.c \ + src/systems/camera_follow_system.c \ + src/systems/collision_system.c \ + src/systems/parallax_system.c \ + src/systems/controllers/keyboard_controller_system.c \ + src/systems/friction_system.c \ + src/systems/fixed_to_cam_pseudosystem.c \ + src/engine/engine_system_builder.c \ + src/engine/engine_component_builder.c \ + src/utility/vector2.c \ + src/utility/my_realloc.c \ + src/sfml_renderer/sfml_dataloaders.c \ + src/sfml_renderer/sfml_music_player.c \ + src/sfml_renderer/texture_utility.c \ + src/sfml_renderer/sfml_drawer.c \ + src/sfml_renderer/sfml_functions.c \ + src/sfml_renderer/sfml_vertex.c \ + src/ui/setup_ui.c \ + src/ui/button.c OBJ = $(SRC:%.c=%.o) @@ -65,7 +65,7 @@ GCDA = *.gcda GCNO = *.gcno TESTS = tests/deserializations.c \ - tests/game_loop.c + tests/game_loop.c INCLUDE = -I ./include @@ -87,20 +87,20 @@ AR = ar rc all: $(NAME) $(NAME): $(OBJ) - $(AR) $(NAME) $(OBJ) + $(AR) $(NAME) $(OBJ) tests_run: - $(CC) -o $(UT) $(SRC) $(TESTS) $(COVERAGE) $(CFLAGS) $(LDFLAGS) - $(UT) + $(CC) -o $(UT) $(SRC) $(TESTS) $(COVERAGE) $(CFLAGS) $(LDFLAGS) + $(UT) clean: - $(RM) $(OBJ) - $(RM) $(GCDA) - $(RM) $(GCNO) + $(RM) $(OBJ) + $(RM) $(GCDA) + $(RM) $(GCNO) fclean: clean - $(RM) $(NAME) - $(RM) $(UT) + $(RM) $(NAME) + $(RM) $(UT) re: fclean all diff --git a/include/callbacks.h b/include/callbacks.h index 8f62838..4b7fd02 100644 --- a/include/callbacks.h +++ b/include/callbacks.h @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 3/11/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** callbacks +*/ #ifndef _CALLBACKS_H_ #define _CALLBACKS_H_ @@ -9,8 +12,8 @@ struct callback { - const char *name; - callback_t func; + const char *name; + callback_t func; }; #endif //_CALLBACKS_H_ diff --git a/include/components/clickable_component.h b/include/components/clickable_component.h index 344f282..c188445 100644 --- a/include/components/clickable_component.h +++ b/include/components/clickable_component.h @@ -16,13 +16,13 @@ void clickable_manager_init(gc_engine *engine); struct clickable_component { - gc_component base; - //! @brief On click callback. - //! @param engine The engine. - //! @param entity_id The id of the clicked entity. - //! @return Return true if this callback catch the event (other listeners after this one won't get the event) - //! @return Return false if you want others listener to receive the event. - callback_t onclick; + gc_component base; + //! @brief On click callback. + //! @param engine The engine. + //! @param entity_id The id of the clicked entity. + //! @return Return true if this callback catch the event (other listeners after this one won't get the event) + //! @return Return false if you want others listener to receive the event. + callback_t onclick; }; diff --git a/include/components/input_component.h b/include/components/input_component.h index 2f33947..c003255 100644 --- a/include/components/input_component.h +++ b/include/components/input_component.h @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 3/2/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** input_component +*/ #ifndef _INPUT_COMPONENT_H_ #define _INPUT_COMPONENT_H_ @@ -9,8 +12,8 @@ struct input_component { - gc_component base; - int value; + gc_component base; + int value; }; extern const struct input_component input_component; diff --git a/include/components/renderer.h b/include/components/renderer.h index b94e840..e7ee7c6 100644 --- a/include/components/renderer.h +++ b/include/components/renderer.h @@ -11,11 +11,11 @@ #include "vector2.h" typedef enum gc_texturetype { - GC_NONE, GC_TEXTUREREND, GC_ANIMREND, GC_TXTREND, - GC_MAP + GC_MAP, + GC_NONE } gc_texturetype; struct renderer diff --git a/include/components/tag_component.h b/include/components/tag_component.h index 59647fd..b9e2e75 100644 --- a/include/components/tag_component.h +++ b/include/components/tag_component.h @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 3/3/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** tag_component +*/ #ifndef _TAG_COMPONENT_H_ #define _TAG_COMPONENT_H_ @@ -9,8 +12,8 @@ struct tag_component { - gc_component base; - char *tag; + gc_component base; + char *tag; }; const struct tag_component tag_component; diff --git a/include/components/tooltip_component.h b/include/components/tooltip_component.h index d586206..571932e 100644 --- a/include/components/tooltip_component.h +++ b/include/components/tooltip_component.h @@ -12,9 +12,9 @@ struct tooltip_component { - gc_component base; - struct transform_component *parent_transform; - gc_vector2 padding; + gc_component base; + struct transform_component *parent_transform; + gc_vector2 padding; }; extern const struct tooltip_component tooltip_component; \ No newline at end of file diff --git a/include/engine.h b/include/engine.h index 2622038..a003d06 100644 --- a/include/engine.h +++ b/include/engine.h @@ -58,13 +58,13 @@ struct gc_engine gc_list *callbacks; void (*add_callback)(gc_engine *this, char *name, callback_t callback); - void (*on_resize)(gc_engine *this, gc_vector2 size); - gc_vector2 (*get_screen_size)(gc_engine *this); - gc_vector2 (*get_cursor_pos)(gc_engine *this); + void (*on_resize)(gc_engine *this, gc_vector2 size); + gc_vector2 (*get_screen_size)(gc_engine *this); + gc_vector2 (*get_cursor_pos)(gc_engine *this); - gc_list *event_listeners; - void (*trigger_event)(gc_engine *this, const char *name, ...); - bool (*add_event_listener)(gc_engine *this, const char *name, \ + gc_list *event_listeners; + void (*trigger_event)(gc_engine *this, const char *name, ...); + bool (*add_event_listener)(gc_engine *this, const char *name, \ void (*func)(gc_engine *, va_list)); }; @@ -89,6 +89,7 @@ void engine_add_buildin_components(gc_engine *engine); const void *engine_get_component(gc_engine *engine, const char *name); void engine_add_component(gc_engine *engine, const void *component); +void engine_setup_event(gc_engine *engine); void engine_init_dataloaders(gc_engine *this); void engine_add_dataloader(gc_engine *engine, char *type, gc_loader loader); gc_dataloader *engine_get_dataloader(gc_engine *this, const char *type); diff --git a/include/errors.h b/include/errors.h index 2d2d16a..63a6823 100644 --- a/include/errors.h +++ b/include/errors.h @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 2/21/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** errors +*/ #ifndef _ERRORS_H_ #define _ERRORS_H_ diff --git a/include/event_manager.h b/include/event_manager.h index 39ebc96..25301e8 100644 --- a/include/event_manager.h +++ b/include/event_manager.h @@ -1,6 +1,9 @@ -// -// Created by cbihan on 3/9/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** event_manager +*/ #ifndef MY3D_EVENT_MANAGER_H #define MY3D_EVENT_MANAGER_H @@ -11,8 +14,8 @@ typedef struct gc_event_manager gc_event_manager; struct gc_event_listener { - void (*func)(gc_engine *, va_list); - const char *name; + void (*func)(gc_engine *, va_list); + const char *name; }; void engine_trigger_event(gc_engine *engine, const char *name, ...); diff --git a/include/keybindings.h b/include/keybindings.h index 6b7b279..3d7c1e1 100644 --- a/include/keybindings.h +++ b/include/keybindings.h @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 3/9/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** keybindings +*/ #ifndef _KEYBINDINGS_H_ #define _KEYBINDINGS_H_ @@ -9,13 +12,13 @@ typedef enum gc_keybindings { - ESCAPE = sfKeyEscape + ESCAPE = sfKeyEscape } gc_keybindings; typedef enum gc_mousekeys { - GC_LEFT, - GC_RIGHT + GC_LEFT, + GC_RIGHT } gc_mousekeys; #endif //_KEYBINDINGS_H_ diff --git a/include/scene.h b/include/scene.h index 928be44..8ff0c68 100644 --- a/include/scene.h +++ b/include/scene.h @@ -28,10 +28,10 @@ struct gc_scene gc_list *(*get_entity_by_cmp)(gc_scene *scene, const char *cmp_name); void (*load_entity)(gc_scene *this, gc_engine *engine, node *xml, int pref); - gc_list *callbacks; - callback_t (*get_callback)(gc_scene *this, char *name); + gc_list *callbacks; + callback_t (*get_callback)(gc_scene *this, char *name); - bool is_paused; + bool is_paused; }; callback_t scene_get_callback(gc_scene *scene, char *name); diff --git a/include/sfml_renderer.h b/include/sfml_renderer.h index 3970f93..23b30d4 100644 --- a/include/sfml_renderer.h +++ b/include/sfml_renderer.h @@ -24,15 +24,14 @@ sfTexture *get_texture(gc_scene *scene, char *name); sfVertexArray *sfml_init_verticies(void); sfRenderStates *sfml_init_render_state(void); -void sfmlrenderer_draw_texture(struct sfml_renderer_system *renderer, \ -struct transform_component *tra, gc_entity *entity, gc_sprite *sprite); -void sfmlrenderer_draw_anim(struct sfml_renderer_system *renderer, \ +void sfmlrenderer_draw_texture(gc_engine *engine, \ +gc_entity *entity, gc_sprite *sprite, float dt); +void sfmlrenderer_draw_anim(gc_engine *engine, \ gc_entity *entity, gc_animholder *holder, float dtime); -void sfmlrenderer_draw_txt(gc_engine *engine, \ -struct sfml_renderer_system *renderer, struct transform_component *tra, \ -gc_text *txt); -void sfmlrenderer_draw_tilemap(struct sfml_renderer_system *this, -struct transform_component *pos, struct vertex_component *txt); +void sfmlrenderer_draw_txt(gc_engine *engine, gc_entity *entity, \ +gc_text *txt, float dt); +void sfmlrenderer_draw_tilemap(gc_engine *engine, gc_entity *entity, \ +struct vertex_component *txt, float dt); void sfml_texture_destroy(gc_data *data); void sfml_music_destroy(gc_data *data); diff --git a/include/sprite.h b/include/sprite.h index a08511b..b6c1c72 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -13,9 +13,9 @@ typedef struct gc_int_rect { int height; - int width; - int top; - int left; + int width; + int top; + int left; } gc_int_rect; typedef struct gc_sprite { diff --git a/include/tile_collision_manager.h b/include/tile_collision_manager.h index b3a03b7..3de6c1f 100644 --- a/include/tile_collision_manager.h +++ b/include/tile_collision_manager.h @@ -21,7 +21,8 @@ bool is_on_segment(gc_vector2 p, gc_vector2 q, gc_vector2 r); int orientation(gc_vector2 p, gc_vector2 q, gc_vector2 r); //! @brief Checks if segments p1q1 and p2q2 intersects -bool gc_vector2_do_intersect(gc_vector2 p1, gc_vector2 q1, gc_vector2 p2, gc_vector2 q2); +bool gc_vector2_do_intersect(gc_vector2 p1, gc_vector2 q1, \ +gc_vector2 p2, gc_vector2 q2); //! @brief Checks if a point is in a polygon //! @note The segment created to check is [10000, p.x] so beware when checking with large coordinates diff --git a/include/ui.h b/include/ui.h index 140a2d2..781d7ab 100644 --- a/include/ui.h +++ b/include/ui.h @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 2/21/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** ui +*/ #ifndef _UI_H_ #define _UI_H_ diff --git a/include/vector2.h b/include/vector2.h index 3557252..de0584c 100644 --- a/include/vector2.h +++ b/include/vector2.h @@ -15,8 +15,8 @@ typedef struct gc_vector2 typedef struct gc_vector2i { - int x; - int y; + int x; + int y; } gc_vector2i; float gcvector_magnitude(gc_vector2 vec); diff --git a/src/components/clickable_component.c b/src/components/clickable_component.c index beddcdb..d92ac33 100644 --- a/src/components/clickable_component.c +++ b/src/components/clickable_component.c @@ -13,53 +13,53 @@ static void ctr(void *component, va_list args) { - struct clickable_component *cmp = (struct clickable_component *)component; - gc_scene *scene = va_arg(args, gc_scene *); - char *onclick = va_arg(args, char *); - callback_t callback; + struct clickable_component *cmp = (struct clickable_component *)component; + gc_scene *scene = va_arg(args, gc_scene *); + char *onclick = va_arg(args, char *); + callback_t callback; - if (!scene) - return; - callback = scene->get_callback(scene, onclick); - if (!callback) - my_printf("No callback found with the name: %s\n", onclick); - cmp->onclick = callback; + if (!scene) + return; + callback = scene->get_callback(scene, onclick); + if (!callback) + my_printf("No callback found with the name: %s\n", onclick); + cmp->onclick = callback; } static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) { - struct clickable_component *cmp = (struct clickable_component *)component; - char *onclick = xml_gettempprop(n, "click"); - callback_t callback; + struct clickable_component *cmp = (struct clickable_component *)component; + char *onclick = xml_gettempprop(n, "click"); + callback_t callback; - if (!scene) - return; - callback = scene->get_callback(scene, onclick); - if (!callback) - my_printf("No callback found with the name: %s\n", onclick); - cmp->onclick = callback; + if (!scene) + return; + callback = scene->get_callback(scene, onclick); + if (!callback) + my_printf("No callback found with the name: %s\n", onclick); + cmp->onclick = callback; } static void dtr(void *component) { - (void)component; + (void)component; } static char *serialize(void *component) { - (void)component; - return (NULL); + (void)component; + return (NULL); } const struct clickable_component clickable_component = { - base: { - name: "clickable_component", - size: sizeof(struct clickable_component), - dependencies: (char *[]){"transform_component", NULL}, - ctr: &ctr, - fdctr: &fdctr, - dtr: &dtr, - serialize: &serialize, - destroy: &component_destroy - } + base: { + name: "clickable_component", + size: sizeof(struct clickable_component), + dependencies: (char *[]){"transform_component", NULL}, + ctr: &ctr, + fdctr: &fdctr, + dtr: &dtr, + serialize: &serialize, + destroy: &component_destroy + } }; \ No newline at end of file diff --git a/src/components/fixed_to_cam.c b/src/components/fixed_to_cam.c index 97d94b2..cb176aa 100644 --- a/src/components/fixed_to_cam.c +++ b/src/components/fixed_to_cam.c @@ -27,17 +27,17 @@ static void ctr(void *component, va_list args) static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) { struct fixed_to_cam *cmp = (struct fixed_to_cam *)component; - char *tmp; + char *tmp; n = xml_getnode(n, "Position"); cmp->pos.x = xml_getintprop(n, "x"); cmp->pos.y = xml_getintprop(n, "y"); - tmp = xml_gettempprop(n, "x"); - cmp->per_x = tmp && my_strchr(tmp, '%'); - tmp = xml_gettempprop(n, "y"); - cmp->per_y = tmp && my_strchr(tmp, '%'); - cmp->size_x = xml_getintprop(n, "width"); - cmp->size_y = xml_getintprop(n, "height"); + tmp = xml_gettempprop(n, "x"); + cmp->per_x = tmp && my_strchr(tmp, '%'); + tmp = xml_gettempprop(n, "y"); + cmp->per_y = tmp && my_strchr(tmp, '%'); + cmp->size_x = xml_getintprop(n, "width"); + cmp->size_y = xml_getintprop(n, "height"); (void)scene; (void)entity; } diff --git a/src/components/input_component.c b/src/components/input_component.c index 13e76dc..c1acc3a 100644 --- a/src/components/input_component.c +++ b/src/components/input_component.c @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 3/2/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** input_component +*/ #include "xml.h" #include "entity.h" @@ -9,41 +12,41 @@ static void ctr(void *component, va_list args) { - struct input_component *cmp = (struct input_component *)component; + struct input_component *cmp = (struct input_component *)component; - cmp->value = 0; + cmp->value = 0; } static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) { - struct input_component *cmp = (struct input_component *)component; + struct input_component *cmp = (struct input_component *)component; - cmp->value = 0; - (void)scene; - (void)entity; + cmp->value = 0; + (void)scene; + (void)entity; } static void dtr(void *component) { - (void)component; + (void)component; } static char *serialize(void *component) { - (void)component; - return (NULL); + (void)component; + return (NULL); } const struct input_component input_component = { - base: { - name: "input_component", - size: sizeof(struct input_component), - dependencies: (char *[]){ NULL }, - ctr: &ctr, - fdctr: &fdctr, - dtr: &dtr, - serialize: &serialize, - destroy: &component_destroy - }, - value: 0 + base: { + name: "input_component", + size: sizeof(struct input_component), + dependencies: (char *[]){ NULL }, + ctr: &ctr, + fdctr: &fdctr, + dtr: &dtr, + serialize: &serialize, + destroy: &component_destroy + }, + value: 0 }; \ No newline at end of file diff --git a/src/components/isometry/create_map_functions.c b/src/components/isometry/create_map_functions.c index b4a0884..8d6cc5e 100644 --- a/src/components/isometry/create_map_functions.c +++ b/src/components/isometry/create_map_functions.c @@ -12,87 +12,86 @@ bool get_vertices(struct vertex_component *this, node *n) { - int i = 0; - int j = 0; - int size[3] = {sizeof(struct vertex), sizeof(struct vertex *), 0}; + int i = 0; + int j = 0; + int size[3] = {sizeof(struct vertex), sizeof(struct vertex *), 0}; - this->vertices = malloc(size[1] * (xml_getchildcount(n) + 1)); - if (!this->vertices) - return (false); - for (node *line = n->child; line; line = line->next) { - this->vertices[i] = malloc(size[0] * (xml_getchildcount(line) + 1)); - if (!this->vertices[i]) - return (false); - for (node *row = line->child; row; row = row->next) { - size[2] = xml_getintprop(row, "height"); - this->vertices[i][j] = (struct vertex){i, j++, size[2]}; - } - this->vertices[i++][j] = (struct vertex){0, 0, INT32_MIN}; - j = 0; - } - this->vertices[i] = NULL; - return (true); + this->vertices = malloc(size[1] * (xml_getchildcount(n) + 1)); + if (!this->vertices) + return (false); + for (node *line = n->child; line; line = line->next) { + this->vertices[i] = malloc(size[0] * (xml_getchildcount(line) + 1)); + if (!this->vertices[i]) + return (false); + for (node *row = line->child; row; row = row->next) { + size[2] = xml_getintprop(row, "height"); + this->vertices[i][j] = (struct vertex){i, j++, size[2]}; + } + this->vertices[i++][j] = (struct vertex){0, 0, INT32_MIN}; + j = 0; + } + this->vertices[i] = NULL; + return (true); } char *get_texture_for_coords(gc_vector2i coords, node *n) { - char *texture = NULL; + char *texture = NULL; - for (node *text = n->child; text; text = text->next) { - if (xml_getintprop(text, "x") != coords.x) - continue; - if (xml_getintprop(text, "y") != coords.y) - continue; - texture = xml_getproperty(text, "name"); - break; - } - return (texture); + for (node *text = n->child; text; text = text->next) { + if (xml_getintprop(text, "x") != coords.x) + continue; + if (xml_getintprop(text, "y") != coords.y) + continue; + texture = xml_getproperty(text, "name"); + break; + } + return (texture); } bool init_tile(struct vertex_component *this, int *inc, void **d, \ gc_vector2i c) { - char *t; - void *tmp; - gc_vector2i arr[4] = {c, (gc_vector2i){c.x, c.y + 1}, \ + char *t; + void *tmp; + gc_vector2i arr[4] = {c, (gc_vector2i){c.x, c.y + 1}, \ (gc_vector2i){c.x + 1, c.y + 1}, (gc_vector2i){c.x + 1, c.y}}; - for (int i = 0; i < 4; i++) - if (this->vertices[arr[i].x][arr[i].y].z == INT32_MIN) - return (false); - for (int i = 0; i < 4; i++) - this->map[*inc].corners[i] = &this->vertices[arr[i].x][arr[i].y]; - this->map[*inc].data = 0; - t = get_texture_for_coords(c, d[0]); - if (t) { - tmp = ((gc_scene *)d[1])->get_data(d[1], "sprite", t); - this->map[*inc].texture = tmp; - free(t); - } - else - this->map[*inc].texture = NULL; - return (true); + for (int i = 0; i < 4; i++) + if (this->vertices[arr[i].x][arr[i].y].z == INT32_MIN) + return (false); + for (int i = 0; i < 4; i++) + this->map[*inc].corners[i] = &this->vertices[arr[i].x][arr[i].y]; + this->map[*inc].data = 0; + t = get_texture_for_coords(c, d[0]); + if (t) { + tmp = ((gc_scene *)d[1])->get_data(d[1], "sprite", t); + this->map[*inc].texture = tmp; + free(t); + } + else + this->map[*inc].texture = NULL; + return (true); } bool get_tiles(struct vertex_component *this, gc_scene *scene, node *n) { - int inc = 0; - int v_x = xml_getchildcount(n); - void *dodge[2] = {n->next, scene}; - int vy = xml_getchildcount(n->child->child); + int inc = 0; + int v_x = xml_getchildcount(n); + void *dodge[2] = {n->next, scene}; + int vy = xml_getchildcount(n->child->child); - for (node *line = n->child; line; line = line->next) - vy = (xml_getchildcount(line) > vy) ? xml_getchildcount(line) : vy; - this->map = malloc(sizeof(struct tile) * (v_x * vy + 1)); - if (!this->map) - return (false); - for (v_x = 0; this->vertices[v_x + 1]; v_x++) { - for (vy = 0; this->vertices[v_x][vy].z != INT32_MIN; vy++) { - if (!init_tile(this, &inc, dodge, (gc_vector2i){v_x, vy})) - break; - inc++; - } - } - this->map[inc].corners[0] = NULL; - return (true); + for (node *line = n->child; line; line = line->next) + vy = (xml_getchildcount(line) > vy) ? xml_getchildcount(line) : vy; + this->map = malloc(sizeof(struct tile) * (v_x * vy + 1)); + if (!this->map) + return (false); + for (v_x = 0; this->vertices[v_x + 1]; v_x++) { + for (vy = 0; this->vertices[v_x][vy].z != INT32_MIN; vy++) { + if (init_tile(this, &inc, dodge, (gc_vector2i){v_x, vy})) + inc++; + } + } + this->map[inc].corners[0] = NULL; + return (true); } \ No newline at end of file diff --git a/src/components/isometry/map_managment.c b/src/components/isometry/map_managment.c index 22d9a92..7c02500 100644 --- a/src/components/isometry/map_managment.c +++ b/src/components/isometry/map_managment.c @@ -13,40 +13,40 @@ gc_vector2 get_tile_coords_to_pixels(float x, float y, float z) { - return (gc_vector2){ - cos(ANGLE_X) * y * 64 - cos(ANGLE_X) * x * 64, - -(sin(ANGLE_Y) * x * 64 + sin(ANGLE_Y) * y * 64 - z) - }; + return (gc_vector2){ + cos(ANGLE_X) * y * 64 - cos(ANGLE_X) * x * 64, + -(sin(ANGLE_Y) * x * 64 + sin(ANGLE_Y) * y * 64 - z) + }; } struct tile *get_tile_from_pos(struct vertex_component *map, gc_vector2 pos) { - if (!map || !map->map) - return (NULL); - for (int i = 0; map->map[i].corners[0]; i++) { - if (map->map[i].corners[0]->z == INT32_MAX || !map->map[i].corners[2]->y) - continue; - if (is_pos_in_tile(pos, &map->map[i])) { - return (&map->map[i]); - } - } - return (NULL); + if (!map || !map->map) + return (NULL); + for (int i = 0; map->map[i].corners[0]; i++) { + if (map->map[i].corners[0]->z == INT32_MAX || !map->map[i].corners[2]->y) + continue; + if (is_pos_in_tile(pos, &map->map[i])) { + return (&map->map[i]); + } + } + return (NULL); } int get_index_nearest_vertex(struct tile *sel, gc_vector2 pos) { - float spacing = INFINITY; - gc_vector2 coords; - double tmp; - int i_stock = 0; + float spacing = INFINITY; + gc_vector2 coords; + double tmp; + int i_stock = 0; - for (int i = 0; i < 4; i++) { - coords = get_tile_coords_to_pixels(sel->corners[i]->x, sel->corners[i]->y, sel->corners[i]->z); - tmp = pow(coords.x - pos.x, 2) + pow(coords.y - pos.y, 2); - if (tmp < spacing) { - spacing = tmp; - i_stock = i; - } - } - return (i_stock); + for (int i = 0; i < 4; i++) { + coords = get_tile_coords_to_pixels(sel->corners[i]->x, sel->corners[i]->y, sel->corners[i]->z); + tmp = pow(coords.x - pos.x, 2) + pow(coords.y - pos.y, 2); + if (tmp < spacing) { + spacing = tmp; + i_stock = i; + } + } + return (i_stock); } \ No newline at end of file diff --git a/src/components/isometry/vertex_component.c b/src/components/isometry/vertex_component.c index f4f3a85..b8224de 100644 --- a/src/components/isometry/vertex_component.c +++ b/src/components/isometry/vertex_component.c @@ -21,22 +21,22 @@ static void ctr(void *component, va_list args) static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) { struct vertex_component *this = (struct vertex_component *)component; - char *tilemap = xml_gettempprop(n, "tilemap"); - char *name = n->name; + char *tilemap = xml_gettempprop(n, "tilemap"); + char *name = n->name; this->vertices = NULL; this->map = NULL; if (!tilemap) { - my_printf("gamacon: unable to find property 'tilemap' on %s\n", name); - return; + my_printf("gamacon: unable to find property 'tilemap' on %s\n", name); + return; } n = xml_parse(tilemap); if (!n) { - my_printf("gamacon: unable to find a valid tilemap at %s\n", tilemap); - return; + my_printf("gamacon: unable to find a valid tilemap at %s\n", tilemap); + return; } if (!get_vertices(this, n->child) || !get_tiles(this, scene, n->child)) { - my_printf("Unable to malloc during verticies/tile parsing\n"); + my_printf("Unable to malloc during verticies/tile parsing\n"); return; } } diff --git a/src/components/isometry/vertex_data_loader.c b/src/components/isometry/vertex_data_loader.c index d1ef89d..1e025b3 100644 --- a/src/components/isometry/vertex_data_loader.c +++ b/src/components/isometry/vertex_data_loader.c @@ -13,30 +13,30 @@ void vertex_data_destroy(gc_data *data) { - free(data->custom); + free(data->custom); } gc_data *tile_texture_array_loader(gc_engine *engine, gc_scene *scene, node *n) { - gc_data *data = malloc(sizeof(*data)); - void **arr; - int count = 0; + gc_data *data = malloc(sizeof(*data)); + void **arr; + int count = 0; - if (!data) - return (NULL); - data->type = my_strdup(n->name); - data->name = NULL; - if (!data->type) - return (NULL); - count = xml_getchildcount(n); - arr = malloc(sizeof(void *) * (count + 1)); - if (!arr) - return (NULL); - n = n->child; - for (int i = 0; n; n = n->next, i++) - arr[i] = scene->get_data(scene, "sprite", xml_gettempprop(n, "name")); - arr[count - 1] = NULL; - data->custom = arr; - data->destroy = &vertex_data_destroy; - return (data); + if (!data) + return (NULL); + data->type = my_strdup(n->name); + data->name = NULL; + if (!data->type) + return (NULL); + count = xml_getchildcount(n); + arr = malloc(sizeof(void *) * (count + 1)); + if (!arr) + return (NULL); + n = n->child; + for (int i = 0; n; n = n->next, i++) + arr[i] = scene->get_data(scene, "sprite", xml_gettempprop(n, "name")); + arr[count - 1] = NULL; + data->custom = arr; + data->destroy = &vertex_data_destroy; + return (data); } \ No newline at end of file diff --git a/src/components/renderer.c b/src/components/renderer.c index 59f0e6b..7860977 100644 --- a/src/components/renderer.c +++ b/src/components/renderer.c @@ -49,7 +49,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) gc_texturetype type = renderer_get_type(n); cmp->type = type; - cmp->is_visible = true; + cmp->is_visible = true; if (type == GC_TEXTUREREND) sprite_fdctr(scene, cmp, n); if (type == GC_ANIMREND) @@ -82,8 +82,6 @@ static void dtr(void *component) case GC_TEXTUREREND: free(cmp->data); break; - default: - break; } } diff --git a/src/components/renderers/text_renderer.c b/src/components/renderers/text_renderer.c index edbd1c2..b638c4c 100644 --- a/src/components/renderers/text_renderer.c +++ b/src/components/renderers/text_renderer.c @@ -16,13 +16,13 @@ int color_from_text(char *txt) { - if (txt == NULL) - return (*(int *)&sfWhite); - if (!my_strcmp(txt, "black")) - return (*(int *)&sfBlack); - if (!my_strcmp(txt, "white")) - return (*(int *)&sfWhite); - return (*(int *)&sfWhite); + if (txt == NULL) + return (*(int *)&sfWhite); + if (!my_strcmp(txt, "black")) + return (*(int *)&sfBlack); + if (!my_strcmp(txt, "white")) + return (*(int *)&sfWhite); + return (*(int *)&sfWhite); } void text_ctr(struct renderer *cmp, va_list args) @@ -39,7 +39,7 @@ void text_ctr(struct renderer *cmp, va_list args) gctext->resize = va_arg(args, int); if (gctext->size <= 0) - gctext->size = 30; + gctext->size = 30; } void text_fdctr(gc_scene *scene, struct renderer *cmp, node *n) @@ -53,7 +53,7 @@ void text_fdctr(gc_scene *scene, struct renderer *cmp, node *n) if (!gctext->text) return; gctext->font = scene->get_data(scene, "font", xml_getproperty(n, "src")); - gctext->size = 30; - gctext->color = *(int *)&sfWhite; - gctext->resize = true; + gctext->size = 30; + gctext->color = *(int *)&sfWhite; + gctext->resize = true; } diff --git a/src/components/tag_component.c b/src/components/tag_component.c index 6fa1d8e..168028e 100644 --- a/src/components/tag_component.c +++ b/src/components/tag_component.c @@ -13,43 +13,43 @@ static void ctr(void *component, va_list args) { - struct tag_component *cmp = (struct tag_component *)component; + struct tag_component *cmp = (struct tag_component *)component; - cmp->tag = va_arg(args, char *); + cmp->tag = va_arg(args, char *); } static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) { - struct tag_component *cmp = (struct tag_component *)component; + struct tag_component *cmp = (struct tag_component *)component; - cmp->tag = xml_getproperty(n, "tag"); - (void)scene; - (void)entity; + cmp->tag = xml_getproperty(n, "tag"); + (void)scene; + (void)entity; } static void dtr(void *component) { - struct tag_component *cmp = (struct tag_component *)component; + struct tag_component *cmp = (struct tag_component *)component; - free(cmp->tag); + free(cmp->tag); } static char *serialize(void *component) { - (void)component; - return (NULL); + (void)component; + return (NULL); } const struct tag_component tag_component = { - base: { - name: "tag_component", - size: sizeof(struct tag_component), - dependencies: (char *[]){NULL}, - ctr: &ctr, - fdctr: &fdctr, - dtr: &dtr, - serialize: &serialize, - destroy: &component_destroy - }, - tag: NULL + base: { + name: "tag_component", + size: sizeof(struct tag_component), + dependencies: (char *[]){NULL}, + ctr: &ctr, + fdctr: &fdctr, + dtr: &dtr, + serialize: &serialize, + destroy: &component_destroy + }, + tag: NULL }; \ No newline at end of file diff --git a/src/components/tile_collision_manager.c b/src/components/tile_collision_manager.c index e43d436..a78f364 100644 --- a/src/components/tile_collision_manager.c +++ b/src/components/tile_collision_manager.c @@ -13,74 +13,68 @@ bool is_on_segment(gc_vector2 p, gc_vector2 q, gc_vector2 r) { - if (q.x <= fmaxf(p.x, r.x) && q.x >= fminf(p.x, r.x) && \ + if (q.x <= fmaxf(p.x, r.x) && q.x >= fminf(p.x, r.x) && \ q.y <= fmaxf(p.y, r.y) && q.y >= fminf(p.y, r.y)) - return (true); - return (false); + return (true); + return (false); } int orientation(gc_vector2 p, gc_vector2 q, gc_vector2 r) { - int tmp = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); + int tmp = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); - if (tmp == 0) - return (0); - return ((tmp > 0) ? 1 : 2); + if (tmp == 0) + return (0); + return ((tmp > 0) ? 1 : 2); } bool gc_vector2_do_intersect(gc_vector2 p1, gc_vector2 q1, gc_vector2 p2, gc_vector2 q2) { - int o1 = orientation(p1, q1, p2); - int o2 = orientation(p1, q1, q2); - int o3 = orientation(p2, q2, p1); - int o4 = orientation(p2, q2, q1); + int o1 = orientation(p1, q1, p2); + int o2 = orientation(p1, q1, q2); + int o3 = orientation(p2, q2, p1); + int o4 = orientation(p2, q2, q1); - if (o1 != o2 && o3 != o4) - return (true); - if (o1 == 0 && is_on_segment(p1, p2, q1)) - return (true); - if (o2 == 0 && is_on_segment(p1, q2, q1)) - return (true); - if (o3 == 0 && is_on_segment(p2, p1, q2)) - return (true); - if (o4 == 0 && is_on_segment(p2, q1, q2)) - return (true); - return (false); + if (o1 != o2 && o3 != o4) + return (true); + if (o1 == 0 && is_on_segment(p1, p2, q1)) + return (true); + if (o2 == 0 && is_on_segment(p1, q2, q1)) + return (true); + if (o3 == 0 && is_on_segment(p2, p1, q2)) + return (true); + if (o4 == 0 && is_on_segment(p2, q1, q2)) + return (true); + return (false); } bool is_point_in_polygon(gc_vector2 *polygon, int n, gc_vector2 p) { - gc_vector2 segment = {-INF, p.y}; - int count = 0; - int next = 0; - int i = 0; + gc_vector2 segment = {-INF, p.y}; + int count = 0; + int next = 0; + int i = 0; - if (n < 3) - return (false); - do { - next = (i + 1) % n; - if (gc_vector2_do_intersect(polygon[i], polygon[next], p, segment)) { - if (orientation(polygon[i], p, polygon[next]) == 0) - return (is_on_segment(polygon[i], p, polygon[next])); - count++; - } - i = next; - } while (i != 0); - return (count & 1); + if (n < 3) + return (false); + do { + next = (i + 1) % n; + if (gc_vector2_do_intersect(polygon[i], polygon[next], p, segment)) { + if (orientation(polygon[i], p, polygon[next]) == 0) + return (is_on_segment(polygon[i], p, polygon[next])); + count++; + } + i = next; + } while (i != 0); + return (count & 1); } bool is_pos_in_tile(gc_vector2 pos, struct tile *tile) { - struct vertex **c = tile->corners; - gc_vector2 corners[4]; + struct vertex **c = tile->corners; + gc_vector2 corners[4]; - for (int i = 0; i < 4; i++) - corners[i] = get_tile_coords_to_pixels(c[i]->x, c[i]->y, c[i]->z); - if (is_point_in_polygon(corners, 4, pos)) { - //for (int i = 0; i < 4; i ++) - // printf("%i :(x:%f, y:%f)\n", i + 1, corners[i].x, corners[i].y); - // printf("\n"); - return (true); - } - return (false); + for (int i = 0; i < 4; i++) + corners[i] = get_tile_coords_to_pixels(c[i]->x, c[i]->y, c[i]->z); + return (is_point_in_polygon(corners, 4, pos)); } \ No newline at end of file diff --git a/src/components/tooltip_component.c b/src/components/tooltip_component.c index 88d8a9c..778fede 100644 --- a/src/components/tooltip_component.c +++ b/src/components/tooltip_component.c @@ -11,16 +11,16 @@ static void ctr(void *component, va_list args) { - struct tooltip_component *cmp = (struct tooltip_component *)component; + struct tooltip_component *cmp = (struct tooltip_component *)component; - cmp->parent_transform = va_arg(args, struct transform_component *); - cmp->padding.x = va_arg(args, double); - cmp->padding.y = va_arg(args, double); + cmp->parent_transform = va_arg(args, struct transform_component *); + cmp->padding.x = va_arg(args, double); + cmp->padding.y = va_arg(args, double); } static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) { - my_printf("Can't create a tooltip component from the fdctr.\n"); + my_printf("Can't create a tooltip component from the fdctr.\n"); } static void dtr(void *component) @@ -29,19 +29,19 @@ static void dtr(void *component) static char *serialize(void *component) { - (void)component; - return (NULL); + (void)component; + return (NULL); } const struct tooltip_component tooltip_component = { - base: { - name: "tooltip_component", - size: sizeof(struct tooltip_component), - dependencies: (char *[]) {"renderer", NULL}, - ctr: &ctr, - fdctr: &fdctr, - dtr: &dtr, - serialize: &serialize, - destroy: &component_destroy - } + base: { + name: "tooltip_component", + size: sizeof(struct tooltip_component), + dependencies: (char *[]) {"renderer", NULL}, + ctr: &ctr, + fdctr: &fdctr, + dtr: &dtr, + serialize: &serialize, + destroy: &component_destroy + } }; \ No newline at end of file diff --git a/src/deserializer/prefab.c b/src/deserializer/prefab.c index 9dbe80e..6f9796a 100644 --- a/src/deserializer/prefab.c +++ b/src/deserializer/prefab.c @@ -33,18 +33,18 @@ int prefab_loadentities(node *n, gc_engine *engine, gc_scene *scene) if (!n) return (-1); for (node *ent_n = n->child; ent_n; ent_n = ent_n->next) { - if (my_strcmp(ent_n->name, "gc_entity")) { - scene->load_entity(scene, engine, ent_n, prefab_id); - continue; - } - entity = deserialize_entity(engine, scene, ent_n); + if (my_strcmp(ent_n->name, "gc_entity")) { + scene->load_entity(scene, engine, ent_n, prefab_id); + continue; + } + entity = deserialize_entity(engine, scene, ent_n); if (!entity) return (-1); entity->prefab_id = prefab_id; scene->add_entity(scene, entity); } - prefab_id++; + prefab_id++; if (engine->on_resize && engine->get_screen_size && engine->scene) - engine->on_resize(engine, engine->get_screen_size(engine)); + engine->on_resize(engine, engine->get_screen_size(engine)); return (0); } \ No newline at end of file diff --git a/src/engine/discard_player.c b/src/engine/discard_player.c index a01c970..46834e8 100644 --- a/src/engine/discard_player.c +++ b/src/engine/discard_player.c @@ -19,18 +19,18 @@ void engine_stop_music(gc_engine *engine) void engine_on_resize(gc_engine *engine, gc_vector2 size) { - (void)engine; - (void)size; + (void)engine; + (void)size; } gc_vector2 engine_get_screen_size(gc_engine *this) { - (void)this; - return ((gc_vector2){0, 0}); + (void)this; + return ((gc_vector2){0, 0}); } gc_vector2 engine_get_cursor_pos(gc_engine *this) { - (void)this; - return ((gc_vector2){0, 0}); + (void)this; + return ((gc_vector2){0, 0}); } \ No newline at end of file diff --git a/src/engine/engine.c b/src/engine/engine.c index cbfdec9..d63d72c 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -64,8 +64,8 @@ void engine_destroy(gc_engine *engine) gc_engine *engine_create_more(gc_engine *engine) { - engine->get_cursor_pos = &engine_get_cursor_pos; - return (engine); + engine->get_cursor_pos = &engine_get_cursor_pos; + return (engine); } gc_engine *engine_create(void) @@ -86,11 +86,8 @@ gc_engine *engine_create(void) engine->play_music = &engine_play_music; engine->stop_music = &engine_stop_music; engine->destroy = &engine_destroy; - engine->on_resize = &engine_on_resize; - engine->event_listeners = NULL; - engine->add_event_listener = &engine_add_event_listener; - engine->trigger_event = &engine_trigger_event; - engine_add_builtin_systems(engine); + engine_setup_event(engine); + engine_add_builtin_systems(engine); engine_add_buildin_components(engine); engine_init_dataloaders(engine); return (engine_create_more(engine)); diff --git a/src/engine/engine_dataloader.c b/src/engine/engine_dataloader.c index a0c1b3c..db036b6 100644 --- a/src/engine/engine_dataloader.c +++ b/src/engine/engine_dataloader.c @@ -25,38 +25,38 @@ void engine_add_dataloader(gc_engine *engine, char *type, gc_loader loader) gc_dataloader *engine_get_dataloader(gc_engine *this, const char *type) { - gc_dataloader *loader; + gc_dataloader *loader; - for (gc_list *li = this->dataloaders; li; li = li->next) { - loader = (gc_dataloader *)li->data; - if (!my_strcmp(loader->type, type)) - return (loader); - } - return (NULL); + for (gc_list *li = this->dataloaders; li; li = li->next) { + loader = (gc_dataloader *)li->data; + if (!my_strcmp(loader->type, type)) + return (loader); + } + return (NULL); } void engine_init_dataloaders(gc_engine *this) { - this->callbacks = NULL; - this->dataloaders = NULL; - this->add_dataloader = &engine_add_dataloader; - this->get_dataloader = &engine_get_dataloader; - this->add_callback = &engine_add_callback; - this->add_dataloader(this, "tiles", &tile_texture_array_loader); - ui_setup(this); + this->callbacks = NULL; + this->dataloaders = NULL; + this->add_dataloader = &engine_add_dataloader; + this->get_dataloader = &engine_get_dataloader; + this->add_callback = &engine_add_callback; + this->add_dataloader(this, "tiles", &tile_texture_array_loader); + ui_setup(this); } void engine_add_callback(gc_engine *this, char *name, callback_t func) { - gc_data *callback = malloc(sizeof(*callback)); + gc_data *callback = malloc(sizeof(*callback)); - if (!this || !callback) - return; - callback->type = my_strdup("callback"); - callback->name = name; - callback->destroy = NULL; - callback->custom = func; - LISTADD(this->callbacks, callback); - if (this->scene) - this->scene->callbacks = this->callbacks; + if (!this || !callback) + return; + callback->type = my_strdup("callback"); + callback->name = name; + callback->destroy = NULL; + callback->custom = func; + LISTADD(this->callbacks, callback); + if (this->scene) + this->scene->callbacks = this->callbacks; } \ No newline at end of file diff --git a/src/engine/engine_system_builder.c b/src/engine/engine_system_builder.c index 2879261..74bab1e 100644 --- a/src/engine/engine_system_builder.c +++ b/src/engine/engine_system_builder.c @@ -39,7 +39,7 @@ void engine_add_builtin_systems(gc_engine *engine) engine->add_system(engine, &friction_system); engine->add_system(engine, new_system(&tooltip_system)); engine->add_system(engine, new_system(&collision_system, engine->scene)); - clickable_manager_init(engine); + clickable_manager_init(engine); } int engine_use_sfml(gc_engine *engine, const char *title, int framerate) diff --git a/src/engine/event_manager.c b/src/engine/event_manager.c index fa970cd..7effde4 100644 --- a/src/engine/event_manager.c +++ b/src/engine/event_manager.c @@ -15,28 +15,36 @@ bool engine_add_event_listener(gc_engine *engine, const char *name, \ void (*func)(gc_engine *, va_list)) { - struct gc_event_listener *node = malloc(sizeof(struct gc_event_listener)); - char *n_name = my_strdup(name); + struct gc_event_listener *node = malloc(sizeof(struct gc_event_listener)); + char *n_name = my_strdup(name); - if (!name || !node || !n_name) - return (false); - node->name = n_name; - node->func = func; - LISTADD(engine->event_listeners, node); - return (true); + if (!name || !node || !n_name) + return (false); + node->name = n_name; + node->func = func; + LISTADD(engine->event_listeners, node); + return (true); } void engine_trigger_event(gc_engine *engine, const char *name, ...) { - gc_list *tmp = engine->event_listeners; - va_list list; + gc_list *tmp = engine->event_listeners; + va_list list; - while (tmp) { - if (!my_strcmp(((struct gc_event_listener *)tmp->data)->name, name)) { - va_start(list, name); - ((struct gc_event_listener *) tmp->data)->func(engine, list); - va_end(list); - } - tmp = tmp->next; - } + while (tmp) { + if (!my_strcmp(((struct gc_event_listener *)tmp->data)->name, name)) { + va_start(list, name); + ((struct gc_event_listener *) tmp->data)->func(engine, list); + va_end(list); + } + tmp = tmp->next; + } +} + +void engine_setup_event(gc_engine *engine) +{ + engine->on_resize = &engine_on_resize; + engine->event_listeners = NULL; + engine->add_event_listener = &engine_add_event_listener; + engine->trigger_event = &engine_trigger_event; } \ No newline at end of file diff --git a/src/entity/entity.c b/src/entity/entity.c index f602490..634b4f1 100644 --- a/src/entity/entity.c +++ b/src/entity/entity.c @@ -58,10 +58,10 @@ static void destroy(gc_entity *entity, gc_scene *scene) gc_component *next = NULL; for (gc_component *cmp = entity->components; cmp; cmp = next) { - for (gc_tupple *tup = scene->entities_by_cmp; tup; tup = tup->next) - if (!my_strcmp(tup->name, cmp->name)) - LISTREM(tup->entities, entity); - LISTREM(scene->entities, entity); + for (gc_tupple *tup = scene->entities_by_cmp; tup; tup = tup->next) + if (!my_strcmp(tup->name, cmp->name)) + LISTREM(tup->entities, entity); + LISTREM(scene->entities, entity); next = cmp->next; cmp->destroy(cmp); } diff --git a/src/entity/entity_factory.c b/src/entity/entity_factory.c index 3bda380..a0e8d7d 100644 --- a/src/entity/entity_factory.c +++ b/src/entity/entity_factory.c @@ -14,7 +14,7 @@ const gc_entity entity_prefab; gc_entity *entity_create(void) { - static unsigned int next_id = 0; + static unsigned int next_id = 0; gc_entity *entity = malloc(sizeof(gc_entity)); if (!entity) @@ -41,7 +41,7 @@ int entity_add(gc_scene *scene, gc_entity *e) char *name; if (!e) - return (0); + return (0); scene->entities = list_add(scene->entities, e); if (!scene->entities) return (-1); diff --git a/src/scene/scene.c b/src/scene/scene.c index 7d8326d..15c8b68 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -43,7 +43,7 @@ gc_scene *scene_create(gc_engine *engine, const char *xmlpath) if (!scene || (xmlpath && !(n = xml_parse(xmlpath)))) return (NULL); - scene->is_paused = false; + scene->is_paused = false; scene->entities = NULL; scene->entities_by_cmp = NULL; scene->add_entity = &entity_add; @@ -54,8 +54,8 @@ gc_scene *scene_create(gc_engine *engine, const char *xmlpath) 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); + scene_load_data(engine, scene, n); + prefab_loadentities(n, engine, scene); xml_destroy(n); return (scene); } @@ -76,11 +76,11 @@ int change_scene(gc_engine *engine, gc_scene *scene) callback_t scene_get_callback(gc_scene *this, char *name) { - if (!name) - return (NULL); - for (gc_list *cal = this->callbacks; cal; cal = cal->next) { - if (!my_strcmp(((gc_data *)cal->data)->name, name)) - return (((gc_data *)cal->data)->custom); - } - return (NULL); + if (!name) + return (NULL); + for (gc_list *cal = this->callbacks; cal; cal = cal->next) { + if (!my_strcmp(((gc_data *)cal->data)->name, name)) + return (((gc_data *)cal->data)->custom); + } + return (NULL); } \ No newline at end of file diff --git a/src/scene/scene_loader.c b/src/scene/scene_loader.c index 93e48e5..eef7ddb 100644 --- a/src/scene/scene_loader.c +++ b/src/scene/scene_loader.c @@ -18,7 +18,7 @@ void scene_load_data(gc_engine *engine, gc_scene *scene, node *n) { gc_dataloader *loader; - gc_data *data; + gc_data *data; scene->data = NULL; if (!(n = xml_getnode(n, "data"))) @@ -26,32 +26,32 @@ void scene_load_data(gc_engine *engine, gc_scene *scene, node *n) for (n = n->child; n; n = n->next) { loader = engine->get_dataloader(engine, n->name); if (!loader) { - my_printf(DATALOADER_NOT_FOUND, n->name); - return; - } - data = loader->load(engine, scene, n); + my_printf(DATALOADER_NOT_FOUND, n->name); + return; + } + data = loader->load(engine, scene, n); if (!data) { - my_printf(DATALOADER_ERROR, xml_getproperty(n, "name"), n->name); - return; - } + my_printf(DATALOADER_ERROR, xml_getproperty(n, "name"), n->name); + return; + } scene->data = list_add(scene->data, data); } } void scene_load_entity(gc_scene *this, gc_engine *engine, node *n, int prefab) { - gc_dataloader *loader = engine->get_dataloader(engine, n->name); - gc_data *data; + gc_dataloader *loader = engine->get_dataloader(engine, n->name); + gc_data *data; - if (!loader) { - my_printf(NO_CUSTOM_ENTITY_LOADER, n->name); - return; - } - data = loader->load(engine, this, n); - if (!data) - return; - for (gc_list *li = (gc_list *)data->custom; li; li = li->next) { - ((gc_entity *)li->data)->prefab_id = prefab; - this->add_entity(this, li->data); - } + if (!loader) { + my_printf(NO_CUSTOM_ENTITY_LOADER, n->name); + return; + } + data = loader->load(engine, this, n); + if (!data) + return; + for (gc_list *li = (gc_list *)data->custom; li; li = li->next) { + ((gc_entity *)li->data)->prefab_id = prefab; + this->add_entity(this, li->data); + } } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_dataloaders.c b/src/sfml_renderer/sfml_dataloaders.c index a249ee8..3df8804 100644 --- a/src/sfml_renderer/sfml_dataloaders.c +++ b/src/sfml_renderer/sfml_dataloaders.c @@ -18,9 +18,9 @@ gc_data *sfml_music_loader(gc_engine *engine, gc_scene *scene, node *n) gc_data *data = malloc(sizeof(*data)); if (!data) - return (NULL); - data->type = my_strdup(n->name); - data->name = xml_getproperty(n, "src"); + return (NULL); + data->type = my_strdup(n->name); + data->name = xml_getproperty(n, "src"); if (!data->name || !data->type) return (NULL); data->custom = sfMusic_createFromFile(data->name); @@ -32,34 +32,34 @@ gc_data *sfml_music_loader(gc_engine *engine, gc_scene *scene, node *n) gc_data *sfml_sprite_loader(gc_engine *engine, gc_scene *scene, node *n) { - gc_data *data = malloc(sizeof(*data)); + gc_data *data = malloc(sizeof(*data)); - if (!data) - return (NULL); - data->type = my_strdup(n->name); + if (!data) + return (NULL); + data->type = my_strdup(n->name); data->name = xml_getproperty(n, "src"); if (!data->name || !data->type) - return (NULL); + return (NULL); data->custom = sfTexture_createFromFile(data->name, NULL); if (!data->custom) return (NULL); sfTexture_setRepeated(data->custom, sfTrue); data->destroy = &sfml_texture_destroy; - if (xml_hasproperty(n, "name")) - data->name = xml_getproperty(n, "name"); + if (xml_hasproperty(n, "name")) + data->name = xml_getproperty(n, "name"); return (data); } gc_data *sfml_font_loader(gc_engine *engine, gc_scene *scene, node *n) { - gc_data *data = malloc(sizeof(*data)); + gc_data *data = malloc(sizeof(*data)); - if (!data) - return (NULL); - data->type = my_strdup(n->name); + if (!data) + return (NULL); + data->type = my_strdup(n->name); data->name = xml_getproperty(n, "src"); if (!data->name || !data->type) - return (NULL); + return (NULL); data->custom = sfFont_createFromFile(data->name); if (!data->custom) return (NULL); @@ -69,14 +69,14 @@ gc_data *sfml_font_loader(gc_engine *engine, gc_scene *scene, node *n) gc_data *sfml_camera(gc_engine *engine, gc_scene *scene, node *n) { - struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - if (!rend) - my_printf("The sfml is not found. Could not change the position\ + if (!rend) + my_printf("The sfml is not found. Could not change the position\ of the camera.\n"); - sfView_setCenter(rend->view, (sfVector2f){ - xml_getfloatprop(n, "x"), - -xml_getfloatprop(n, "y") - }); - return (NULL); + sfView_setCenter(rend->view, (sfVector2f){ + xml_getfloatprop(n, "x"), + -xml_getfloatprop(n, "y") + }); + return (NULL); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_drawer.c b/src/sfml_renderer/sfml_drawer.c index e49bee7..e8f5e0e 100644 --- a/src/sfml_renderer/sfml_drawer.c +++ b/src/sfml_renderer/sfml_drawer.c @@ -17,48 +17,50 @@ void sfmlrenderer_setorigin(struct sfml_renderer_system *renderer, \ gc_entity *entity, gc_sprite *sprite, struct transform_component *tra) { - sfVector2f scale = (sfVector2f){ - tra->size.x * sprite->scale.x / sprite->rect.width, - tra->size.y * sprite->scale.y / sprite->rect.height - }; + sfVector2f scale = (sfVector2f){ + tra->size.x * sprite->scale.x / sprite->rect.width, + tra->size.y * sprite->scale.y / sprite->rect.height + }; - sfSprite_setScale(renderer->sprite, scale); - if (entity->has_component(entity, "fixed_to_cam")) - sfSprite_setOrigin(renderer->sprite, (sfVector2f) { - sprite->rect.width / 2, - sprite->rect.height / 2 - }); - else - sfSprite_setOrigin(renderer->sprite, (sfVector2f){ - scale.x < 0 ? sprite->rect.width : 0, - scale.y < 0 ? sprite->rect.height : 0 - }); + sfSprite_setScale(renderer->sprite, scale); + if (entity->has_component(entity, "fixed_to_cam")) + sfSprite_setOrigin(renderer->sprite, (sfVector2f) { + sprite->rect.width / 2, + sprite->rect.height / 2 + }); + else + sfSprite_setOrigin(renderer->sprite, (sfVector2f){ + scale.x < 0 ? sprite->rect.width : 0, + scale.y < 0 ? sprite->rect.height : 0 + }); } -void sfmlrenderer_draw_texture(struct sfml_renderer_system *renderer, \ -struct transform_component *tra, gc_entity *entity, gc_sprite *sprite) +void sfmlrenderer_draw_texture(gc_engine *engine, gc_entity *entity, \ +gc_sprite *sprite, float dt) { + struct transform_component *tra = GETCMP(entity, transform_component); sfVector2f pos = (sfVector2f){tra->position.x, -tra->position.y}; + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); sprite->pos = tra->position; if (!sprite->texture) { - my_printf("Trying to render a sprite without texture.\n"); - return; - } - sfSprite_setTexture(renderer->sprite, sprite->texture, true); - sfSprite_setTextureRect(renderer->sprite, (sfIntRect){ + my_printf("Trying to render a sprite without texture.\n"); + return; + } + sfSprite_setTexture(rend->sprite, sprite->texture, true); + sfSprite_setTextureRect(rend->sprite, (sfIntRect){ sprite->rect.left, sprite->rect.top, sprite->rect.width, sprite->rect.height }); - sfSprite_setPosition(renderer->sprite, pos); - sfmlrenderer_setorigin(renderer, entity, sprite, tra); - sfRenderWindow_drawSprite(renderer->window, renderer->sprite, NULL); + sfSprite_setPosition(rend->sprite, pos); + sfmlrenderer_setorigin(rend, entity, sprite, tra); + sfRenderWindow_drawSprite(rend->window, rend->sprite, NULL); } -void sfmlrenderer_draw_anim(struct sfml_renderer_system *renderer, \ -gc_entity *entity, gc_animholder *holder, float dtime) +void sfmlrenderer_draw_anim(gc_engine *engine, gc_entity *entity, \ +gc_animholder *holder, float dtime) { - struct transform_component *tra = GETCMP(entity, transform_component); + struct transform_component *tra = GETCMP(entity, transform_component); gc_int_rect *rec = &holder->sprite->rect; gc_anim *curr = holder->current; @@ -70,30 +72,31 @@ gc_entity *entity, gc_animholder *holder, float dtime) if (rec->left > curr->rect.left + rec->width * (curr->frame_count - 1)) rec->left = curr->rect.left; } - sfmlrenderer_draw_texture(renderer, tra, entity, holder->sprite); + sfmlrenderer_draw_texture(engine, entity, holder->sprite, dtime); } -void sfmlrenderer_draw_txt(gc_engine *engine, \ -struct sfml_renderer_system *renderer, struct transform_component *tra, \ -gc_text *txt) +void sfmlrenderer_draw_txt(gc_engine *engine, gc_entity *entity, \ +gc_text *txt, float dt) { - sfFloatRect bounds; - float size = 1; + struct sfml_renderer_system *this = GETSYS(engine, sfml_renderer_system); + struct transform_component *tra = GETCMP(entity, transform_component); + sfFloatRect bounds; + float size = 1; - if (txt->resize) - size = 800 / engine->get_screen_size(engine).x; - sfText_setString(renderer->text, txt->text); + if (txt->resize) + size = 800 / engine->get_screen_size(engine).x; + sfText_setString(this->text, txt->text); if (!txt->font) - my_printf("%s has a font not loaded. Rendering impossible.", txt->font); - sfText_setFont(renderer->text, txt->font); - sfText_setCharacterSize(renderer->text, txt->size / size); - bounds = sfText_getLocalBounds(renderer->text); + my_printf("%s has a font not loaded. Rendering impossible.", txt->font); + sfText_setFont(this->text, txt->font); + sfText_setCharacterSize(this->text, txt->size / size); + bounds = sfText_getLocalBounds(this->text); tra->size.x = bounds.width; tra->size.y = bounds.height; - sfText_setColor(renderer->text, *(sfColor*)&txt->color); - sfText_setPosition(renderer->text, (sfVector2f){ + sfText_setColor(this->text, *(sfColor*)&txt->color); + sfText_setPosition(this->text, (sfVector2f){ tra->position.x - bounds.width / 2, -tra->position.y - bounds.height }); - sfRenderWindow_drawText(renderer->window, renderer->text, NULL); + sfRenderWindow_drawText(this->window, this->text, NULL); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_events.c b/src/sfml_renderer/sfml_events.c index 8290b7c..fb0c60d 100644 --- a/src/sfml_renderer/sfml_events.c +++ b/src/sfml_renderer/sfml_events.c @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 2/27/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** sfml_events +*/ #include "engine.h" #include @@ -13,58 +16,55 @@ void sfml_handle_events(gc_engine *engine) struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); sfEvent event; - while (sfRenderWindow_pollEvent(rend->window, &event)) - switch (event.type) { - case sfEvtClosed: - sfRenderWindow_close(rend->window); - break; - case sfEvtResized: + while (sfRenderWindow_pollEvent(rend->window, &event)) + switch (event.type) { + case sfEvtClosed: + sfRenderWindow_close(rend->window); + break; + case sfEvtResized: engine->on_resize(engine, (gc_vector2){event.size.width, event.size.height}); - break; - case sfEvtMouseButtonReleased: - if (event.mouseButton.button == sfMouseLeft) - engine->trigger_event(engine, "mouse_click", GC_LEFT); - if (event.mouseButton.button == sfMouseRight) - engine->trigger_event(engine, "mouse_click", GC_RIGHT); - break; - case sfEvtKeyReleased: - engine->trigger_event(engine, "key_pressed", event.key.code); - break; - default: - break; - } + break; + case sfEvtMouseButtonReleased: + if (event.mouseButton.button == sfMouseLeft) + engine->trigger_event(engine, "mouse_click", GC_LEFT); + if (event.mouseButton.button == sfMouseRight) + engine->trigger_event(engine, "mouse_click", GC_RIGHT); + break; + case sfEvtKeyReleased: + engine->trigger_event(engine, "key_pressed", event.key.code); + } } gc_vector2 sfml_engine_get_cursor_pos(gc_engine *engine) { - struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - sfVector2i pos; - gc_vector2 ret; - sfVector2f pos2; + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + sfVector2i pos; + gc_vector2 ret; + sfVector2f pos2; - pos = sfMouse_getPositionRenderWindow(rend->window); - pos2 = sfRenderWindow_mapPixelToCoords(rend->window, pos, rend->view); - ret.x = pos2.x; - ret.y = pos2.y; - ret.y *= -1; - return (ret); + pos = sfMouse_getPositionRenderWindow(rend->window); + pos2 = sfRenderWindow_mapPixelToCoords(rend->window, pos, rend->view); + ret.x = pos2.x; + ret.y = pos2.y; + ret.y *= -1; + return (ret); } void sfml_resize(gc_engine *engine, gc_vector2 size) { - struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - sfView_setSize(rend->view, (sfVector2f){ - size.x, - size.y - }); - entities_update_to_cam_size(engine->scene, size); + sfView_setSize(rend->view, (sfVector2f){ + size.x, + size.y + }); + entities_update_to_cam_size(engine->scene, size); } gc_vector2 sfml_get_screen_size(gc_engine *engine) { - struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - sfVector2u size = sfRenderWindow_getSize(rend->window); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + sfVector2u size = sfRenderWindow_getSize(rend->window); - return (gc_vector2){size.x, size.y}; + return (gc_vector2){size.x, size.y}; } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_functions.c b/src/sfml_renderer/sfml_functions.c index e75a2fe..8fd56e5 100644 --- a/src/sfml_renderer/sfml_functions.c +++ b/src/sfml_renderer/sfml_functions.c @@ -45,8 +45,8 @@ void sfml_draw(gc_engine *engine) -cam->cam_pos.y }); } - entities_update_to_cam(engine->scene, rend); - sfRenderWindow_setView(rend->window, rend->view); + entities_update_to_cam(engine->scene, rend); + sfRenderWindow_setView(rend->window, rend->view); sfRenderWindow_display(rend->window); sfRenderWindow_clear(rend->window, sfBlack); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_init.c b/src/sfml_renderer/sfml_init.c index bf9a715..6fdcb59 100644 --- a/src/sfml_renderer/sfml_init.c +++ b/src/sfml_renderer/sfml_init.c @@ -11,29 +11,29 @@ sfRenderStates *sfml_init_render_state(void) { - sfRenderStates *states = malloc(sizeof(sfRenderStates)); + sfRenderStates *states = malloc(sizeof(sfRenderStates)); - if (!states) - return (NULL); - states->texture = NULL; - states->blendMode = sfBlendAlpha; - states->shader = NULL; - states->transform = sfTransform_Identity; - return (states); + if (!states) + return (NULL); + states->texture = NULL; + states->blendMode = sfBlendAlpha; + states->shader = NULL; + states->transform = sfTransform_Identity; + return (states); } sfVertexArray *sfml_init_verticies(void) { - sfVertexArray *arr = sfVertexArray_create(); - sfVertex v[4] = { - {.position = {0, 0}, .texCoords = {0, 0}, .color = sfWhite}, - {.position = {0, 0}, .texCoords = {64, 0}, .color = sfWhite}, - {.position = {0, 0}, .texCoords = {0, 64}, .color = sfWhite}, - {.position = {0, 0}, .texCoords = {64, 64}, .color = sfWhite} - }; + sfVertexArray *arr = sfVertexArray_create(); + sfVertex v[4] = { + {.position = {0, 0}, .texCoords = {0, 0}, .color = sfWhite}, + {.position = {0, 0}, .texCoords = {64, 0}, .color = sfWhite}, + {.position = {0, 0}, .texCoords = {0, 64}, .color = sfWhite}, + {.position = {0, 0}, .texCoords = {64, 64}, .color = sfWhite} + }; - for (int i = 0; i < 4; i++) - sfVertexArray_append(arr, v[i]); - sfVertexArray_setPrimitiveType(arr, sfTrianglesStrip); - return (arr); + for (int i = 0; i < 4; i++) + sfVertexArray_append(arr, v[i]); + sfVertexArray_setPrimitiveType(arr, sfTrianglesStrip); + return (arr); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_music_player.c b/src/sfml_renderer/sfml_music_player.c index 94df285..fe3432c 100644 --- a/src/sfml_renderer/sfml_music_player.c +++ b/src/sfml_renderer/sfml_music_player.c @@ -21,6 +21,6 @@ void sfml_stop_music(gc_engine *engine) if (!engine->scene) return; music = engine->scene->get_data(engine->scene, "music", NULL); - if (music) - sfMusic_stop(music); + if (music) + sfMusic_stop(music); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_vertex.c b/src/sfml_renderer/sfml_vertex.c index 895402e..3a66821 100644 --- a/src/sfml_renderer/sfml_vertex.c +++ b/src/sfml_renderer/sfml_vertex.c @@ -22,60 +22,62 @@ sfVector2f get_tile_coords(int x, int y, int z) { - return (sfVector2f){ - cos(ANGLE_X) * y * 64 - cos(ANGLE_X) * x * 64, - (sin(ANGLE_Y) * x * 64 + sin(ANGLE_Y) * y * 64 - z) - }; + return (sfVector2f){ + cos(ANGLE_X) * y * 64 - cos(ANGLE_X) * x * 64, + (sin(ANGLE_Y) * x * 64 + sin(ANGLE_Y) * y * 64 - z) + }; } void draw_tile(struct sfml_renderer_system *this, gc_vector2 offset, \ struct tile *tile, bool hovered) { - sfVertex *v[4]; - int c[3]; - int vertex_order[4] = {0, 1, 3, 2}; + sfVertex *v[4]; + int c[3]; + int vertex_order[4] = {0, 1, 3, 2}; - if (tile->corners[0]->z == INT32_MAX || !tile->corners[2]->y) - return; - for (int j = 0; j < (tile->data & 3); j++) { - int tmp = vertex_order[0]; - for (int i = 0; i < 3; i++) - vertex_order[i] = vertex_order[i + 1]; - vertex_order[3] = tmp; - } - for (int i = 0; i < 4; i++) { - v[i] = sfVertexArray_getVertex(this->vertices, vertex_order[i]); - c[0] = tile->corners[i]->x; - c[1] = tile->corners[i]->y; - c[2] = tile->corners[i]->z; - v[i]->position = get_tile_coords(c[0], c[1], c[2]); - v[i]->position.x += offset.x; - v[i]->position.y += offset.y; - if (hovered) - v[i]->color = (sfColor) {180, 180, 180, 255}; - } - this->states->texture = (sfTexture *) tile->texture; - sfRenderWindow_drawVertexArray(this->window, this->vertices, this->states); - if (hovered) - for (int i = 0; i < 4; i++) - v[i]->color = sfWhite; - this->states->texture = NULL; + if (tile->corners[0]->z == INT32_MAX || !tile->corners[2]->y) + return; + for (int j = 0; j < (tile->data & 3); j++) { + int tmp = vertex_order[0]; + for (int i = 0; i < 3; i++) + vertex_order[i] = vertex_order[i + 1]; + vertex_order[3] = tmp; + } + for (int i = 0; i < 4; i++) { + v[i] = sfVertexArray_getVertex(this->vertices, vertex_order[i]); + c[0] = tile->corners[i]->x; + c[1] = tile->corners[i]->y; + c[2] = tile->corners[i]->z; + v[i]->position = get_tile_coords(c[0], c[1], c[2]); + v[i]->position.x += offset.x; + v[i]->position.y += offset.y; + if (hovered) + v[i]->color = (sfColor) {180, 180, 180, 255}; + } + this->states->texture = (sfTexture *) tile->texture; + sfRenderWindow_drawVertexArray(this->window, this->vertices, this->states); + if (hovered) + for (int i = 0; i < 4; i++) + v[i]->color = sfWhite; + this->states->texture = NULL; } -void sfmlrenderer_draw_tilemap(struct sfml_renderer_system *this, \ -struct transform_component *pos, struct vertex_component *info) +void sfmlrenderer_draw_tilemap(gc_engine *engine, gc_entity *entity, \ +struct vertex_component *info, float dt) { - sfVector2i vec = sfMouse_getPosition((const sfWindow *) this->window); - sfVector2f wp = sfRenderWindow_mapPixelToCoords(this->window, vec, this->view); - wp.y *= -1; - int i; - struct tile *tl; + struct sfml_renderer_system *this = GETSYS(engine, sfml_renderer_system); + struct transform_component *pos = GETCMP(entity, transform_component); + sfVector2i v = sfMouse_getPosition((const sfWindow *) this->window); + sfVector2f w = sfRenderWindow_mapPixelToCoords(this->window, v, this->view); + w.y *= -1; + int i; + struct tile *tl; - if (!info || !info->map) - return; - tl = get_tile_from_pos(info, (gc_vector2){wp.x, wp.y}); - for (i = 0; info->map[i].corners[0]; i++); + if (!info || !info->map) + return; + tl = get_tile_from_pos(info, (gc_vector2){w.x, wp.y}); + for (i = 0; info->map[i].corners[0]; i++); for (i--; i >= 0; i--) { - draw_tile(this, pos->position, &info->map[i], &info->map[i] == tl); + draw_tile(this, pos->position, &info->map[i], &info->map[i] == tl); } } \ No newline at end of file diff --git a/src/systems/camera_follow_system.c b/src/systems/camera_follow_system.c index 7adae56..70a1f7e 100644 --- a/src/systems/camera_follow_system.c +++ b/src/systems/camera_follow_system.c @@ -23,7 +23,7 @@ gc_entity *entity, float dtime) sys->cam_pos.x = (sys->cam_pos.x + tra->position.x) / 2; sys->cam_pos.y = (sys->cam_pos.y + tra->position.y) / 2; - sys->enabled = true; + sys->enabled = true; (void)engine; (void)dtime; } diff --git a/src/systems/clickable_manager.c b/src/systems/clickable_manager.c index c497442..facbeb4 100644 --- a/src/systems/clickable_manager.c +++ b/src/systems/clickable_manager.c @@ -15,39 +15,36 @@ static inline bool collide(struct transform_component *tra, gc_vector2 position) { - return (tra->position.x - tra->size.x / 2) <= position.x - && (tra->position.y + tra->size.y / 2) >= position.y - && (tra->position.x + tra->size.x / 2) >= position.x - && (tra->position.y - tra->size.y / 2) <= position.y; + return (tra->position.x - tra->size.x / 2) <= position.x + && (tra->position.y + tra->size.y / 2) >= position.y + && (tra->position.x + tra->size.x / 2) >= position.x + && (tra->position.y - tra->size.y / 2) <= position.y; } void clickable_onclick(gc_engine *engine, va_list list) { - enum gc_mousekeys key = va_arg(list, enum gc_mousekeys); - gc_scene *scene = engine->scene; - gc_vector2 position = engine->get_cursor_pos(engine); - gc_list *entities = NULL; - struct transform_component *tra; - struct clickable_component *cl; + enum gc_mousekeys key = va_arg(list, enum gc_mousekeys); + gc_scene *scene = engine->scene; + gc_vector2 position = engine->get_cursor_pos(engine); + gc_list *entities = scene->get_entity_by_cmp(scene, "clickable_component"); + struct transform_component *tra; + struct clickable_component *cl; - if (!scene) - return; - entities = scene->get_entity_by_cmp(scene, "clickable_component"); - if (!entities) - return; - while (entities->next) - entities = entities->next; - for (gc_list *ent = entities; ent; ent = ent->prev) { - tra = GETCMP(((gc_entity *)ent->data), transform_component); - if (!collide(tra, position)) - continue; - cl = GETCMP(((gc_entity *)ent->data), clickable_component); - if (cl->onclick && cl->onclick(engine, ent->data, position, key)) - return; - } + if (!entities) + return; + while (entities->next) + entities = entities->next; + for (gc_list *ent = entities; ent; ent = ent->prev) { + tra = GETCMP(((gc_entity *)ent->data), transform_component); + if (!collide(tra, position)) + continue; + cl = GETCMP(((gc_entity *)ent->data), clickable_component); + if (cl->onclick && cl->onclick(engine, ent->data, position, key)) + return; + } } void clickable_manager_init(struct gc_engine *engine) { - engine->add_event_listener(engine, "mouse_click", &clickable_onclick); + engine->add_event_listener(engine, "mouse_click", &clickable_onclick); } \ No newline at end of file diff --git a/src/systems/fixed_to_cam_pseudosystem.c b/src/systems/fixed_to_cam_pseudosystem.c index b673a0f..c2b4a57 100644 --- a/src/systems/fixed_to_cam_pseudosystem.c +++ b/src/systems/fixed_to_cam_pseudosystem.c @@ -21,18 +21,18 @@ struct sfml_renderer_system *renderer) gc_list *list = scene->get_entity_by_cmp(scene, "fixed_to_cam"); for (gc_list *li = list; li; li = li->next) { - gc_entity *entity = (gc_entity *)li->data; - struct transform_component *tra = GETCMP(entity, transform_component); - struct fixed_to_cam *fc = GETCMP(entity, fixed_to_cam); - sfVector2f size = sfView_getSize(renderer->view); - sfVector2f pos = sfView_getCenter(renderer->view); - float x = pos.x - size.x / 2; - float y = -pos.y + size.y / 2; + gc_entity *entity = (gc_entity *)li->data; + struct transform_component *tra = GETCMP(entity, transform_component); + struct fixed_to_cam *fc = GETCMP(entity, fixed_to_cam); + sfVector2f size = sfView_getSize(renderer->view); + sfVector2f pos = sfView_getCenter(renderer->view); + float x = pos.x - size.x / 2; + float y = -pos.y + size.y / 2; - if (!tra) - continue; - x += fc->pos.x * (fc->per_x ? size.x / 100 : 1); - y -= fc->pos.y * (fc->per_y ? size.y / 100 : 1); + if (!tra) + continue; + x += fc->pos.x * (fc->per_x ? size.x / 100 : 1); + y -= fc->pos.y * (fc->per_y ? size.y / 100 : 1); tra->position = (gc_vector2){x, y}; } } @@ -53,11 +53,11 @@ void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size) continue; tra->size = (gc_vector2) { fc->per_w ? size.x * fc->size_x / 100 : tra->size.x, - fc->per_h ? size.y * fc->size_y / 100 : tra->size.y + fc->per_h ? size.y * fc->size_y / 100 : tra->size.y }; if (fc->per_w && fc->size_x == 0) - tra->size.x = tra->size.y; - if (fc->per_h && fc->size_y == 0) - tra->size.y = tra->size.x; + tra->size.x = tra->size.y; + if (fc->per_h && fc->size_y == 0) + tra->size.y = tra->size.x; } } \ No newline at end of file diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c index 4c9c1b8..6c9a4eb 100644 --- a/src/systems/sfml_renderer_system.c +++ b/src/systems/sfml_renderer_system.c @@ -19,46 +19,40 @@ gc_vector2 sfml_get_text_size(sf_renderer *this, gc_text *text) { - sfFloatRect bounds; + sfFloatRect bounds; - sfText_setString(this->text, text->text); - sfText_setFont(this->text, text->font); - bounds = sfText_getLocalBounds(this->text); - return (gc_vector2) {bounds.width * 1.3, bounds.height * 2.5}; + sfText_setString(this->text, text->text); + sfText_setFont(this->text, text->font); + bounds = sfText_getLocalBounds(this->text); + return (gc_vector2) {bounds.width * 1.3, bounds.height * 2.5}; } +static const void (*drawers[])(gc_engine *, gc_entity *, void *, float) = { + &sfmlrenderer_draw_texture, + &sfmlrenderer_draw_anim, + &sfmlrenderer_draw_txt, + &sfmlrenderer_draw_tilemap, + NULL +}; + void sfml_update_entity(gc_engine *engine, void *system, \ gc_entity *entity, float dt) { - struct transform_component *pos = GETCMP(entity, transform_component); struct renderer *text = GETCMP(entity, renderer); - struct sfml_renderer_system *rend = (struct sfml_renderer_system *)system; if (!text->data || !text->is_visible) return; - switch (text->type) { - case GC_TEXTUREREND: - sfmlrenderer_draw_texture(rend, pos, entity, (gc_sprite *)text->data); - break; - case GC_ANIMREND: - sfmlrenderer_draw_anim(rend, entity, (gc_animholder *)text->data, dt); - break; - case GC_TXTREND: - sfmlrenderer_draw_txt(engine, rend, pos, (gc_text *)text->data); - break; - case GC_MAP: - sfmlrenderer_draw_tilemap(rend, pos, text->data); - break; - default: + if (text->type > 3) { my_printf("Trying to render a texture with an unknown type.\n"); - break; + return; } + drawers[text->type](engine, entity, text->data, dt); } void sfml_setup_options(struct sfml_renderer_system *this, gc_engine *engine) { - this->is_fullscreen = false; - this->resolution = (gc_vector2i){800, 600}; + this->is_fullscreen = false; + this->resolution = (gc_vector2i){800, 600}; engine->is_open = &sfml_is_open; engine->has_focus = &sfml_has_focus; engine->is_keypressed = &sfml_is_keypressed; @@ -79,13 +73,13 @@ void sfmlrend_ctr(void *rend, va_list list) const char *title = va_arg(list, const char *); this->framerate = va_arg(list, int); - this->get_text_size = &sfml_get_text_size; - this->window = sfRenderWindow_create(mode, title, sfDefaultStyle, NULL); - this->sprite = sfSprite_create(); - this->view = sfView_create(); - this->text = sfText_create(); - this->vertices = sfml_init_verticies(); - this->states = sfml_init_render_state(); + this->get_text_size = &sfml_get_text_size; + this->window = sfRenderWindow_create(mode, title, sfDefaultStyle, NULL); + this->sprite = sfSprite_create(); + this->view = sfView_create(); + this->text = sfText_create(); + this->vertices = sfml_init_verticies(); + this->states = sfml_init_render_state(); if (!this->window || !this->sprite || \ !this->view || !this->text || !this->vertices || !this->states) return; diff --git a/src/systems/tooltip_system.c b/src/systems/tooltip_system.c index 1647127..fbf0d28 100644 --- a/src/systems/tooltip_system.c +++ b/src/systems/tooltip_system.c @@ -19,18 +19,18 @@ static void update_entity(gc_engine *engine, void *system, \ gc_entity *entity, float dtime) { - struct tooltip_component *tt = GETCMP(entity, tooltip_component); - struct transform_component *tra = tt->parent_transform; - struct renderer *rend = GETCMP(entity, renderer); - gc_vector2 pad = tt->padding; - gc_vector2 position = engine->get_cursor_pos(engine); + struct tooltip_component *tt = GETCMP(entity, tooltip_component); + struct transform_component *tra = tt->parent_transform; + struct renderer *rend = GETCMP(entity, renderer); + gc_vector2 pad = tt->padding; + gc_vector2 position = engine->get_cursor_pos(engine); - if (!tra) - return; - rend->is_visible = (tra->position.x - tra->size.x / 2 - pad.x) <= position.x - && (tra->position.y + tra->size.y / 2 + pad.y) >= position.y - && (tra->position.x + tra->size.x / 2 + pad.x) >= position.x - && (tra->position.y - tra->size.y / 2 - pad.y) <= position.y; + if (!tra) + return; + rend->is_visible = (tra->position.x - tra->size.x / 2 - pad.x) <= position.x + && (tra->position.y + tra->size.y / 2 + pad.y) >= position.y + && (tra->position.x + tra->size.x / 2 + pad.x) >= position.x + && (tra->position.y - tra->size.y / 2 - pad.y) <= position.y; } static void ctr(void *system, va_list args) @@ -38,12 +38,12 @@ static void ctr(void *system, va_list args) } const gc_system tooltip_system = { - name: "tooltip_system", - component_name: "tooltip_component", - size: sizeof(gc_system), - ctr: &ctr, - dtr: NULL, - check_dependencies: &system_check_dependencies, - update_entity: &update_entity, - destroy: &system_destroy + name: "tooltip_system", + component_name: "tooltip_component", + size: sizeof(gc_system), + ctr: &ctr, + dtr: NULL, + check_dependencies: &system_check_dependencies, + update_entity: &update_entity, + destroy: &system_destroy }; \ No newline at end of file diff --git a/src/ui/button.c b/src/ui/button.c index 688a67a..eb76a5f 100644 --- a/src/ui/button.c +++ b/src/ui/button.c @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 2/21/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** button +*/ #include "engine.h" #include "data.h" @@ -21,71 +24,69 @@ gc_entity *background_from_text(gc_engine *engine, gc_scene *scene, node *n, \ gc_text *text) { - gc_entity *entity = entity_create(); - struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - char *texture_name = xml_gettmpstring(n, "sprite", "button_background"); - sfTexture *texture = scene->get_data(scene, "sprite", texture_name); - gc_vector2i s = {xml_getintprop(n, "width"), xml_getintprop(n, "height")}; - gc_vector2 ts; + gc_entity *entity = entity_create(); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + char *texture_name = xml_gettmpstring(n, "sprite", "button_background"); + sfTexture *texture = scene->get_data(scene, "sprite", texture_name); + gc_vector2i s = {xml_getintprop(n, "width"), xml_getintprop(n, "height")}; + gc_vector2 ts; - if (!rend) - return (NULL); - ts = rend->get_text_size(rend, text); - if (!texture) - my_printf("No texture defined for the button_background.\n"); - entity->add_component(entity, new_component(&transform_component, - (gc_vector2){0, 0}, (gc_vector2){s.x ? s.x : ts.x, s.y ? s.y : ts.y})); - entity->add_component(entity, new_component(&renderer_component, - GC_TEXTUREREND, texture, (gc_int_rect){-1, -1, 0, 0})); - entity->add_component(entity, new_component(&fixed_to_cam, - (gc_vector2){xml_getintprop(n, "x"),xml_getintprop(n, "y")}, - true, true, s.x, s.y, - xml_propcontains(n, "width", "%"), xml_propcontains(n, "height", "%"))); - return (entity); + if (!rend) + return (NULL); + ts = rend->get_text_size(rend, text); + if (!texture) + my_printf("No texture defined for the button_background.\n"); + entity->add_component(entity, new_component(&transform_component, + (gc_vector2){0, 0}, (gc_vector2){s.x ? s.x : ts.x, s.y ? s.y : ts.y})); + entity->add_component(entity, new_component(&renderer_component, + GC_TEXTUREREND, texture, (gc_int_rect){-1, -1, 0, 0})); + entity->add_component(entity, new_component(&fixed_to_cam, + (gc_vector2){xml_getintprop(n, "x"),xml_getintprop(n, "y")}, + true, true, s.x, s.y, + xml_propcontains(n, "width", "%"), xml_propcontains(n, "height", "%"))); + return (entity); } gc_list *new_button(gc_engine *engine, gc_scene *scene, node *n) { - gc_list *entities = NULL; - gc_text text = (gc_text){ - xml_gettempprop(n, "text"), - scene->get_data(scene, "font", NULL) - }; - gc_entity *background = background_from_text(engine, scene, n, &text); + gc_list *entities = NULL; + gc_text text = (gc_text){xml_gettempprop(n, "text"), + scene->get_data(scene, "font", NULL)}; + gc_entity *background = background_from_text(engine, scene, n, &text); - if (!background) - return (NULL); - if (xml_hasproperty(n, "background_id")) - background->id = xml_getintprop(n, "background_id"); - if (xml_getbool(n, "input", false)) - background->add_component(background, new_component(&input_component)); - background->add_component(background, new_component(&clickable_component, - scene, xml_getproperty(n, "click"))); - if (xml_hasproperty(n, "tag")) - background->add_component(background, new_component(&tag_component, - xml_getproperty(n, "tag"))); - LISTADD(entities, background); - LISTADD(entities, new_text(engine, scene, n)); - if (xml_hasproperty(n, "tooltip")) - LISTADD(entities, tooltip_make(engine, scene, n, background)); - return (entities); + if (!background) + return (NULL); + if (xml_hasproperty(n, "background_id")) + background->id = xml_getintprop(n, "background_id"); + if (xml_getbool(n, "input", false)) + background->add_component(background, new_component(&input_component)); + background->add_component(background, new_component(&clickable_component, + scene, xml_getproperty(n, "click"))); + if (xml_hasproperty(n, "tag")) + background->add_component(background, new_component(&tag_component, + xml_getproperty(n, "tag"))); + LISTADD(entities, background); + LISTADD(entities, new_text(engine, scene, n)); + if (xml_hasproperty(n, "tooltip")) + LISTADD(entities, tooltip_make(engine, scene, n, background)); + return (entities); } gc_data *button_make(gc_engine *engine, gc_scene *scene, node *n) { - gc_data *data = malloc(sizeof(*data)); - gc_list *list = new_button(engine, scene, n); - gc_component *cmp; + gc_data *data = malloc(sizeof(*data)); + gc_list *list = new_button(engine, scene, n); + gc_component *cmp; - if (!list) - return (NULL); - data->name = "button"; - data->type = "ui"; - data->destroy = NULL; - data->custom = list; - for (n = n->child; n; n = n->next) { - cmp = deserialize_component(engine, list->data, scene, n); - ((gc_entity *)list->data)->add_component(list->data, cmp); - } - return (data); + if (!list) + return (NULL); + data->name = "button"; + data->type = "ui"; + data->destroy = NULL; + data->custom = list; + for (n = n->child; n; n = n->next) { + cmp = deserialize_component(engine, list->data, scene, n); + ((gc_entity *)list->data)->add_component(list->data, cmp); + } + return (data); } \ No newline at end of file diff --git a/src/ui/setup_ui.c b/src/ui/setup_ui.c index ff41549..84aea3e 100644 --- a/src/ui/setup_ui.c +++ b/src/ui/setup_ui.c @@ -1,6 +1,9 @@ -// -// Created by anonymus-raccoon on 2/21/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** setup_ui +*/ #include "engine.h" #include "data.h" @@ -16,91 +19,91 @@ gc_entity *new_text(gc_engine *engine, gc_scene *scene, node *n) { - gc_entity *entity; + gc_entity *entity; - if (xml_hasproperty(n, "text_id")) - entity = entity_create_with_id(xml_getintprop(n, "text_id")); - else - entity = entity_create(); - entity->add_component(entity, new_component(&transform_component, - (gc_vector2){0, 0}, (gc_vector2){0, 0})); - entity->add_component(entity, new_component(&renderer_component, - GC_TXTREND, xml_getproperty(n, "text"), - scene->get_data(scene, "font", NULL), - xml_getintprop(n, "size"), - xml_gettempprop(n, "color"), xml_getbool(n, "resize", true))); - entity->add_component(entity, new_component(&fixed_to_cam, - (gc_vector2){xml_getintprop(n, "x"),xml_getintprop(n, "y")}, - xml_propcontains(n, "x", "%"), xml_propcontains(n, "y", "%"), - 0, 0, false, false)); - if (xml_hasproperty(n, "tag")) - entity->add_component(entity, new_component(&tag_component, - xml_getproperty(n, "tag"))); - return (entity); + if (xml_hasproperty(n, "text_id")) + entity = entity_create_with_id(xml_getintprop(n, "text_id")); + else + entity = entity_create(); + entity->add_component(entity, new_component(&transform_component, + (gc_vector2){0, 0}, (gc_vector2){0, 0})); + entity->add_component(entity, new_component(&renderer_component, + GC_TXTREND, xml_getproperty(n, "text"), + scene->get_data(scene, "font", NULL), + xml_getintprop(n, "size"), + xml_gettempprop(n, "color"), xml_getbool(n, "resize", true))); + entity->add_component(entity, new_component(&fixed_to_cam, + (gc_vector2){xml_getintprop(n, "x"), xml_getintprop(n, "y")}, + xml_propcontains(n, "x", "%"), xml_propcontains(n, "y", "%"), + 0, 0, false, false)); + if (xml_hasproperty(n, "tag")) + entity->add_component(entity, new_component(&tag_component, + xml_getproperty(n, "tag"))); + return (entity); } gc_entity *new_sprite(gc_engine *engine, gc_scene *scene, node *n) { - gc_entity *entity = entity_create(); - char *src = xml_gettempprop(n, "src"); - sfTexture *texture = scene->get_data(scene, "sprite", src); + gc_entity *entity = entity_create(); + char *src = xml_gettempprop(n, "src"); + sfTexture *texture = scene->get_data(scene, "sprite", src); - entity->add_component(entity, new_component(&transform_component, - (gc_vector2){0, 0}, - (gc_vector2){xml_getintprop(n, "width"),xml_getintprop(n, "height")})); - entity->add_component(entity, new_component(&renderer_component, - GC_TEXTUREREND, texture, (sfIntRect){0, 0, -1, -1})); - entity->add_component(entity, new_component(&fixed_to_cam, - (gc_vector2){xml_getintprop(n, "x"),xml_getintprop(n, "y") }, - xml_propcontains(n, "x", "%"), xml_propcontains(n, "y", "%"), - xml_getintprop(n, "width"), xml_getintprop(n, "height"), - xml_propcontains(n, "width", "%"), xml_propcontains(n, "height", "%"))); - if (xml_hasproperty(n, "tag")) - entity->add_component(entity, new_component(&tag_component, - xml_getproperty(n, "tag"))); - return (entity); + entity->add_component(entity, new_component(&transform_component, + (gc_vector2){0, 0}, + (gc_vector2){xml_getintprop(n, "width"), xml_getintprop(n, "height")})); + entity->add_component(entity, new_component(&renderer_component, + GC_TEXTUREREND, texture, (sfIntRect){0, 0, -1, -1})); + entity->add_component(entity, new_component(&fixed_to_cam, + (gc_vector2){xml_getintprop(n, "x"), xml_getintprop(n, "y") }, + xml_propcontains(n, "x", "%"), xml_propcontains(n, "y", "%"), + xml_getintprop(n, "width"), xml_getintprop(n, "height"), + xml_propcontains(n, "width", "%"), xml_propcontains(n, "height", "%"))); + if (xml_hasproperty(n, "tag")) + entity->add_component(entity, new_component(&tag_component, + xml_getproperty(n, "tag"))); + return (entity); } gc_data *sprite_make(gc_engine *engine, gc_scene *scene, node *n) { - gc_list *list = NULL; - gc_data *data = malloc(sizeof(*data)); - gc_entity *sprite = new_sprite(engine, scene, n); + gc_list *list = NULL; + gc_data *data = malloc(sizeof(*data)); + gc_entity *sprite = new_sprite(engine, scene, n); - LISTADD(list, sprite); - if (xml_hasproperty(n, "tooltip")) - LISTADD(list, tooltip_make(engine, scene, n, sprite)); - data->name = "sprite"; - data->type = "ui"; - data->destroy = NULL; - data->custom = list; - return (data); + LISTADD(list, sprite); + if (xml_hasproperty(n, "tooltip")) + LISTADD(list, tooltip_make(engine, scene, n, sprite)); + data->name = "sprite"; + data->type = "ui"; + data->destroy = NULL; + data->custom = list; + return (data); } gc_data *text_make(gc_engine *engine, gc_scene *scene, node *n) { - gc_list *list = NULL; - gc_data *data = malloc(sizeof(*data)); - gc_component *cmp; - gc_entity *txt = new_text(engine, scene, n); + gc_list *list = NULL; + gc_data *data = malloc(sizeof(*data)); + gc_component *cmp; + gc_entity *txt = new_text(engine, scene, n); - LISTADD(list, txt); - if (xml_hasproperty(n, "tooltip")) - LISTADD(list, tooltip_make(engine, scene, n, txt)); - for (n = n->child; n; n = n->next) { - cmp = deserialize_component(engine, txt, scene, n); - txt->add_component(txt, cmp); - } - data->name = "text"; - data->type = "ui"; - data->destroy = NULL; - data->custom = list; - return (data); + LISTADD(list, txt); + if (xml_hasproperty(n, "tooltip")) + LISTADD(list, tooltip_make(engine, scene, n, txt)); + for (n = n->child; n; n = n->next) { + cmp = deserialize_component(engine, txt, scene, n); + txt->add_component(txt, cmp); + } + data->name = "text"; + data->type = "ui"; + data->destroy = NULL; + data->custom = list; + return (data); } void ui_setup(gc_engine *engine) { - engine->add_dataloader(engine, "button", &button_make); - engine->add_dataloader(engine, "panel", &sprite_make); - engine->add_dataloader(engine, "text", &text_make); + engine->add_dataloader(engine, "button", &button_make); + engine->add_dataloader(engine, "panel", &sprite_make); + engine->add_dataloader(engine, "text", &text_make); } \ No newline at end of file diff --git a/src/ui/tooltip.c b/src/ui/tooltip.c index 0e8944a..9301c91 100644 --- a/src/ui/tooltip.c +++ b/src/ui/tooltip.c @@ -1,6 +1,10 @@ -// -// Created by anonymus-raccoon on 3/9/20. -// +/* +** EPITECH PROJECT, 2020 +** My3D +** File description: +** tooltip +*/ + #include "engine.h" #include "xml.h" @@ -14,35 +18,35 @@ static void setup_position(gc_entity *entity, gc_scene *scene, node *n) { - entity->add_component(entity, new_component(&fixed_to_cam, - (gc_vector2){ - xml_getintprop(n, "x") + xml_getintprop(n, "tooltip_x"), - xml_getintprop(n, "y") - xml_getintprop(n, "tooltip_y") - }, - xml_propcontains(n, "x", "%"), - xml_propcontains(n, "y", "%"), - 0, 0, false, false)); + entity->add_component(entity, new_component(&fixed_to_cam, + (gc_vector2){ + xml_getintprop(n, "x") + xml_getintprop(n, "tooltip_x"), + xml_getintprop(n, "y") - xml_getintprop(n, "tooltip_y") + }, + xml_propcontains(n, "x", "%"), + xml_propcontains(n, "y", "%"), + 0, 0, false, false)); } gc_entity *tooltip_make(gc_engine *engine, gc_scene *scene, node *n, \ gc_entity *parent) { - gc_entity *entity = entity_create(); + gc_entity *entity = entity_create(); - if (!entity) - return (NULL); - entity->add_component(entity, new_component(&transform_component, - (gc_vector2){0, 0}, (gc_vector2){0, 0})); - entity->add_component(entity, new_component(&renderer_component, - GC_TXTREND, xml_getproperty(n, "tooltip"), - scene->get_data(scene, "font", NULL), xml_getintprop(n, "size"), - xml_gettempprop(n, "color"), xml_getbool(n, "resize", true))); - setup_position(entity, scene, n); - entity->add_component(entity, new_component(&tooltip_component, - GETCMP(parent, transform_component), xml_getfloatprop(n, "padding_x"), - xml_getfloatprop(n, "padding_y"))); - if (xml_hasproperty(n, "tag")) - entity->add_component(entity, new_component(&tag_component, - xml_getproperty(n, "tag"))); - return (entity); + if (!entity) + return (NULL); + entity->add_component(entity, new_component(&transform_component, + (gc_vector2){0, 0}, (gc_vector2){0, 0})); + entity->add_component(entity, new_component(&renderer_component, + GC_TXTREND, xml_getproperty(n, "tooltip"), + scene->get_data(scene, "font", NULL), xml_getintprop(n, "size"), + xml_gettempprop(n, "color"), xml_getbool(n, "resize", true))); + setup_position(entity, scene, n); + entity->add_component(entity, new_component(&tooltip_component, + GETCMP(parent, transform_component), xml_getfloatprop(n, "padding_x"), + xml_getfloatprop(n, "padding_y"))); + if (xml_hasproperty(n, "tag")) + entity->add_component(entity, new_component(&tag_component, + xml_getproperty(n, "tag"))); + return (entity); } \ No newline at end of file diff --git a/src/utility/list.c b/src/utility/list.c index 598b8c0..b6d3354 100644 --- a/src/utility/list.c +++ b/src/utility/list.c @@ -14,15 +14,15 @@ gc_list *list_add(gc_list *list, void *obj) if (!list) { list = malloc(sizeof(gc_list)); - if (list) - list->prev = NULL; + if (list) + list->prev = NULL; listconst = list; } else { while (list->next) list = list->next; list->next = malloc(sizeof(gc_list)); - if (list->next) - list->next->prev = list; + if (list->next) + list->next->prev = list; list = list->next; } if (!list) @@ -34,21 +34,21 @@ gc_list *list_add(gc_list *list, void *obj) gc_list *list_remove(gc_list *list, void *obj) { - gc_list *listconst = list; + gc_list *listconst = list; - if (!list) - return (NULL); - if (list->data == obj) { - if (list->next) - list->next->prev = NULL; - return (list->next); - } - while (list->next && list->next->data != obj) - list = list->next; - if (!list->next) - return (listconst); - list->next = list->next->next; - if (list->next) - list->next->prev = list; - return (listconst); + if (!list) + return (NULL); + if (list->data == obj) { + if (list->next) + list->next->prev = NULL; + return (list->next); + } + while (list->next && list->next->data != obj) + list = list->next; + if (!list->next) + return (listconst); + list->next = list->next->next; + if (list->next) + list->next->prev = list; + return (listconst); } \ No newline at end of file