From 1a3b2520669e42ecfdae2612017d6999875fc351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Mon, 30 Mar 2020 18:52:26 +0200 Subject: [PATCH] tile entities can be drawned and norm compliance has been made --- Makefile | 3 +- include/components/vertex_component.h | 4 ++- src/isometry/isometry.c | 1 + src/sfml_renderer/sfml_utilities.c | 17 +++++++++++ src/sfml_renderer/sfml_vertex.c | 41 +++++++++++++-------------- 5 files changed, 43 insertions(+), 23 deletions(-) create mode 100644 src/sfml_renderer/sfml_utilities.c diff --git a/Makefile b/Makefile index 0763bd7..74f0440 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,8 @@ SRC = src/engine/engine.c \ src/isometry/map_utils.c \ src/isometry/tile_collisions.c \ src/components/vertex_component.c \ - src/isometry/vertex_data_loader.c + src/isometry/vertex_data_loader.c \ + src/sfml_renderer/sfml_utilities.c OBJ = $(SRC:%.c=%.o) diff --git a/include/components/vertex_component.h b/include/components/vertex_component.h index de85f78..d7a89b0 100644 --- a/include/components/vertex_component.h +++ b/include/components/vertex_component.h @@ -34,4 +34,6 @@ struct vertex_component struct vertex **vertices; }; -extern const struct vertex_component vertex_component; \ No newline at end of file +extern const struct vertex_component vertex_component; + +sfVector2f sfvector2f(gc_vector2 vector); \ No newline at end of file diff --git a/src/isometry/isometry.c b/src/isometry/isometry.c index 6e683c8..f236083 100644 --- a/src/isometry/isometry.c +++ b/src/isometry/isometry.c @@ -64,6 +64,7 @@ bool init_tile(struct tile *tile, gc_vector2i c, struct vertex **vertices, node for (int i = 0; i < 4; i++) tile->corners[i] = &vertices[arr[i].x][arr[i].y]; tile->data = 0; + tile->entity = NULL; n = tile_get_data(c, n); tmp = xml_gettmpstring(n, "texture", NULL); tile->texture = scene->get_data(scene, "sprite", tmp); diff --git a/src/sfml_renderer/sfml_utilities.c b/src/sfml_renderer/sfml_utilities.c new file mode 100644 index 0000000..492aff2 --- /dev/null +++ b/src/sfml_renderer/sfml_utilities.c @@ -0,0 +1,17 @@ +/* +** EPITECH PROJECT, 2020 +** MUL_my_runner_2019 +** File description: +** sfml utilities +*/ + +#include "vector2.h" +#include "SFML/Graphics.h" + +sfVector2f sfvector2f(gc_vector2 vector) +{ + return ((sfVector2f){ + vector.x, + vector.y + }); +} \ No newline at end of file diff --git a/src/sfml_renderer/sfml_vertex.c b/src/sfml_renderer/sfml_vertex.c index 6a76f41..37ec513 100644 --- a/src/sfml_renderer/sfml_vertex.c +++ b/src/sfml_renderer/sfml_vertex.c @@ -17,14 +17,6 @@ #include #include -sfVector2f sfvector2f(gc_vector2 vector) -{ - return ((sfVector2f){ - vector.x, - vector.y - }); -} - static void tile_rotate(struct tile *tile, int *vertex_order) { for (int j = 0; j < (tile->data & ROTATION_INFO); j++) { @@ -53,9 +45,10 @@ struct tile *tile, gc_vector2 offset, sfVertex **v) } } -void sfmlrenderer_draw_tile(struct sfml_renderer_system *this, \ -gc_vector2 offset, struct tile *tile) +void sfmlrenderer_draw_tile(gc_engine *engine, \ +gc_vector2 offset, struct tile *tile, float dt) { + struct sfml_renderer_system *this = GETSYS(engine, sfml_renderer_system); sfVertex *v[4]; if (tile->corners[0]->z == INT32_MAX || !tile->corners[2]->y) @@ -64,6 +57,20 @@ gc_vector2 offset, struct tile *tile) this->states->texture = (sfTexture *) tile->texture; sfRenderWindow_drawVertexArray(this->window, this->vertices, this->states); this->states->texture = NULL; + if (tile->entity) + this->system.update_entity(engine, this, tile->entity, dt); +} + +void sfmlrenderer_manage_hovered_tile(struct sfml_renderer_system *this, \ +bool hovered) +{ + sfColor colors[2] = {sfWhite, {180, 180, 180, 255}}; + int sel = 0; + + if (hovered) + sel = 1; + for (int j = 0; j < 4; j++) + sfVertexArray_getVertex(this->vertices, j)->color = colors[sel]; } void sfmlrenderer_draw_tilemap(gc_engine *engine, gc_entity *entity, \ @@ -81,16 +88,8 @@ struct vertex_component *info, float dt) if (!info || !info->map) return; tl = get_tile_from_pos(info, gc_vector2_add(pos, *(gc_vector2 *)&w)); - for (i = 0; info->map[i].corners[0]; i++); - for (i--; i >= 0; i--) { - if (&info->map[i] == tl) { - for (int j = 0; j < 4; j++) - sfVertexArray_getVertex(this->vertices, j)->color = (sfColor) {180, 180, 180, 255}; - } - sfmlrenderer_draw_tile(this, pos, &info->map[i]); - if (&info->map[i] == tl) { - for (int j = 0; j < 4; j++) - sfVertexArray_getVertex(this->vertices, j)->color = sfWhite; - } + for (i = 0; info->map[i].corners[0]; i++) { + sfmlrenderer_manage_hovered_tile(this, &info->map[i] == tl); + sfmlrenderer_draw_tile(engine, pos, &info->map[i], dt); } } \ No newline at end of file