R-Type 0.1
Loading...
Searching...
No Matches
RenderSystem.hpp
1#pragma once
2
3#include <functional>
4#include <stdexcept>
5#include <vector>
6
7#include "components/Transform.hpp"
8#include <ISystem.hpp>
9#include <Logger/Logger.hpp>
10
11#include "systems/RenderConcept.hpp"
12
13namespace rtk::systems {
23template <rtk::ecs::concepts::IsRenderWindow WindowType>
24class RenderSystem final : public rtk::ecs::ISystem {
25public:
30 RenderSystem(std::reference_wrapper<WindowType> window)
31 : _window(window.get()) {}
32
33 ~RenderSystem() = default;
34
38 void onStart(rtk::ecs::Registry &) override {
39 LOG_INFO("Load Render System");
40 }
41
46 void update(rtk::ecs::Registry &reg, float) override {
47 _spritesToDraw.clear();
48
49 auto view =
51
52 auto &transforms = reg.get_components<component::Transform>();
53 auto &sprites = reg.get_components<rtk::ecs::concepts::SpriteData>();
54
55 for (auto entity : view) {
56 const auto *transform = transforms.get(entity);
57 const auto *sourceSprite = sprites.get(entity);
58
59 if (!transform || !sourceSprite)
60 continue;
61
62 rtk::ecs::concepts::SpriteData sprite = *sourceSprite;
63
64 sprite.position = transform->position;
65 sprite.rotation = transform->rotation;
66 sprite.scale = transform->scale;
67
68 _spritesToDraw.push_back(std::move(sprite));
69 }
70
71 if (!_window.beginFrame(rtk::ecs::concepts::ColorRGBA8{0, 0, 0, 255}))
72 return;
73
74 _window.draw(_spritesToDraw);
75 _window.endFrame();
76 }
77
81 void onStop(rtk::ecs::Registry &) override {}
82
83private:
84 WindowType &_window;
85 std::vector<rtk::ecs::concepts::SpriteData> _spritesToDraw;
86};
87
89} // namespace rtk::systems
Draws every entity that has a Transform and a SpriteData.
Definition RenderSystem.hpp:24
void update(rtk::ecs::Registry &reg, 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
Position, rotation and scale of an entity in world space.
Definition Transform.hpp:22
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