diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2018-06-20 23:20:05 +0100 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2018-06-20 23:20:05 +0100 |
commit | aaf7c1662abb78228b774f728061b092e4467b07 (patch) | |
tree | 6873c25e5a6b299c326454046fa3c2d533d7c39d | |
parent | 32f9959d93322b5e26ef9843672a77928bf9c6bf (diff) | |
download | YAGE-aaf7c1662abb78228b774f728061b092e4467b07.tar.gz YAGE-aaf7c1662abb78228b774f728061b092e4467b07.zip |
Adding entity implementation and changing API
-rw-r--r-- | yage/entity/entity.cpp | 40 | ||||
-rw-r--r-- | yage/entity/entity.h | 14 |
2 files changed, 51 insertions, 3 deletions
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 <algorithm> + +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 <bitset> #include <vector> +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<BaseComponentGroup *> component_group_; std::vector<ComponentMask> component_masks_; + std::vector<Entity> deleted_; }; + +} // namespace yage |