From 1b3b69b65b298eea3c4b98a3ce6392c54be1c1ed Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Thu, 20 Feb 2020 17:57:46 +0100 Subject: [PATCH] Adding % to the fixed to cam component --- include/components/fixed_to_cam_component.h | 4 +++- src/components/fixed_to_cam.c | 13 +++++++++---- src/sfml_renderer/sfml_drawer.c | 12 +++++++++--- src/systems/fixed_to_cam_pseudosystem.c | 10 +++++----- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/include/components/fixed_to_cam_component.h b/include/components/fixed_to_cam_component.h index 9e2d794..6e57041 100644 --- a/include/components/fixed_to_cam_component.h +++ b/include/components/fixed_to_cam_component.h @@ -13,7 +13,9 @@ struct fixed_to_cam { gc_component base; - gc_vector2 offset; + gc_vector2 pos; + bool per_x; + bool per_y; }; extern const struct fixed_to_cam fixed_to_cam; \ No newline at end of file diff --git a/src/components/fixed_to_cam.c b/src/components/fixed_to_cam.c index 7bcf6ab..09d681c 100644 --- a/src/components/fixed_to_cam.c +++ b/src/components/fixed_to_cam.c @@ -15,16 +15,21 @@ static void ctr(void *component, va_list args) { struct fixed_to_cam *cmp = (struct fixed_to_cam *)component; - cmp->offset = va_arg(args, gc_vector2); + cmp->pos = va_arg(args, gc_vector2); } 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; n = xml_getnode(n, "Position"); - cmp->offset.x = xml_getintprop(n, "x"); - cmp->offset.y = xml_getintprop(n, "y"); + 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, '%'); (void)scene; (void)entity; } @@ -49,5 +54,5 @@ const struct fixed_to_cam fixed_to_cam = { serialize: &serialize, destroy: &component_destroy }, - offset: (gc_vector2){0, 0} + pos: (gc_vector2){0, 0} }; \ No newline at end of file diff --git a/src/sfml_renderer/sfml_drawer.c b/src/sfml_renderer/sfml_drawer.c index 7606763..187e0f5 100644 --- a/src/sfml_renderer/sfml_drawer.c +++ b/src/sfml_renderer/sfml_drawer.c @@ -11,6 +11,7 @@ #include "text.h" #include "components/transform_component.h" #include "systems/sfml_renderer_system.h" +#include "my.h" #include void sfmlrenderer_draw_texture(struct sfml_renderer_system *renderer, \ @@ -59,11 +60,16 @@ struct transform_component *tra, gc_animholder *holder, float dtime) void sfmlrenderer_draw_txt(struct sfml_renderer_system *renderer, \ struct transform_component *tra, gc_text *txt) { - sfText_setString(renderer->text, txt->text); + sfFloatRect bounds; + + sfText_setString(renderer->text, txt->text); + if (!txt->font) + my_printf("%s has a font not loaded. Rendering impossible.", txt->font); sfText_setFont(renderer->text, txt->font); + bounds = sfText_getLocalBounds(renderer->text); sfText_setPosition(renderer->text, (sfVector2f){ - tra->position.x, - -tra->position.y + tra->position.x - bounds.width / 2, + -tra->position.y - bounds.height / 2 }); sfRenderWindow_drawText(renderer->window, renderer->text, NULL); } \ 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 a45c36a..f623f57 100644 --- a/src/systems/fixed_to_cam_pseudosystem.c +++ b/src/systems/fixed_to_cam_pseudosystem.c @@ -21,20 +21,20 @@ struct sfml_renderer_system *renderer, struct camerafollow_system *cam) gc_list *list; gc_entity *entity; sfVector2f size; - gc_vector2 offset; struct transform_component *tra; + struct fixed_to_cam *fc; list = scene->get_entity_by_cmp(scene, "fixed_to_cam"); for (gc_list *li = list; li; li = li->next) { entity = (gc_entity *)li->data; tra = GETCMP(transform_component); - if (!tra) + fc = GETCMP(fixed_to_cam); + if (!tra) continue; size = sfView_getSize(renderer->view); - offset = GETCMP(fixed_to_cam)->offset; tra->position = (gc_vector2) { - cam->cam_pos.x - size.x / 2 + offset.x, - cam->cam_pos.y + size.y / 2 - offset.y, + (cam->cam_pos.x - size.x / 2 + fc->pos.x) * fc->per_x ? size.x / 100 : 1, + (cam->cam_pos.y + size.y / 2 - fc->pos.y) * fc->per_y ? size.y / 100 : 1 }; } }