From 1a36c6cec6db64d68f46d6f09f42aedfe5e24dec Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Thu, 27 Feb 2020 17:26:52 +0100 Subject: [PATCH 1/6] Working with text that do not resize --- include/sfml_renderer.h | 5 +++-- include/text.h | 2 ++ include/xml.h | 1 + src/components/renderers/text_renderer.c | 8 ++++++++ src/sfml_renderer/sfml_drawer.c | 9 +++++++-- src/systems/sfml_renderer_system.c | 3 +-- src/ui/setup_ui.c | 4 +++- 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/include/sfml_renderer.h b/include/sfml_renderer.h index 3561dba..32c3ef3 100644 --- a/include/sfml_renderer.h +++ b/include/sfml_renderer.h @@ -27,8 +27,9 @@ 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, \ gc_entity *entity, gc_animholder *holder, float dtime); -void sfmlrenderer_draw_txt(struct sfml_renderer_system *renderer, \ -struct transform_component *tra, gc_text *txt); +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 vertex_component *txt); diff --git a/include/text.h b/include/text.h index 23bf99c..5114b08 100644 --- a/include/text.h +++ b/include/text.h @@ -11,5 +11,7 @@ typedef struct gc_text { char *text; void *font; + int size; int color; + bool resize; } gc_text; \ No newline at end of file diff --git a/include/xml.h b/include/xml.h index d2da817..8f87aba 100644 --- a/include/xml.h +++ b/include/xml.h @@ -42,4 +42,5 @@ float xml_getfloatprop(node *n, const char *key); int xml_getchildcount(node *n); int xml_getchildcount_filtered(node *n, char *name); bool xml_propcontains(node *n, const char *key, const char *tofind); +bool xml_getbool(node *n, const char *key, bool default_value); void xml_destroy(node *n); \ No newline at end of file diff --git a/src/components/renderers/text_renderer.c b/src/components/renderers/text_renderer.c index 7a2384a..edbd1c2 100644 --- a/src/components/renderers/text_renderer.c +++ b/src/components/renderers/text_renderer.c @@ -34,7 +34,12 @@ void text_ctr(struct renderer *cmp, va_list args) cmp->data = gctext; gctext->text = va_arg(args, char *); gctext->font = va_arg(args, sfFont *); + gctext->size = va_arg(args, int); gctext->color = color_from_text(va_arg(args, char *)); + gctext->resize = va_arg(args, int); + + if (gctext->size <= 0) + gctext->size = 30; } void text_fdctr(gc_scene *scene, struct renderer *cmp, node *n) @@ -48,4 +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; } diff --git a/src/sfml_renderer/sfml_drawer.c b/src/sfml_renderer/sfml_drawer.c index d2442e9..26e73cb 100644 --- a/src/sfml_renderer/sfml_drawer.c +++ b/src/sfml_renderer/sfml_drawer.c @@ -73,15 +73,20 @@ gc_entity *entity, gc_animholder *holder, float dtime) sfmlrenderer_draw_texture(renderer, tra, entity, holder->sprite); } -void sfmlrenderer_draw_txt(struct sfml_renderer_system *renderer, \ -struct transform_component *tra, gc_text *txt) +void sfmlrenderer_draw_txt(gc_engine *engine, \ +struct sfml_renderer_system *renderer, struct transform_component *tra, \ +gc_text *txt) { sfFloatRect bounds; + float size = 1; + if (txt->resize) + size = 800 / engine->get_screen_size(engine).x; 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); + sfText_setCharacterSize(renderer->text, txt->size / size); bounds = sfText_getLocalBounds(renderer->text); sfText_setColor(renderer->text, *(sfColor*)&txt->color); sfText_setPosition(renderer->text, (sfVector2f){ diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c index 6e5ccbc..7d6c226 100644 --- a/src/systems/sfml_renderer_system.c +++ b/src/systems/sfml_renderer_system.c @@ -44,7 +44,7 @@ gc_entity *entity, float dt) sfmlrenderer_draw_anim(rend, entity, (gc_animholder *)text->data, dt); break; case GC_TXTREND: - sfmlrenderer_draw_txt(rend, pos, (gc_text *)text->data); + sfmlrenderer_draw_txt(engine, rend, pos, (gc_text *)text->data); break; case GC_MAP: sfmlrenderer_draw_tilemap(rend, (struct vertex_component *)text->data); @@ -53,7 +53,6 @@ gc_entity *entity, float dt) my_printf("Trying to render a texture with an unknown type.\n"); break; } - (void)engine; } void sfml_setup_options(gc_engine *engine) diff --git a/src/ui/setup_ui.c b/src/ui/setup_ui.c index 15024fa..c37f13c 100644 --- a/src/ui/setup_ui.c +++ b/src/ui/setup_ui.c @@ -24,7 +24,9 @@ gc_entity *new_text(gc_engine *engine, gc_scene *scene, node *n) entity->add_component(entity, new_component(&renderer_component, GC_TXTREND, xml_getproperty(n, "text"), - scene->get_data(scene, "font", NULL), xml_gettempprop(n, "color"))); + 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"), From 9e924a19522dc32c6f399fc93744876347ed7fcf Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Thu, 27 Feb 2020 18:44:26 +0100 Subject: [PATCH 2/6] Starting to make '%' works as a keep ratio --- src/systems/fixed_to_cam_pseudosystem.c | 8 ++++++-- src/ui/setup_ui.c | 2 -- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/systems/fixed_to_cam_pseudosystem.c b/src/systems/fixed_to_cam_pseudosystem.c index 225b4e2..82042df 100644 --- a/src/systems/fixed_to_cam_pseudosystem.c +++ b/src/systems/fixed_to_cam_pseudosystem.c @@ -51,8 +51,12 @@ void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size) if (!tra) continue; tra->size = (gc_vector2) { - fc->per_w != 0 ? size.x * fc->size_x / 100 : tra->size.x, - fc->per_h != 0 ? size.y * fc->size_y / 100 : tra->size.y + fc->per_w ? size.x * fc->size_x / 100 : tra->size.x, + fc->per_h ? size.y * fc->size_y / 100 : tra->size.y }; + if (fc->per_w && fc->size_x == 0) + tra->size.x = fc->size_y * size.y / size.x; + if (fc->per_h && fc->size_y == 0) + tra->size.y = tra->size.x * size.y / size.x; } } \ No newline at end of file diff --git a/src/ui/setup_ui.c b/src/ui/setup_ui.c index c37f13c..e488c81 100644 --- a/src/ui/setup_ui.c +++ b/src/ui/setup_ui.c @@ -5,11 +5,9 @@ #include "engine.h" #include "data.h" #include "xml.h" -#include "my.h" #include "components/transform_component.h" #include "components/renderer.h" #include "components/fixed_to_cam_component.h" -#include "components/clickable_component.h" #include "systems/sfml_renderer_system.h" #include "ui.h" #include From c3e6543898584e26e1c55ca2b3a07cac9ea325e0 Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Fri, 28 Feb 2020 10:49:24 +0100 Subject: [PATCH 3/6] Fixing the empty % --- src/systems/fixed_to_cam_pseudosystem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/systems/fixed_to_cam_pseudosystem.c b/src/systems/fixed_to_cam_pseudosystem.c index 82042df..e2b0746 100644 --- a/src/systems/fixed_to_cam_pseudosystem.c +++ b/src/systems/fixed_to_cam_pseudosystem.c @@ -55,8 +55,8 @@ void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size) fc->per_h ? size.y * fc->size_y / 100 : tra->size.y }; if (fc->per_w && fc->size_x == 0) - tra->size.x = fc->size_y * size.y / size.x; + tra->size.x = tra->size.y; if (fc->per_h && fc->size_y == 0) - tra->size.y = tra->size.x * size.y / size.x; + tra->size.y = tra->size.x; } } \ No newline at end of file From f60608d1c4d88837fb870140d44b059b02e330fb Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Mon, 2 Mar 2020 14:17:37 +0100 Subject: [PATCH 4/6] Cleaning up --- include/components/input_component.h | 18 ++++++++++ include/engine.h | 2 +- include/xml.h | 1 + src/components/input_component.c | 49 +++++++++++++++++++++++++++ src/engine/engine_component_builder.c | 2 ++ src/sfml_renderer/sfml_events.c | 18 +++++----- src/sfml_renderer/sfml_functions.c | 22 ++++++------ src/ui/button.c | 26 +++++++------- src/ui/setup_ui.c | 18 ++++------ 9 files changed, 111 insertions(+), 45 deletions(-) create mode 100644 include/components/input_component.h create mode 100644 src/components/input_component.c diff --git a/include/components/input_component.h b/include/components/input_component.h new file mode 100644 index 0000000..2f33947 --- /dev/null +++ b/include/components/input_component.h @@ -0,0 +1,18 @@ +// +// Created by anonymus-raccoon on 3/2/20. +// + +#ifndef _INPUT_COMPONENT_H_ +#define _INPUT_COMPONENT_H_ + +#include "component.h" + +struct input_component +{ + gc_component base; + int value; +}; + +extern const struct input_component input_component; + +#endif //_INPUT_COMPONENT_H_ diff --git a/include/engine.h b/include/engine.h index a18ddb5..f9dc582 100644 --- a/include/engine.h +++ b/include/engine.h @@ -85,6 +85,6 @@ void engine_add_callback(gc_engine *engine, char *name, callback_t func); int engine_use_sfml(gc_engine *engine, const char *title, int framerate); -#define GETSYS(x) ((struct x *)engine->get_system(engine, #x)) +#define GETSYS(engine, x) ((struct x *)engine->get_system(engine, #x)) #endif \ No newline at end of file diff --git a/include/xml.h b/include/xml.h index 8f87aba..8084143 100644 --- a/include/xml.h +++ b/include/xml.h @@ -43,4 +43,5 @@ int xml_getchildcount(node *n); int xml_getchildcount_filtered(node *n, char *name); bool xml_propcontains(node *n, const char *key, const char *tofind); bool xml_getbool(node *n, const char *key, bool default_value); +char *xml_gettmpstring(node *n, const char *key, char *def); void xml_destroy(node *n); \ No newline at end of file diff --git a/src/components/input_component.c b/src/components/input_component.c new file mode 100644 index 0000000..13e76dc --- /dev/null +++ b/src/components/input_component.c @@ -0,0 +1,49 @@ +// +// Created by anonymus-raccoon on 3/2/20. +// + +#include "xml.h" +#include "entity.h" +#include "scene.h" +#include "components/input_component.h" + +static void ctr(void *component, va_list args) +{ + struct input_component *cmp = (struct input_component *)component; + + cmp->value = 0; +} + +static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) +{ + struct input_component *cmp = (struct input_component *)component; + + cmp->value = 0; + (void)scene; + (void)entity; +} + +static void dtr(void *component) +{ + (void)component; +} + +static char *serialize(void *component) +{ + (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 +}; \ No newline at end of file diff --git a/src/engine/engine_component_builder.c b/src/engine/engine_component_builder.c index 48253a7..63c00e5 100644 --- a/src/engine/engine_component_builder.c +++ b/src/engine/engine_component_builder.c @@ -20,6 +20,7 @@ #include "components/collision_component.h" #include "components/vertex_component.h" #include +#include "components/input_component.h" void engine_add_component(gc_engine *engine, const void *component) { @@ -43,4 +44,5 @@ void engine_add_buildin_components(gc_engine *engine) engine->add_component(engine, &friction_component); engine->add_component(engine, &collision_component); engine->add_component(engine, &vertex_component); + engine->add_component(engine, &input_component); } \ No newline at end of file diff --git a/src/sfml_renderer/sfml_events.c b/src/sfml_renderer/sfml_events.c index fdcf29b..f2cb0f1 100644 --- a/src/sfml_renderer/sfml_events.c +++ b/src/sfml_renderer/sfml_events.c @@ -13,14 +13,14 @@ void sfml_handle_events(gc_engine *engine) { - struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); sfEvent event; sfVector2i mousePos; sfVector2f pos; - while (sfRenderWindow_pollEvent(renderer->window, &event)) { + while (sfRenderWindow_pollEvent(rend->window, &event)) { if (event.type == sfEvtClosed) - sfRenderWindow_close(renderer->window); + sfRenderWindow_close(rend->window); if (event.type == sfEvtResized) engine->on_resize(engine, (gc_vector2) { @@ -28,8 +28,8 @@ void sfml_handle_events(gc_engine *engine) event.size.height }); if (event.type == sfEvtMouseButtonReleased) { - mousePos = sfMouse_getPosition(renderer->window); - pos = sfRenderWindow_mapPixelToCoords(renderer->window, mousePos, renderer->view); + mousePos = sfMouse_getPosition(rend->window); + pos = sfRenderWindow_mapPixelToCoords(rend->window, mousePos, rend->view); pos.y *= -1; clickable_onclick(engine, (gc_vector2){pos.x, pos.y}); } @@ -38,9 +38,9 @@ void sfml_handle_events(gc_engine *engine) void sfml_resize(gc_engine *engine, gc_vector2 size) { - struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - sfView_setSize(renderer->view, (sfVector2f){ + sfView_setSize(rend->view, (sfVector2f){ size.x, size.y }); @@ -49,8 +49,8 @@ void sfml_resize(gc_engine *engine, gc_vector2 size) gc_vector2 sfml_get_screen_size(gc_engine *engine) { - struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system); - sfVector2u size = sfRenderWindow_getSize(renderer->window); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + sfVector2u size = sfRenderWindow_getSize(rend->window); 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 c3182d6..c5f3dde 100644 --- a/src/sfml_renderer/sfml_functions.c +++ b/src/sfml_renderer/sfml_functions.c @@ -15,18 +15,18 @@ bool sfml_is_open(gc_engine *engine) { - struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); if (engine->should_close) return (false); - return (sfRenderWindow_isOpen(renderer->window)); + return (sfRenderWindow_isOpen(rend->window)); } bool sfml_has_focus(gc_engine *engine) { - struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); - return (sfRenderWindow_hasFocus(renderer->window)); + return (sfRenderWindow_hasFocus(rend->window)); } bool sfml_is_keypressed(int key) @@ -36,17 +36,17 @@ bool sfml_is_keypressed(int key) void sfml_draw(gc_engine *engine) { - struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system); - struct camerafollow_system *cam = GETSYS(camerafollow_system); + struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system); + struct camerafollow_system *cam = GETSYS(engine, camerafollow_system); if (cam) { - sfView_setCenter(renderer->view, (sfVector2f){ + sfView_setCenter(rend->view, (sfVector2f){ cam->cam_pos.x, -cam->cam_pos.y }); - sfRenderWindow_setView(renderer->window, renderer->view); - entities_update_to_cam(engine->scene, renderer, cam); + sfRenderWindow_setView(rend->window, rend->view); + entities_update_to_cam(engine->scene, rend, cam); } - sfRenderWindow_display(renderer->window); - sfRenderWindow_clear(renderer->window, sfBlack); + sfRenderWindow_display(rend->window); + sfRenderWindow_clear(rend->window, sfBlack); } \ No newline at end of file diff --git a/src/ui/button.c b/src/ui/button.c index 4bd4206..d73facc 100644 --- a/src/ui/button.c +++ b/src/ui/button.c @@ -14,30 +14,30 @@ #include "systems/sfml_renderer_system.h" #include "ui.h" #include +#include "components/input_component.h" 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 *renderer = GETSYS(sfml_renderer_system); - sfTexture *texture = scene->get_data(scene, "sprite", "button_background"); + 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 = rend->get_text_size(rend, text); - if (!renderer) + if (!rend) return (NULL); if (!texture) my_printf("No texture defined for the button_background.\n"); entity->add_component(entity, new_component(&transform_component, - (gc_vector2){0, 0}, - renderer->get_text_size(renderer, text))); + (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})); + 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, 0, 0, false, false)); + (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); } @@ -52,6 +52,8 @@ gc_list *new_button(gc_engine *engine, gc_scene *scene, node *n) if (!background) return (NULL); + 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"))); LISTADD(entities, background); diff --git a/src/ui/setup_ui.c b/src/ui/setup_ui.c index e488c81..fcafbb3 100644 --- a/src/ui/setup_ui.c +++ b/src/ui/setup_ui.c @@ -43,21 +43,15 @@ gc_entity *new_sprite(gc_engine *engine, gc_scene *scene, node *n) 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")})); + (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})); + 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", "%"), + (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", "%"))); + xml_propcontains(n, "width", "%"), xml_propcontains(n, "height", "%"))); return (entity); } From 0e5465c854f7668ef9579277f3426ce2a9cbe436 Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Mon, 2 Mar 2020 14:56:24 +0100 Subject: [PATCH 5/6] Adding a is fullssreen --- include/systems/sfml_renderer_system.h | 1 + src/systems/sfml_renderer_system.c | 5 +++-- src/ui/button.c | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/systems/sfml_renderer_system.h b/include/systems/sfml_renderer_system.h index b173332..fe83a4d 100644 --- a/include/systems/sfml_renderer_system.h +++ b/include/systems/sfml_renderer_system.h @@ -25,6 +25,7 @@ struct sfml_renderer_system sfVertexArray *vertices; sfRenderStates *states; gc_vector2 (*get_text_size)(sf_renderer *this, gc_text *text); + bool is_fullscreen; }; gc_system *gc_new_sfml_renderer(gc_engine *engine, \ diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c index 7d6c226..d089966 100644 --- a/src/systems/sfml_renderer_system.c +++ b/src/systems/sfml_renderer_system.c @@ -55,8 +55,9 @@ gc_entity *entity, float dt) } } -void sfml_setup_options(gc_engine *engine) +void sfml_setup_options(struct sfml_renderer_system *this, gc_engine *engine) { + this->is_fullscreen = false; engine->is_open = &sfml_is_open; engine->has_focus = &sfml_has_focus; engine->is_keypressed = &sfml_is_keypressed; @@ -90,7 +91,7 @@ void sfmlrend_ctr(void *rend, va_list list) sfView_setSize(renderer->view, (sfVector2f){800, 600}); sfView_setCenter(renderer->view, (sfVector2f){400, -300}); sfRenderWindow_setView(renderer->window, renderer->view); - sfml_setup_options(engine); + sfml_setup_options(renderer, engine); } void sfmlrend_dtr(void *system) diff --git a/src/ui/button.c b/src/ui/button.c index d73facc..0fac4ff 100644 --- a/src/ui/button.c +++ b/src/ui/button.c @@ -52,6 +52,8 @@ gc_list *new_button(gc_engine *engine, gc_scene *scene, node *n) 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, From 9a18233a812e7131fcc65384b759edda3645df17 Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Mon, 2 Mar 2020 16:42:37 +0100 Subject: [PATCH 6/6] Adding resolutions --- include/systems/sfml_renderer_system.h | 1 + src/systems/sfml_renderer_system.c | 1 + src/ui/setup_ui.c | 14 +++++++------- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/systems/sfml_renderer_system.h b/include/systems/sfml_renderer_system.h index fe83a4d..898e1dc 100644 --- a/include/systems/sfml_renderer_system.h +++ b/include/systems/sfml_renderer_system.h @@ -26,6 +26,7 @@ struct sfml_renderer_system sfRenderStates *states; gc_vector2 (*get_text_size)(sf_renderer *this, gc_text *text); bool is_fullscreen; + gc_vector2i resolution; }; gc_system *gc_new_sfml_renderer(gc_engine *engine, \ diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c index d089966..a705103 100644 --- a/src/systems/sfml_renderer_system.c +++ b/src/systems/sfml_renderer_system.c @@ -58,6 +58,7 @@ gc_entity *entity, float dt) void sfml_setup_options(struct sfml_renderer_system *this, gc_engine *engine) { 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; diff --git a/src/ui/setup_ui.c b/src/ui/setup_ui.c index fcafbb3..50ac471 100644 --- a/src/ui/setup_ui.c +++ b/src/ui/setup_ui.c @@ -14,8 +14,12 @@ gc_entity *new_text(gc_engine *engine, gc_scene *scene, node *n) { - gc_entity *entity = entity_create(); + 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})); @@ -26,12 +30,8 @@ gc_entity *new_text(gc_engine *engine, gc_scene *scene, node *n) 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", "%"), + (gc_vector2){xml_getintprop(n, "x"),xml_getintprop(n, "y")}, + xml_propcontains(n, "x", "%"), xml_propcontains(n, "y", "%"), 0, 0, false, false)); return (entity); }