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);
}