From aaf7c1662abb78228b774f728061b092e4467b07 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Wed, 20 Jun 2018 23:20:05 +0100 Subject: Adding entity implementation and changing API --- yage/entity/entity.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ yage/entity/entity.h | 14 +++++++++++--- 2 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 yage/entity/entity.cpp diff --git a/yage/entity/entity.cpp b/yage/entity/entity.cpp new file mode 100644 index 00000000..050514c3 --- /dev/null +++ b/yage/entity/entity.cpp @@ -0,0 +1,40 @@ +#include "entity.h" + +#include + +namespace yage +{ + +Entity EntityManager::create_entity() +{ + Entity entity = update_next_entity(); + component_masks_.push_back(ComponentMask(0)); + return entity; +} + +EntityManager &EntityManager::delete_entity(Entity entity) +{ + deleted_.push_back(entity); + return *this; +} + +bool EntityManager::is_valid(Entity entity) const +{ + auto it = std::find(deleted_.begin(), deleted_.end(), entity); + if (it == deleted_.end()) { + return true; + } + return false; +} + +Entity EntityManager::update_next_entity() +{ + if (deleted_.empty()) { + return ++next_entity_; + } + next_entity_ = deleted_.back(); + deleted_.pop_back(); + return next_entity_; +} + +} // namespace yage diff --git a/yage/entity/entity.h b/yage/entity/entity.h index 01a47f5c..d9a221b9 100644 --- a/yage/entity/entity.h +++ b/yage/entity/entity.h @@ -1,6 +1,8 @@ #include #include +namespace yage { + /** * The entity is currently just an unsigned integer, which may change to a * class in the future. @@ -38,13 +40,19 @@ class ComponentGroup; class EntityManager { public: - Entity createEntity(); - EntityManager &deleteEntity(Entity entity); - void addComponent(Entity entity, BaseComponent *component); + Entity create_entity(); + EntityManager &delete_entity(Entity entity); + bool is_valid(Entity entity) const; + void add_component(Entity entity, BaseComponent *component); private: + Entity update_next_entity(); + Entity next_entity_; std::vector component_group_; std::vector component_masks_; + std::vector deleted_; }; + +} // namespace yage -- cgit