r-type  0.0.0
R-Type main
Loading...
Searching...
No Matches
Sprite.hpp
Go to the documentation of this file.
1///
2/// @file Systems.hpp
3/// @brief This file contains the system definitions
4/// @namespace cli
5///
6
7#pragma once
8
9#include "ECS/Component.hpp"
10#include "ECS/Registry.hpp"
12
13namespace cli
14{
15
16 class SpriteSystem final : public eng::ASystem
17 {
18 public:
19 explicit SpriteSystem(eng::IRenderer &renderer) : m_renderer(renderer) {}
20 ~SpriteSystem() override = default;
21
22 SpriteSystem(const SpriteSystem &) = delete;
26
27 void update(ecs::Registry &registry, float /* dt */) override
28 {
29 for (auto &[entity, sprite] : registry.getAll<ecs::Texture>())
30 {
31 const auto *transform = registry.getComponent<ecs::Transform>(entity);
32 const auto *rect = registry.getComponent<ecs::Rect>(entity);
33
34 const float x = (transform != nullptr) ? transform->x : 0.F;
35 const float y = (transform != nullptr) ? transform->y : 0.F;
36 m_renderer.setSpriteTexture(sprite.id + std::to_string(entity), sprite.path);
37 m_renderer.setSpritePosition(sprite.id + std::to_string(entity), x, y);
38
39 if (rect)
40 {
41 m_renderer.setSpriteFrame(sprite.id + std::to_string(entity), static_cast<int>(rect->pos_x),
42 static_cast<int>(rect->pos_y), rect->size_x, rect->size_y);
43 }
44
45 m_renderer.drawSprite(sprite.id + std::to_string(entity));
46 }
47 }
48
49 private:
51 }; // class SpriteSystem
52
53} // namespace cli
This file contains the component definitions.
This file contains the IRenderer class declaration.
This file contains the Registry class declaration.
SpriteSystem & operator=(SpriteSystem &&)=delete
void update(ecs::Registry &registry, float) override
Definition Sprite.hpp:27
SpriteSystem(eng::IRenderer &renderer)
Definition Sprite.hpp:19
SpriteSystem(const SpriteSystem &)=delete
SpriteSystem(SpriteSystem &&)=delete
eng::IRenderer & m_renderer
Definition Sprite.hpp:50
~SpriteSystem() override=default
SpriteSystem & operator=(const SpriteSystem &)=delete
Class for managing entities and their components.
Definition Registry.hpp:25
std::unordered_map< Entity, T > & getAll()
Definition Registry.hpp:77
T * getComponent(Entity e)
Definition Registry.hpp:71
Interface for the renderer.
virtual void drawSprite(const std::string &name)=0
virtual void setSpritePosition(const std::string &name, float x, float y)=0
virtual void setSpriteTexture(const std::string &name, const std::string &path)=0
virtual void setSpriteFrame(const std::string &name, int fx, int fy, int fnx, int fny)=0