diff options
Diffstat (limited to 'yage/entity/component.h')
-rw-r--r-- | yage/entity/component.h | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/yage/entity/component.h b/yage/entity/component.h index 84eb8b54..a21409ff 100644 --- a/yage/entity/component.h +++ b/yage/entity/component.h @@ -1,17 +1,47 @@ +#pragma once + +#include <bitset> +#include <memory> +#include <vector> + +namespace yage +{ + +/** + * The component mask represents all the components that the entity is + * currently attached to. + */ +typedef std::bitset<64> ComponentMask; + typedef unsigned int GroupId; class BaseComponent { protected: - GroupId getGroup(); + virtual GroupId getGroup() = 0; + static GroupId group_id_counter_; private: friend class EntityManager; - - static GroupId group_id_counter_; }; template <typename T> class Component : public BaseComponent { + GroupId getGroup() override; }; + +class ComponentGroup +{ +public: + std::vector<std::unique_ptr<BaseComponent>> components_; +}; + +template <typename T> +GroupId Component<T>::getGroup() +{ + static GroupId group_id = group_id_counter_++; + return group_id; +} + +} // namespace yage |