|
@@ -105,7 +105,8 @@ public:
|
|
|
|
|
|
/* Components */
|
|
|
template <typename T, typename ...TArgs> void addComponent(Entity entity, TArgs&& ...args);
|
|
|
-
|
|
|
+ template <typename T> void removeComponent(Entity entity);
|
|
|
+ template <typename T> bool hasComponent(Entity entity);
|
|
|
|
|
|
/* Systems */
|
|
|
|
|
@@ -143,4 +144,21 @@ template<typename T, typename ...TArgs> void Registry::addComponent(Entity entit
|
|
|
componentPool->set(entityId, newComponent);
|
|
|
entityComponentSignatures[entityId].set(componentId);
|
|
|
}
|
|
|
+
|
|
|
+template <typename T> void Registry::removeComponent(Entity entity)
|
|
|
+{
|
|
|
+ const auto componentId = Component<T>::getId();
|
|
|
+ const auto entityId = entity.getId();
|
|
|
+
|
|
|
+ entityComponentSignatures[entityId].set(componentId, false);
|
|
|
+}
|
|
|
+
|
|
|
+template <typename T> bool Registry::hasComponent(Entity entity)
|
|
|
+{
|
|
|
+ const auto componentId = Component<T>::getId();
|
|
|
+ const auto entityId = entity.getId();
|
|
|
+
|
|
|
+ return entityComponentSignatures[entityId].test(componentId);
|
|
|
+}
|
|
|
+
|
|
|
#endif /* GAMEENGINE_ECS_H */
|