7#include "components/Transform.hpp"
9#include <Logger/Logger.hpp>
11#include "systems/RenderConcept.hpp"
13namespace rtk::systems {
23template <rtk::ecs::concepts::IsRenderWindow WindowType>
31 : _window(window.get()) {}
38 void onStart(rtk::ecs::Registry &)
override {
39 LOG_INFO(
"Load Render System");
46 void update(rtk::ecs::Registry ®,
float)
override {
47 _spritesToDraw.clear();
55 for (
auto entity : view) {
56 const auto *transform = transforms.get(entity);
57 const auto *sourceSprite = sprites.get(entity);
59 if (!transform || !sourceSprite)
64 sprite.
position = transform->position;
65 sprite.
rotation = transform->rotation;
66 sprite.
scale = transform->scale;
68 _spritesToDraw.push_back(std::move(sprite));
74 _window.draw(_spritesToDraw);
81 void onStop(rtk::ecs::Registry &)
override {}
85 std::vector<rtk::ecs::concepts::SpriteData> _spritesToDraw;
Draws every entity that has a Transform and a SpriteData.
Definition RenderSystem.hpp:24
void update(rtk::ecs::Registry ®, float) override
Copies transforms into sprites and draws one frame.
Definition RenderSystem.hpp:46
void onStop(rtk::ecs::Registry &) override
Does nothing.
Definition RenderSystem.hpp:81
void onStart(rtk::ecs::Registry &) override
Logs that the system is loaded.
Definition RenderSystem.hpp:38
RenderSystem(std::reference_wrapper< WindowType > window)
Creates the system.
Definition RenderSystem.hpp:30
8-bit per channel color.
Definition RenderConcept.hpp:325
Everything the renderer needs to draw one sprite.
Definition RenderConcept.hpp:338
utils::vec2 position
Screen position, in pixels.
Definition RenderConcept.hpp:339
utils::vec2 scale
Scale factor on each axis.
Definition RenderConcept.hpp:340
float rotation
Rotation in radians.
Definition RenderConcept.hpp:346