aboutsummaryrefslogtreecommitdiffstats
path: root/yage/entity/component.h
diff options
context:
space:
mode:
Diffstat (limited to 'yage/entity/component.h')
-rw-r--r--yage/entity/component.h36
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