R-TYPE
Manager.hpp
Go to the documentation of this file.
1 /*
2 ** EPITECH PROJECT, 2022
3 ** r-type
4 ** File description:
5 ** Manager
6 */
7 
8 #ifndef MANAGER_HPP_
9 #define MANAGER_HPP_
10 
11 #include "System/SystemManager.hpp"
12 
13 class Manager {
14 public:
15  Manager();
16  ~Manager() = default;
17 
19  void destroyEntity(ECS::Entity entity);
20  std::deque<ECS::Entity>& getEntities();
21  std::deque<ECS::Entity> getEntityByType(ECS::EntityType type);
22  ECS::Entity getEntityById(std::size_t id);
23 
24  void addComponent(ECS::Entity e, ECS::ComponentType c, std::shared_ptr<ECS::IComp> comp);
25  std::shared_ptr<ECS::IComp> getComponent(ECS::Entity e, ECS::ComponentType c);
26  std::map<ECS::ComponentType, std::shared_ptr<ECS::IComp>>& getComponentList(ECS::Entity entity);
27  std::deque<ECS::Entity>& getEntityList(ECS::ComponentType type);
28 
29  template <typename System>
30  System& addSystem()
31  {
32  return _systemManager->addSystem<System>();
33  }
34  template <class System>
35  System& getSystem()
36  {
37  return _systemManager->getSystem<System>();
38  }
39 
40 protected:
41 private:
42  std::shared_ptr<ECS::EntityManager> _entityManager;
43  std::shared_ptr<ECS::ComponentManager> _componentManager;
44  std::unique_ptr<ECS::SystemManager> _systemManager;
45 };
46 
47 #endif /* !MANAGER_HPP_ */
Definition: Entity.hpp:30
Definition: Manager.hpp:13
std::deque< ECS::Entity > getEntityByType(ECS::EntityType type)
Definition: Manager.cpp:59
Manager()
Definition: Manager.cpp:15
std::deque< ECS::Entity > & getEntities()
Definition: Manager.cpp:49
~Manager()=default
System & addSystem()
Definition: Manager.hpp:30
void addComponent(ECS::Entity e, ECS::ComponentType c, std::shared_ptr< ECS::IComp > comp)
Definition: Manager.cpp:80
std::deque< ECS::Entity > & getEntityList(ECS::ComponentType type)
Definition: Manager.cpp:104
ECS::Entity createEntity(ECS::EntityType type)
Definition: Manager.cpp:29
System & getSystem()
Definition: Manager.hpp:35
void destroyEntity(ECS::Entity entity)
Definition: Manager.cpp:39
ECS::Entity getEntityById(std::size_t id)
Definition: Manager.cpp:69
std::map< ECS::ComponentType, std::shared_ptr< ECS::IComp > > & getComponentList(ECS::Entity entity)
Definition: Manager.cpp:96
std::shared_ptr< ECS::IComp > getComponent(ECS::Entity e, ECS::ComponentType c)
Definition: Manager.cpp:88
ComponentType
Definition: ComponentManager.hpp:15
EntityType
Definition: Entity.hpp:17