diff options
Diffstat (limited to 'yage/entity/entity.cpp')
-rw-r--r-- | yage/entity/entity.cpp | 40 |
1 files changed, 40 insertions, 0 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 |