R-TYPE
SystemManager.hpp
Go to the documentation of this file.
1 /*
2 ** EPITECH PROJECT, 2022
3 ** r-type
4 ** File description:
5 ** SystemManager
6 */
7 
8 #ifndef SYSTEMMANAGER_HPP_
9 #define SYSTEMMANAGER_HPP_
10 
11 #include "../Component/ComponentManager.hpp"
12 #include "../Entity/EntityManager.hpp"
13 #include "../IncludeCpp.hpp"
14 #include "../IncludeSystem.hpp"
15 
16 namespace ECS {
18 public:
19  SystemManager(const std::shared_ptr<ComponentManager>& componentManager, const std::shared_ptr<EntityManager>& entityManager);
20  ~SystemManager() = default;
21 
22  template <typename System>
24  {
25  _systems.emplace(typeid(System), System(_componentManager, _entityManager));
26  return std::any_cast<System&>(_systems.at(typeid(System)));
27  }
28 
29  template <class System>
31  {
32  return std::any_cast<System&>(_systems.at(typeid(System)));
33  }
34 
35 protected:
36 private:
37  std::unordered_map<std::type_index, std::any> _systems;
38  std::shared_ptr<ComponentManager> _componentManager;
39  std::shared_ptr<EntityManager> _entityManager;
40 };
41 } // namespace ECS
42 
43 #endif /* !SYSTEMMANAGER_HPP_ */
Definition: SystemManager.hpp:17
~SystemManager()=default
SystemManager(const std::shared_ptr< ComponentManager > &componentManager, const std::shared_ptr< EntityManager > &entityManager)
Definition: SystemManager.cpp:18
System & getSystem()
Definition: SystemManager.hpp:30
System & addSystem()
Definition: SystemManager.hpp:23
Definition: System.hpp:18
Definition: ComponentManager.hpp:14