From ceae72fd7319fefe0d2006ccfcbc9e1b2141906c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Thu, 30 Apr 2020 03:05:41 +0200 Subject: [PATCH 1/3] adding a new way to renderer diagonals from the back --- include/map_utils.h | 4 +++- src/isometry/map_utils.c | 10 ++++++++++ src/sfml_renderer/sfml_vertex.c | 28 +++++++++++++++++----------- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/include/map_utils.h b/include/map_utils.h index 4e124d4..05cf2c9 100644 --- a/include/map_utils.h +++ b/include/map_utils.h @@ -18,4 +18,6 @@ struct tile *get_tile_from_pos(struct vertex_component *map, gc_vector2 pos); struct tile *get_tile_at(struct vertex_component *v, gc_vector2i p); gc_vector2 gc_vector2_from_coords(float x, float y, float z); -bool is_pos_in_tile(gc_vector2 pos, struct tile *tile); \ No newline at end of file +bool is_pos_in_tile(gc_vector2 pos, struct tile *tile); +struct tile*get_selected_tile(struct sfml_renderer_system *this, \ +struct vertex_component *info, gc_vector2 pos); \ No newline at end of file diff --git a/src/isometry/map_utils.c b/src/isometry/map_utils.c index dfe3a4d..469262c 100644 --- a/src/isometry/map_utils.c +++ b/src/isometry/map_utils.c @@ -64,4 +64,14 @@ sel->corners[i]->y, sel->corners[i]->z); } } return (i_stock); +} + +struct tile*get_selected_tile(struct sfml_renderer_system *this, \ +struct vertex_component *info, gc_vector2 pos) +{ + sfVector2i v = sfMouse_getPosition((const sfWindow *) this->window); + sfVector2f w = sfRenderWindow_mapPixelToCoords(this->window, v, this->view); + + w.y *= -1; + return (get_tile_from_pos(info, gc_vector2_add(pos, *(gc_vector2 *)&w))); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_vertex.c b/src/sfml_renderer/sfml_vertex.c index d94b49a..fd84b69 100644 --- a/src/sfml_renderer/sfml_vertex.c +++ b/src/sfml_renderer/sfml_vertex.c @@ -80,24 +80,30 @@ bool hovered) sfVertexArray_getVertex(this->vertices, j)->color = colors[sel]; } + + void sfmlrenderer_draw_tilemap(gc_engine *engine, gc_entity *entity, \ struct vertex_component *info, float dt) { struct sfml_renderer_system *this = GETSYS(engine, sfml_renderer_system); struct transform_component *tra = GETCMP(entity, transform_component); - sfVector2i v = sfMouse_getPosition((const sfWindow *) this->window); - sfVector2f w = sfRenderWindow_mapPixelToCoords(this->window, v, this->view); - gc_vector2 pos = tra->position; - int i; struct tile *tl; + int width = 0; + int length = 0; + int end_diagonal = 0; - w.y *= -1; 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--) { - sfmlrenderer_manage_hovered_tile(this, &info->map[i] == tl); - sfmlrenderer_draw_tile(engine, pos, &info->map[i], dt); - } + tl = get_selected_tile(this, info, tra->position); + for (width = 0; info->vertices[0][width].z != INT32_MIN; width++); + for (length = 0; info->map[length].corners[0]; length++); + width--; + end_diagonal = length + width - 1; + for (int i = length - 1; i >= 0; i -= (i > length - width) ? 1 : width) { + end_diagonal -= (end_diagonal <= width) ? 1 : width; + for (int j = i; j >= end_diagonal; j -= width - 1) { + sfmlrenderer_manage_hovered_tile(this, &info->map[j] == tl); + sfmlrenderer_draw_tile(engine, tra->position, &info->map[j], dt); + } + } } \ No newline at end of file From 45f10a7f737aef7b3f16f2ec2b5cafb0e6db80b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Thu, 30 Apr 2020 03:06:04 +0200 Subject: [PATCH 2/3] fixing norm issue --- src/sfml_renderer/sfml_vertex.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/sfml_renderer/sfml_vertex.c b/src/sfml_renderer/sfml_vertex.c index fd84b69..3b1ec62 100644 --- a/src/sfml_renderer/sfml_vertex.c +++ b/src/sfml_renderer/sfml_vertex.c @@ -80,8 +80,6 @@ bool hovered) sfVertexArray_getVertex(this->vertices, j)->color = colors[sel]; } - - void sfmlrenderer_draw_tilemap(gc_engine *engine, gc_entity *entity, \ struct vertex_component *info, float dt) { From ebfdd0b4e979c8d2f56856e90597f04806569921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Thu, 30 Apr 2020 14:33:49 +0200 Subject: [PATCH 3/3] fixing Makefile compilation --- include/map_utils.h | 5 +++-- src/isometry/map_utils.c | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/map_utils.h b/include/map_utils.h index 05cf2c9..d874963 100644 --- a/include/map_utils.h +++ b/include/map_utils.h @@ -10,6 +10,7 @@ #include "engine.h" #include #include "components/vertex_component.h" +#include "systems/sfml_renderer_system.h" #define ANGLE_X 25 #define ANGLE_Y 35 @@ -18,6 +19,6 @@ struct tile *get_tile_from_pos(struct vertex_component *map, gc_vector2 pos); struct tile *get_tile_at(struct vertex_component *v, gc_vector2i p); gc_vector2 gc_vector2_from_coords(float x, float y, float z); -bool is_pos_in_tile(gc_vector2 pos, struct tile *tile); struct tile*get_selected_tile(struct sfml_renderer_system *this, \ -struct vertex_component *info, gc_vector2 pos); \ No newline at end of file +struct vertex_component *info, gc_vector2 pos); +bool is_pos_in_tile(gc_vector2 pos, struct tile *tile); \ No newline at end of file diff --git a/src/isometry/map_utils.c b/src/isometry/map_utils.c index 469262c..910c271 100644 --- a/src/isometry/map_utils.c +++ b/src/isometry/map_utils.c @@ -10,6 +10,7 @@ #include #include "components/vertex_component.h" #include "stdint.h" +#include "systems/sfml_renderer_system.h" gc_vector2 gc_vector2_from_coords(float x, float y, float z) {