7#include <unordered_map>
43 std::unordered_map<EntityID, std::vector<T*>> mComponents;
53 mComponents[entityID].push_back(component);
62 mComponents.erase(entityID);
70 for(
auto [_, list] : mComponents) {
71 for(
auto t : list)
delete t;
83 auto it = mComponents.find(entityID);
84 return (it != mComponents.end() && index < it->second.size()) ? it->second[index] :
nullptr;
94 auto it = mComponents.find(entityID);
95 return (it != mComponents.end()) ? it->second : std::vector<T*>();
105 auto it = mComponents.find(entityID);
106 if(it == mComponents.end() || (it->second.size() < index))
throw std::runtime_error(
"this entity does not have such a component");
107 return *(mComponents.at(entityID)[index]);
115 const std::unordered_map<EntityID, std::vector<T*>>&
GetRaw()
const {
Stockage de composant typé selon template, basé sur l'interface générique.
Definition componentstorage.hpp:40
void Add(EntityID entityID, T *component)
Ajoute un nouveau composant au stockage, associé à l'entityID donné
Definition componentstorage.hpp:52
const std::unordered_map< EntityID, std::vector< T * > > & GetRaw() const
Renvoie une réfèrence vers la table entière de stockage de composants.
Definition componentstorage.hpp:115
T * Get(EntityID entityID, int index=0)
Récupère un pointeur vers le composant associé à l'entityID.
Definition componentstorage.hpp:82
T & GetRef(EntityID entityID, int index=0)
Renvoie une référence vers le composant associé à l'entityID.
Definition componentstorage.hpp:104
void Clear() override
Nettoye le stockage de composants.
Definition componentstorage.hpp:69
std::vector< T * > GetMany(EntityID entityID)
Récupère un tableau de composants du type donné, associé à l'entityID.
Definition componentstorage.hpp:93
void Remove(EntityID entityID) override
Supprime le composant associé à l'entityID donné
Definition componentstorage.hpp:61
Définit des types de données utilisés dans le moteur.
Definition component.hpp:11
std::uint32_t EntityID
Définition de type pour mieux identifier les EntityID.
Definition defs.hpp:13
Interface pour le système de stockage de composants.
Definition componentstorage.hpp:17
virtual ~IComponentStorage()=default
virtual void Clear()=0
Nettoye un stockage de composant tout entier, sans distinction d'entityID.
virtual void Remove(EntityID id)=0
Interface pour supprimer un composant attaché à l'entité avec l'id donné