From 8d091a9575414e2b4e081ad3aa2aa5dc4b53b93c Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Wed, 29 Apr 2020 22:43:33 +0200 Subject: [PATCH] Adding offsets to map linker --- include/components/map_linker.h | 1 + src/components/map_linker.c | 4 +++- src/sfml_renderer/sfml_vertex.c | 2 +- src/systems/map_linker_system.c | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/components/map_linker.h b/include/components/map_linker.h index 01152ac..3dc94cd 100644 --- a/include/components/map_linker.h +++ b/include/components/map_linker.h @@ -15,6 +15,7 @@ struct map_linker { gc_component base; struct tile *tile; + gc_vector2i offset; }; const struct map_linker map_linker; diff --git a/src/components/map_linker.c b/src/components/map_linker.c index 660cb94..613c598 100644 --- a/src/components/map_linker.c +++ b/src/components/map_linker.c @@ -47,6 +47,7 @@ static void ctr(void *component, va_list args) bool solid = va_arg(args, int); cmp->tile = NULL; + cmp->offset = (gc_vector2i){0, 0}; if (!scene || !(maps = scene->get_entity_by_cmp(scene, "vertex_component"))) return; vert = GETCMP(maps->data, vertex_component); @@ -67,8 +68,9 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) return; vert = GETCMP(maps->data, vertex_component); cmp->tile = init(entity, vert, (gc_vector2i){x, y}, solid); - if (renderer && xml_hasproperty(n, "centered")) + if (renderer && xml_hasproperty(n, "centered")) { renderer->render_mode_x = RENDER_MODE_CENTERED; + } } static void dtr(void *component) diff --git a/src/sfml_renderer/sfml_vertex.c b/src/sfml_renderer/sfml_vertex.c index d94b49a..22cebd0 100644 --- a/src/sfml_renderer/sfml_vertex.c +++ b/src/sfml_renderer/sfml_vertex.c @@ -97,7 +97,7 @@ struct vertex_component *info, float dt) 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_manage_hovered_tile(this, &info->map[i] == tl || info->map[i].entity); sfmlrenderer_draw_tile(engine, pos, &info->map[i], dt); } } \ No newline at end of file diff --git a/src/systems/map_linker_system.c b/src/systems/map_linker_system.c index e8e9aa3..d508112 100644 --- a/src/systems/map_linker_system.c +++ b/src/systems/map_linker_system.c @@ -28,4 +28,7 @@ struct tile *tile, gc_vector2 map_offset) { tra->position.x += map_offset.x; tra->position.y += map_offset.y; tra->position.y *= -1; + gc_vector2 off = gc_vector2_from_coords(link->offset.x, link->offset.y, 0); + tra->position.x += off.x / 16; + tra->position.y += off.y / 16; } \ No newline at end of file