Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
SystemManager.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** R-Type
4** File description:
5** SystemManager.hpp
6*/
7
8/*
9** MIT License
10**
11** Copyright (c) 2025 Robin Toillon
12**
13** Permission is hereby granted, free of charge, to any person obtaining
14** a copy of this software and associated documentation files (the
15** "Software"), to deal in the Software without restriction, including
16** without limitation the rights to use, copy, modify, merge, publish,
17** distribute, sublicense, and/or sell copies of the Software, and to
18** permit persons to whom the Software is furnished to do so, subject to
19** the following conditions:
20**
21** The above copyright notice and this permission notice shall be
22** included in all copies or substantial portions of the Software.
23**
24** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31*/
32
42#ifndef RTYPE_SYSTEMMANAGER_HPP_
43 #define RTYPE_SYSTEMMANAGER_HPP_
44
45 #include "RType/ECS/ISystem.hpp"
46 #include "RType/ECS/Registry.hpp"
48 #include <memory>
49 #include <map>
50 #include <typeindex>
51 #include <optional>
52 #include <functional>
53
54namespace rtp::ecs
55{
57 public:
58 explicit SystemManager(Registry &registry);
59
60 template <typename T, typename... Args>
61 T &add(Args &&...args);
62
63 template <typename T>
64 T &getSystem(void);
65
66 void update(float dt);
67
68 private:
70 std::unordered_map<std::type_index, Signature> _signatures;
71 std::unordered_map<std::type_index,
72 std::unique_ptr<ISystem>> _systems;
73 };
74}
75
76 #include "SystemManager.tpp"
77
78#endif
Interface for ECS systems.
Component signature representation for ECS.
T & add(Args &&...args)
std::unordered_map< std::type_index, Signature > _signatures
Registry & _registry
Reference to the entity registry.
std::unordered_map< std::type_index, std::unique_ptr< ISystem > > _systems
Registered systems.
File : RenderSystem.hpp License: MIT Author : Elias Josué HAJJAR LLAUQUEN elias-josue....