diff options
-rw-r--r-- | yage/entity/component.cpp | 10 | ||||
-rw-r--r-- | yage/entity/component.h | 36 |
2 files changed, 39 insertions, 7 deletions
diff --git a/yage/entity/component.cpp b/yage/entity/component.cpp index 83fe4424..eba2ad0a 100644 --- a/yage/entity/component.cpp +++ b/yage/entity/component.cpp @@ -1,6 +1,8 @@ #include "component.h" -GroupId BaseComponent::getGroup() { - static GroupId group_id = group_id_counter_++; - return group_id; -} +namespace yage +{ + +GroupId BaseComponent::group_id_counter_ = 0; + +} // namespace yage 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 |