From 024a1ccca2f4f5c3442914f6f8173f3c07d52f92 Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Wed, 11 Dec 2019 17:26:55 +0100
Subject: [PATCH] Moving the sfml to a system of itself
---
Makefile | 7 +-
.../{texture_renderer.h => renderer.h} | 9 +-
include/engine.h | 19 ++--
include/renderer.h | 14 ---
include/system.h | 3 +-
include/systems/sfml_renderer_system.h | 25 +++++
include/systems/texture_renderer_system.h | 12 ---
include/texture.h | 3 +-
src/component.c | 2 +-
src/components/parallax_component.c | 2 +-
.../{texture_renderer.c => renderer.c} | 31 ++++---
src/engine/engine.c | 44 ++-------
src/engine/engine_component_builder.c | 4 +-
src/engine/engine_internal.c | 13 ++-
src/engine/engine_system_builder.c | 13 ++-
src/engine/event_handler.c | 18 ----
src/renderer/renderer.c | 37 --------
src/renderer/sfml_functions.c | 39 ++++++++
src/scene/scene.c | 2 +-
src/scene/scene_creator.c | 8 ++
src/systems/parallax_system.c | 11 +--
src/systems/sfml_renderer_system.c | 93 +++++++++++++++++++
src/systems/texture_renderer_system.c | 43 ---------
23 files changed, 246 insertions(+), 206 deletions(-)
rename include/components/{texture_renderer.h => renderer.h} (61%)
delete mode 100644 include/renderer.h
create mode 100644 include/systems/sfml_renderer_system.h
delete mode 100644 include/systems/texture_renderer_system.h
rename src/components/{texture_renderer.c => renderer.c} (69%)
delete mode 100644 src/engine/event_handler.c
delete mode 100644 src/renderer/renderer.c
create mode 100644 src/renderer/sfml_functions.c
create mode 100644 src/scene/scene_creator.c
create mode 100644 src/systems/sfml_renderer_system.c
delete mode 100644 src/systems/texture_renderer_system.c
diff --git a/Makefile b/Makefile
index dc9cbbc..5a72d7b 100644
--- a/Makefile
+++ b/Makefile
@@ -7,15 +7,14 @@
SRC = src/engine/engine.c \
src/engine/engine_internal.c \
- src/engine/event_handler.c \
- src/renderer/renderer.c \
+ src/renderer/sfml_functions.c \
src/renderer/texture_utility.c \
src/entity/entity.c \
src/entity/entity_factory.c \
src/component.c \
src/components/movable_component.c \
src/components/transform_component.c \
- src/components/texture_renderer.c \
+ src/components/renderer.c \
src/components/parallax_component.c \
src/scene/scene.c \
src/utility/my_strdup.c \
@@ -32,7 +31,7 @@ SRC = src/engine/engine.c \
src/deserializer/deserialize_entity.c \
src/deserializer/prefab.c \
src/system.c \
- src/systems/texture_renderer_system.c \
+ src/systems/sfml_renderer_system.c \
src/systems/parallax_system.c \
src/engine/engine_system_builder.c \
src/engine/engine_component_builder.c
diff --git a/include/components/texture_renderer.h b/include/components/renderer.h
similarity index 61%
rename from include/components/texture_renderer.h
rename to include/components/renderer.h
index f4410e9..0bd6b4d 100644
--- a/include/components/texture_renderer.h
+++ b/include/components/renderer.h
@@ -11,10 +11,15 @@
#include "sprite.h"
#include "vector2.h"
-struct texture_renderer
+enum GC_TEXTURETYPE {
+ GC_TEXTUREREND
+};
+
+struct renderer
{
gc_component base;
gc_sprite *sprite;
+ enum GC_TEXTURETYPE type;
};
-extern const struct texture_renderer texture_renderer;
\ No newline at end of file
+extern const struct renderer renderer_component;
\ No newline at end of file
diff --git a/include/engine.h b/include/engine.h
index 21e8d12..b8b13d3 100644
--- a/include/engine.h
+++ b/include/engine.h
@@ -14,17 +14,16 @@ typedef struct gc_engine gc_engine;
#include "texture.h"
#include "system.h"
#include "list.h"
-#include "sprite.h"
#include
-#include
struct gc_engine
{
gc_scene *scene;
bool (*is_open)(gc_engine *engine);
- int (*game_loop)(gc_engine *engine);
+ void (*handle_events)(gc_engine *engine);
+ int (*game_loop)(gc_engine *engine, float dtime);
+ void (*draw)(gc_engine *engine);
int (*change_scene)(gc_engine *engine, gc_scene *scene);
- void (*draw_texture)(gc_engine *, gc_sprite *);
void (*destroy)(gc_engine *engine);
gc_list *systems;
@@ -34,16 +33,12 @@ struct gc_engine
gc_list *components;
void (*add_component)(gc_engine *engine, const void *component);
const void *(*get_component)(gc_engine *engine, const char *name);
-
- sfRenderWindow *window;
- sfSprite *sprite;
- sfClock *clock;
- void (*draw)(gc_engine *engine);
};
-gc_engine *engine_create(char *title, unsigned framerate);
+gc_engine *engine_create();
bool engine_is_open(gc_engine *engine);
void handle_events(gc_engine *engine);
+void engine_draw(gc_engine *engine);
int change_scene(gc_engine *engine, gc_scene *scene);
void engine_add_buildin_systems(gc_engine *engine);
@@ -52,4 +47,6 @@ void engine_add_system(gc_engine *engine, const gc_system *system);
void engine_add_buildin_components(gc_engine *engine);
const void *engine_get_component(gc_engine *engine, const char *name);
-void engine_add_component(gc_engine *engine, const void *component);
\ No newline at end of file
+void engine_add_component(gc_engine *engine, const void *component);
+
+int engine_use_sfml(gc_engine *engine, const char *title, int framerate);
\ No newline at end of file
diff --git a/include/renderer.h b/include/renderer.h
deleted file mode 100644
index 70be2a6..0000000
--- a/include/renderer.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-** EPITECH PROJECT, 2019
-** MUL_my_runner_2019
-** File description:
-** renderer
-*/
-
-#pragma once
-
-#include "engine.h"
-
-void renderer_draw(gc_engine *engine);
-gc_texture *texture_create(const char *path);
-void renderer_draw_texture(gc_engine *, gc_sprite *);
\ No newline at end of file
diff --git a/include/system.h b/include/system.h
index c302ef8..fd93c85 100644
--- a/include/system.h
+++ b/include/system.h
@@ -9,7 +9,6 @@ typedef struct gc_system gc_system;
#pragma once
-#include "systems/texture_renderer_system.h"
#include "entity.h"
#include
@@ -18,7 +17,7 @@ struct gc_system
const char *name;
const char *component_name;
bool (*check_dependencies)(const gc_system *, const gc_entity *);
- void (*update_entity)(gc_engine *engine, gc_entity *entity, float dtime);
+ void (*update_entity)(void *system, gc_entity *entity, float dtime);
void (*destroy)(void *system);
};
diff --git a/include/systems/sfml_renderer_system.h b/include/systems/sfml_renderer_system.h
new file mode 100644
index 0000000..496c402
--- /dev/null
+++ b/include/systems/sfml_renderer_system.h
@@ -0,0 +1,25 @@
+/*
+** EPITECH PROJECT, 2019
+** MUL_my_runner_2019
+** File description:
+** texture_renderer_system
+*/
+
+#pragma once
+
+#include "system.h"
+#include
+
+typedef struct sfml_renderer_system sfml_renderer_system;
+struct sfml_renderer_system
+{
+ gc_system system;
+ sfRenderWindow *window;
+ sfSprite *sprite;
+};
+
+gc_system *gc_new_sfml_renderer(gc_engine *engine, \
+const char *title, int framerate);
+bool sfml_is_open(gc_engine *engine);
+void sfml_handle_events(gc_engine *engine);
+void sfml_draw(gc_engine *engine);
\ No newline at end of file
diff --git a/include/systems/texture_renderer_system.h b/include/systems/texture_renderer_system.h
deleted file mode 100644
index 6270c28..0000000
--- a/include/systems/texture_renderer_system.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-** EPITECH PROJECT, 2019
-** MUL_my_runner_2019
-** File description:
-** texture_renderer_system
-*/
-
-#pragma once
-
-#include "system.h"
-
-extern const gc_system texture_renderer_system;
\ No newline at end of file
diff --git a/include/texture.h b/include/texture.h
index e54a25d..0ad433e 100644
--- a/include/texture.h
+++ b/include/texture.h
@@ -18,4 +18,5 @@ struct gc_texture
void (*destroy)(gc_texture *texture);
};
-gc_texture *get_texture(gc_engine *engine, char *name);
\ No newline at end of file
+gc_texture *get_texture(gc_engine *engine, char *name);
+gc_texture *texture_create(const char *path);
\ No newline at end of file
diff --git a/src/component.c b/src/component.c
index e47d90e..4cde2a3 100644
--- a/src/component.c
+++ b/src/component.c
@@ -8,7 +8,7 @@
#include "component.h"
#include "components/transform_component.h"
#include "components/movable_component.h"
-#include "components/texture_renderer.h"
+#include "components/renderer.h"
#include "components/parallax_component.h"
#include "utility.h"
#include
diff --git a/src/components/parallax_component.c b/src/components/parallax_component.c
index 636987b..4d3bbdd 100644
--- a/src/components/parallax_component.c
+++ b/src/components/parallax_component.c
@@ -39,7 +39,7 @@ const struct parallax_component parallax_component = {
base: {
name: "ParallaxComponent",
size: sizeof(struct parallax_component),
- dependencies: (char *[]){"TransformComponent", "TextureRenderer", NULL},
+ dependencies: (char *[]){"TransformComponent", "Renderer", NULL},
ctr: ¶llax_ctr,
fdctr: ¶llax_fdctr,
dtr: ¶llax_dtr,
diff --git a/src/components/texture_renderer.c b/src/components/renderer.c
similarity index 69%
rename from src/components/texture_renderer.c
rename to src/components/renderer.c
index 7ba77f4..9c484ff 100644
--- a/src/components/texture_renderer.c
+++ b/src/components/renderer.c
@@ -8,13 +8,14 @@
#include "engine.h"
#include "xml.h"
#include "utility.h"
+#include "sprite.h"
#include "components/transform_component.h"
-#include "components/texture_renderer.h"
+#include "components/renderer.h"
#include
-static void texture_rend_ctr(void *component, va_list args)
+static void rend_ctr(void *component, va_list args)
{
- struct texture_renderer *cmp = (struct texture_renderer *)component;
+ struct renderer *cmp = (struct renderer *)component;
sfVector2u size;
cmp->sprite = malloc(sizeof(gc_sprite));
@@ -29,9 +30,9 @@ static void texture_rend_ctr(void *component, va_list args)
}
}
-static void texture_rend_fdctr(gc_engine *engine, void *component, node *n)
+static void rend_fdctr(gc_engine *engine, void *component, node *n)
{
- struct texture_renderer *cmp = (struct texture_renderer *)component;
+ struct renderer *cmp = (struct renderer *)component;
node *rect = xml_getnode(n, "Rect");
sfVector2u size;
@@ -48,31 +49,33 @@ static void texture_rend_fdctr(gc_engine *engine, void *component, node *n)
cmp->sprite->rect.height = (float)size.y;
cmp->sprite->rect.width = (float)size.x;
}
+ cmp->type = GC_TEXTUREREND;
}
-static void texture_rend_dtr(void *component)
+static void rend_dtr(void *component)
{
(void)component;
}
-static char *texture_rend_serialize(void *component)
+static char *rend_serialize(void *component)
{
(void)component;
return (NULL);
}
-const struct texture_renderer texture_renderer = {
+const struct renderer renderer_component = {
base: {
- name: "TextureRenderer",
- size: sizeof(struct texture_renderer),
+ name: "Renderer",
+ size: sizeof(struct renderer),
dependencies: (char *[]){"TransformComponent", NULL},
- ctr: &texture_rend_ctr,
- fdctr: &texture_rend_fdctr,
- dtr: &texture_rend_dtr,
- serialize: &texture_rend_serialize,
+ ctr: &rend_ctr,
+ fdctr: &rend_fdctr,
+ dtr: &rend_dtr,
+ serialize: &rend_serialize,
destroy: &component_destroy,
next: NULL,
prev: NULL
},
sprite: NULL,
+ type: GC_TEXTUREREND
};
\ No newline at end of file
diff --git a/src/engine/engine.c b/src/engine/engine.c
index 17cb035..1e0e960 100644
--- a/src/engine/engine.c
+++ b/src/engine/engine.c
@@ -7,7 +7,6 @@
#include "engine.h"
#include "system.h"
-#include "renderer.h"
#include
#include
#include
@@ -22,15 +21,13 @@ void update_system(gc_engine *engine, gc_system *sys, float dtime)
entities = scene->get_entity_by_cmp(scene, sys->component_name);
for (gc_list *entity = entities; entity; entity = entity->next) {
if (sys->check_dependencies(sys, entity->data))
- sys->update_entity(engine, entity->data, dtime);
+ sys->update_entity(sys, entity->data, dtime);
}
}
-int game_loop(gc_engine *engine)
+int game_loop(gc_engine *engine, float dtime)
{
- float dtime = sfTime_asSeconds(sfClock_restart(engine->clock));
-
- handle_events(engine);
+ engine->handle_events(engine);
for (gc_list *sys = engine->systems; sys; sys = sys->next)
update_system(engine, sys->data, dtime);
engine->draw(engine);
@@ -48,43 +45,22 @@ void engine_destroy(gc_engine *engine)
((gc_system *)system->data)->destroy(system->data);
free(system);
}
- sfSprite_destroy(engine->sprite);
- sfRenderWindow_destroy(engine->window);
- sfClock_destroy(engine->clock);
free(engine);
}
-int engine_create_sfdata(gc_engine *engine, char *title, unsigned framerate)
-{
- sfVideoMode mode = {800, 600, 32};
- sfWindowStyle style = sfDefaultStyle;
-
- engine->window = sfRenderWindow_create(mode, title, style, NULL);
- engine->sprite = sfSprite_create();
- engine->clock = sfClock_create();
- if (!engine->window || !engine->sprite || !engine->clock)
- return (-1);
- sfRenderWindow_setFramerateLimit(engine->window, framerate);
- return (0);
-}
-
-gc_engine *engine_create(char *title, unsigned framerate)
+gc_engine *engine_create()
{
gc_engine *engine = malloc(sizeof(gc_engine));
if (!engine)
return (NULL);
- if (engine_create_sfdata(engine, title, framerate) < 0) {
- free(engine);
- return (NULL);
- }
- engine->is_open = &engine_is_open;
- engine->game_loop = &game_loop;
- engine->change_scene = &change_scene;
- engine->draw = &renderer_draw;
- engine->draw_texture = &renderer_draw_texture;
- engine->destroy = &engine_destroy;
engine->scene = NULL;
+ engine->is_open = &engine_is_open;
+ engine->handle_events = &handle_events;
+ engine->game_loop = &game_loop;
+ engine->draw = &engine_draw;
+ engine->change_scene = &change_scene;
+ engine->destroy = &engine_destroy;
engine_add_buildin_systems(engine);
engine_add_buildin_components(engine);
return (engine);
diff --git a/src/engine/engine_component_builder.c b/src/engine/engine_component_builder.c
index c19c9f6..ba4a8ab 100644
--- a/src/engine/engine_component_builder.c
+++ b/src/engine/engine_component_builder.c
@@ -9,7 +9,7 @@
#include "system.h"
#include "components/movable_component.h"
#include "components/parallax_component.h"
-#include "components/texture_renderer.h"
+#include "components/renderer.h"
#include "components/transform_component.h"
#include
@@ -25,6 +25,6 @@ void engine_add_buildin_components(gc_engine *engine)
engine->get_component = &engine_get_component;
engine->add_component(engine, &transform_component);
engine->add_component(engine, &movable_component);
- engine->add_component(engine, &texture_renderer);
+ engine->add_component(engine, &renderer_component);
engine->add_component(engine, ¶llax_component);
}
\ No newline at end of file
diff --git a/src/engine/engine_internal.c b/src/engine/engine_internal.c
index 2956fd4..d3dbd60 100644
--- a/src/engine/engine_internal.c
+++ b/src/engine/engine_internal.c
@@ -10,7 +10,18 @@
bool engine_is_open(gc_engine *engine)
{
- return (sfRenderWindow_isOpen(engine->window));
+ (void)engine;
+ return (false);
+}
+
+void handle_events(gc_engine *engine)
+{
+ (void)engine;
+}
+
+void engine_draw(gc_engine *engine)
+{
+ (void)engine;
}
int change_scene(gc_engine *engine, gc_scene *scene)
diff --git a/src/engine/engine_system_builder.c b/src/engine/engine_system_builder.c
index d68c189..80221ff 100644
--- a/src/engine/engine_system_builder.c
+++ b/src/engine/engine_system_builder.c
@@ -7,7 +7,7 @@
#include "engine.h"
#include "system.h"
-#include "systems/texture_renderer_system.h"
+#include "systems/sfml_renderer_system.h"
#include "systems/parallax_system.h"
#include
@@ -21,6 +21,15 @@ void engine_add_buildin_systems(gc_engine *engine)
engine->systems = NULL;
engine->add_system = &engine_add_system;
engine->get_system = &engine_get_system;
- engine->add_system(engine, &texture_renderer_system);
engine->add_system(engine, ¶llax_system);
+}
+
+int engine_use_sfml(gc_engine *engine, const char *title, int framerate)
+{
+ gc_system *renderer = gc_new_sfml_renderer(engine, title, framerate);
+
+ if (!renderer)
+ return (-1);
+ engine->add_system(engine, renderer);
+ return (0);
}
\ No newline at end of file
diff --git a/src/engine/event_handler.c b/src/engine/event_handler.c
deleted file mode 100644
index 62da371..0000000
--- a/src/engine/event_handler.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-** EPITECH PROJECT, 2019
-** MUL_my_runner_2019
-** File description:
-** event_handler
-*/
-
-#include "engine.h"
-
-void handle_events(gc_engine *engine)
-{
- sfEvent event;
-
- while (sfRenderWindow_pollEvent(engine->window, &event)) {
- if (event.type == sfEvtClosed)
- sfRenderWindow_close(engine->window);
- }
-}
\ No newline at end of file
diff --git a/src/renderer/renderer.c b/src/renderer/renderer.c
deleted file mode 100644
index 5f34aba..0000000
--- a/src/renderer/renderer.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-** EPITECH PROJECT, 2019
-** MUL_my_runner_2019
-** File description:
-** render
-*/
-
-#include "engine.h"
-#include "sprite.h"
-#include
-
-void renderer_draw_texture(gc_engine *engine, gc_sprite *sprite)
-{
- sfVector2f pos = (sfVector2f){sprite->pos.x, sprite->pos.y};
- sfVector2f scale;
- sfVector2u t;
- sfIntRect rect = {
- (int)sprite->rect.left, (int)sprite->rect.top,
- (int)sprite->rect.width, (int)sprite->rect.height
- };
-
- if (!sprite->texture)
- return;
- t = sfTexture_getSize(sprite->texture->texture);
- scale = (sfVector2f){sprite->size.x / t.x, sprite->size.y / t.y};
- sfSprite_setTexture(engine->sprite, sprite->texture->texture, true);
- sfSprite_setPosition(engine->sprite, pos);
- sfSprite_setScale(engine->sprite, scale);
- sfSprite_setTextureRect(engine->sprite, rect);
- sfRenderWindow_drawSprite(engine->window, engine->sprite, NULL);
-}
-
-void renderer_draw(gc_engine *engine)
-{
- sfRenderWindow_display(engine->window);
- sfRenderWindow_clear(engine->window, sfBlack);
-}
\ No newline at end of file
diff --git a/src/renderer/sfml_functions.c b/src/renderer/sfml_functions.c
new file mode 100644
index 0000000..740c4a4
--- /dev/null
+++ b/src/renderer/sfml_functions.c
@@ -0,0 +1,39 @@
+/*
+** EPITECH PROJECT, 2019
+** MUL_my_runner_2019
+** File description:
+** sfml_functions
+*/
+
+#include "engine.h"
+#include
+#include "systems/sfml_renderer_system.h"
+
+bool sfml_is_open(gc_engine *engine)
+{
+ sfml_renderer_system *renderer = (sfml_renderer_system *)\
+engine->get_system(engine, "SfmlRendererSystem");
+
+ return (sfRenderWindow_isOpen(renderer->window));
+}
+
+void sfml_handle_events(gc_engine *engine)
+{
+ sfml_renderer_system *renderer = (sfml_renderer_system *)\
+engine->get_system(engine, "SfmlRendererSystem");
+ sfEvent event;
+
+ while (sfRenderWindow_pollEvent(renderer->window, &event)) {
+ if (event.type == sfEvtClosed)
+ sfRenderWindow_close(renderer->window);
+ }
+}
+
+void sfml_draw(gc_engine *engine)
+{
+ sfml_renderer_system *renderer = (sfml_renderer_system *)\
+engine->get_system(engine, "SfmlRendererSystem");
+
+ sfRenderWindow_display(renderer->window);
+ sfRenderWindow_clear(renderer->window, sfBlack);
+}
\ No newline at end of file
diff --git a/src/scene/scene.c b/src/scene/scene.c
index 54e01aa..1fff3dc 100644
--- a/src/scene/scene.c
+++ b/src/scene/scene.c
@@ -7,8 +7,8 @@
#include "engine.h"
#include "entity.h"
-#include "renderer.h"
#include "utility.h"
+#include "texture.h"
#include
gc_list *get_entity_by_cmp(gc_scene *scene, const char *cmp_name)
diff --git a/src/scene/scene_creator.c b/src/scene/scene_creator.c
new file mode 100644
index 0000000..c5b8b4b
--- /dev/null
+++ b/src/scene/scene_creator.c
@@ -0,0 +1,8 @@
+/*
+** EPITECH PROJECT, 2019
+** MUL_my_runner_2019
+** File description:
+** scene_creator
+*/
+
+int scene_create_fromxml()
\ No newline at end of file
diff --git a/src/systems/parallax_system.c b/src/systems/parallax_system.c
index 850551e..3ba17ad 100644
--- a/src/systems/parallax_system.c
+++ b/src/systems/parallax_system.c
@@ -9,22 +9,21 @@
#include "system.h"
#include "texture.h"
#include "vector2.h"
-#include "systems/texture_renderer_system.h"
#include "components/parallax_component.h"
-#include "components/texture_renderer.h"
+#include "components/renderer.h"
#include
-void parallax_update_entity(gc_engine *engine, gc_entity *entity, float dtime)
+void parallax_update_entity(void *system, gc_entity *entity, float dtime)
{
- struct texture_renderer *text = \
-(struct texture_renderer *)entity->get_component(entity, "TextureRenderer");
+ struct renderer *text = \
+(struct renderer *)entity->get_component(entity, "Renderer");
struct parallax_component *parallax = \
(struct parallax_component *)entity->get_component(entity, "ParallaxComponent");
if (!text->sprite)
return;
text->sprite->rect.left += parallax->speed * dtime;
- (void)engine;
+ (void)system;
}
void parallax_destroy(void *system)
diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c
new file mode 100644
index 0000000..f1929e2
--- /dev/null
+++ b/src/systems/sfml_renderer_system.c
@@ -0,0 +1,93 @@
+/*
+** EPITECH PROJECT, 2019
+** MUL_my_runner_2019
+** File description:
+** texture_renderer_system
+*/
+
+#include "entity.h"
+#include "system.h"
+#include "texture.h"
+#include "vector2.h"
+#include "systems/sfml_renderer_system.h"
+#include "components/transform_component.h"
+#include "components/renderer.h"
+#include
+
+void renderer_draw_texture(sfml_renderer_system *renderer, gc_sprite *sprite)
+{
+ sfVector2f pos = (sfVector2f){sprite->pos.x, sprite->pos.y};
+ sfVector2f scale;
+ sfVector2u t;
+ sfIntRect rect = {
+ (int)sprite->rect.left, (int)sprite->rect.top,
+ (int)sprite->rect.width, (int)sprite->rect.height
+ };
+
+ if (!sprite->texture)
+ return;
+ t = sfTexture_getSize(sprite->texture->texture);
+ scale = (sfVector2f){sprite->size.x / t.x, sprite->size.y / t.y};
+ sfSprite_setTexture(renderer->sprite, sprite->texture->texture, true);
+ sfSprite_setPosition(renderer->sprite, pos);
+ sfSprite_setScale(renderer->sprite, scale);
+ sfSprite_setTextureRect(renderer->sprite, rect);
+ sfRenderWindow_drawSprite(renderer->window, renderer->sprite, NULL);
+}
+
+void sfml_update_entity(void *system, gc_entity *entity, float dtime)
+{
+ struct transform_component *pos = (struct transform_component *)\
+entity->get_component(entity, "TransformComponent");
+ struct renderer *text = (struct renderer *)\
+entity->get_component(entity, "Renderer");
+
+ if (!text->sprite)
+ return;
+ text->sprite->pos = pos->position;
+ text->sprite->size = pos->size;
+ if (text->type == GC_TEXTUREREND)
+ renderer_draw_texture((sfml_renderer_system *)system, text->sprite);
+ (void)dtime;
+}
+
+void sfml_destroy(void *system)
+{
+ sfml_renderer_system *renderer = (sfml_renderer_system *)system;
+
+ sfRenderWindow_destroy(renderer->window);
+ sfSprite_destroy(renderer->sprite);
+}
+
+const sfml_renderer_system sfml_renderer = {
+ {
+ name: "SfmlRendererSystem",
+ component_name: "Renderer",
+ check_dependencies: &system_check_dependencies,
+ update_entity: &sfml_update_entity,
+ destroy: &sfml_destroy
+ },
+ window: NULL,
+ sprite: NULL
+};
+
+gc_system *gc_new_sfml_renderer(gc_engine *engine, \
+const char *title, int framerate)
+{
+ sfml_renderer_system *renderer = malloc(sizeof(sfml_renderer_system));
+ sfVideoMode mode = {800, 600, 32};
+ sfWindowStyle style = sfDefaultStyle;
+
+ if (!renderer)
+ return (NULL);
+ *renderer = sfml_renderer;
+ renderer->window = sfRenderWindow_create(mode, title, style, NULL);
+ renderer->sprite = sfSprite_create();
+ if (!renderer->window || !renderer->sprite)
+ return (NULL);
+ sfRenderWindow_setFramerateLimit(renderer->window, framerate);
+ engine->is_open = &sfml_is_open;
+ engine->handle_events = &sfml_handle_events;
+ engine->draw = &sfml_draw;
+ return ((gc_system *)renderer);
+}
\ No newline at end of file
diff --git a/src/systems/texture_renderer_system.c b/src/systems/texture_renderer_system.c
deleted file mode 100644
index 16f9651..0000000
--- a/src/systems/texture_renderer_system.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-** EPITECH PROJECT, 2019
-** MUL_my_runner_2019
-** File description:
-** texture_renderer_system
-*/
-
-#include "entity.h"
-#include "system.h"
-#include "texture.h"
-#include "vector2.h"
-#include "systems/texture_renderer_system.h"
-#include "components/transform_component.h"
-#include "components/texture_renderer.h"
-#include
-
-void tex_rend_update_entity(gc_engine *engine, gc_entity *entity, float dtime)
-{
- struct transform_component *pos = (struct transform_component *)\
-entity->get_component(entity, "TransformComponent");
- struct texture_renderer *text = (struct texture_renderer *)\
-entity->get_component(entity, "TextureRenderer");
-
- if (!text->sprite)
- return;
- text->sprite->pos = pos->position;
- text->sprite->size = pos->size;
- engine->draw_texture(engine, text->sprite);
- (void)dtime;
-}
-
-void tex_rend_destroy(void *system)
-{
- (void)system;
-}
-
-const gc_system texture_renderer_system = {
- name: "TextureRendererSystem",
- component_name: "TextureRenderer",
- check_dependencies: &system_check_dependencies,
- update_entity: &tex_rend_update_entity,
- destroy: &tex_rend_destroy
-};
\ No newline at end of file