aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/system
diff options
context:
space:
mode:
authorheavydemon21 <48092678+heavydemon21@users.noreply.github.com>2024-12-19 16:24:53 +0100
committerGitHub <noreply@github.com>2024-12-19 16:24:53 +0100
commitc737b01035cb62712b1dabcfef6f5014bdc882d1 (patch)
tree74c84fbf6715a4a47154d79e3c8df2c312eca1d4 /src/crepe/system
parent794efc4ef7a44b190a4d9ecc2dd84a66c62ab005 (diff)
parent1b98253b58a077618aabcf9dfe073495b8db8d4f (diff)
Merge pull request #86 from lonkaars/niels/UI
Text rendering
Diffstat (limited to 'src/crepe/system')
-rw-r--r--src/crepe/system/RenderSystem.cpp64
-rw-r--r--src/crepe/system/RenderSystem.h31
2 files changed, 43 insertions, 52 deletions
diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp
index 57d180f..e8339c3 100644
--- a/src/crepe/system/RenderSystem.cpp
+++ b/src/crepe/system/RenderSystem.cpp
@@ -16,6 +16,8 @@
#include "../facade/Texture.h"
#include "../manager/ComponentManager.h"
#include "../manager/ResourceManager.h"
+#include "api/Text.h"
+#include "facade/Font.h"
#include "RenderSystem.h"
#include "types.h"
@@ -70,12 +72,34 @@ RefVector<Sprite> RenderSystem::sort(RefVector<Sprite> & objs) const {
void RenderSystem::update() {
this->clear_screen();
this->render();
+ this->render_text();
this->present_screen();
}
-bool RenderSystem::render_particle(const Sprite & sprite, const float & transform_angle,
- const float & scale) {
+void RenderSystem::render_text() {
+ SDLContext & ctx = this->mediator.sdl_context;
+ ComponentManager & mgr = this->mediator.component_manager;
+ ResourceManager & resource_manager = this->mediator.resource_manager;
+ RefVector<Text> texts = mgr.get_components_by_type<Text>();
+
+ for (Text & text : texts) {
+ if (!text.active) continue;
+ if (!text.font.has_value())
+ text.font.emplace(ctx.get_font_from_name(text.font_family));
+
+ const Font & font = resource_manager.get<Font>(text.font.value());
+ const auto & transform
+ = mgr.get_components_by_id<Transform>(text.game_object_id).front().get();
+ ctx.draw_text(SDLContext::RenderText{
+ .text = text,
+ .font = font,
+ .transform = transform,
+ });
+ }
+}
+
+bool RenderSystem::render_particle(const Sprite & sprite, const Transform & transform) {
ComponentManager & mgr = this->mediator.component_manager;
SDLContext & ctx = this->mediator.sdl_context;
ResourceManager & resource_manager = this->mediator.resource_manager;
@@ -99,14 +123,14 @@ bool RenderSystem::render_particle(const Sprite & sprite, const float & transfor
.sprite = sprite,
.texture = res,
.pos = p.position,
- .angle = p.angle + transform_angle,
- .scale = scale,
+ .angle = p.angle + transform.rotation,
+ .scale = transform.scale,
});
}
}
return rendering_particles;
}
-void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) {
+void RenderSystem::render_normal(const Sprite & sprite, const Transform & transform) {
SDLContext & ctx = this->mediator.sdl_context;
ResourceManager & resource_manager = this->mediator.resource_manager;
const Texture & res = resource_manager.get<Texture>(sprite.source);
@@ -114,9 +138,9 @@ void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) {
ctx.draw(SDLContext::RenderContext{
.sprite = sprite,
.texture = res,
- .pos = tm.position,
- .angle = tm.rotation,
- .scale = tm.scale,
+ .pos = transform.position,
+ .angle = transform.rotation,
+ .scale = transform.scale,
});
}
@@ -128,36 +152,16 @@ void RenderSystem::render() {
ResourceManager & resource_manager = this->mediator.resource_manager;
RefVector<Sprite> sorted_sprites = this->sort(sprites);
RefVector<Text> text_components = mgr.get_components_by_type<Text>();
- for (Text & text : text_components) {
- const Transform & transform
- = mgr.get_components_by_id<Transform>(text.game_object_id).front().get();
- this->render_text(text, transform);
- }
+
for (const Sprite & sprite : sorted_sprites) {
if (!sprite.active) continue;
const Transform & transform
= mgr.get_components_by_id<Transform>(sprite.game_object_id).front().get();
- bool rendered_particles
- = this->render_particle(sprite, transform.rotation, transform.scale);
+ bool rendered_particles = this->render_particle(sprite, transform);
if (rendered_particles) continue;
this->render_normal(sprite, transform);
}
}
-void RenderSystem::render_text(Text & text, const Transform & tm) {
- SDLContext & ctx = this->mediator.sdl_context;
-
- if (!text.font.has_value()) {
- text.font.emplace(ctx.get_font_from_name(text.font_family));
- }
-
- ResourceManager & resource_manager = this->mediator.resource_manager;
-
- if (!text.font.has_value()) {
- return;
- }
- const Asset & font_asset = text.font.value();
- const Font & res = resource_manager.get<Font>(font_asset);
-}
diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h
index 76df0e0..14e5c2d 100644
--- a/src/crepe/system/RenderSystem.h
+++ b/src/crepe/system/RenderSystem.h
@@ -36,35 +36,28 @@ private:
//! Updates the active camera used for rendering.
void update_camera();
- //! Renders the whole screen
+ //! Renders all the sprites and particles
void render();
+ //! Renders all Text components
+ void render_text();
+
+private:
/**
* \brief Renders all the particles on the screen from a given sprite.
*
* \param sprite renders the particles with given texture
- * \param tm the Transform component for scale. This is not a const reference because each
- * particle has a position and rotation that needs to overwrite the transform position and
- * rotation without overwriting the current transform. and because the transform
- * constructor is now protected i cannot make tmp inside
+ * \param transform the component that holds the position, rotation, and scale.
* \return true if particles have been rendered
*/
- bool render_particle(const Sprite & sprite, const float & transform_angle,
- const float & scale);
- /**
- * \brief Renders all Text components
- *
- * \param text The text component to be rendered.
- * \param tm the Transform component that holds the position,rotation and scale
- */
- void render_text(Text & text, const Transform & tm);
+ bool render_particle(const Sprite & sprite, const Transform & transform);
/**
* \brief renders a sprite with a Transform component on the screen
*
* \param sprite the sprite component that holds all the data
- * \param tm the Transform component that holds the position,rotation and scale
+ * \param transform the Transform component that holds the position,rotation and scale
*/
- void render_normal(const Sprite & sprite, const Transform & tm);
+ void render_normal(const Sprite & sprite, const Transform & transform);
/**
* \brief sort a vector sprite objects with
@@ -73,12 +66,6 @@ private:
* \return returns a sorted reference vector
*/
RefVector<Sprite> sort(RefVector<Sprite> & objs) const;
-
- /**
- * \todo Add text rendering using SDL_ttf for text components.
- * \todo Implement a text component and a button component.
- * \todo Consider adding text input functionality.
- */
};
} // namespace crepe