diff options
Diffstat (limited to 'yage/entity/entity.cpp')
-rw-r--r-- | yage/entity/entity.cpp | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/yage/entity/entity.cpp b/yage/entity/entity.cpp index 1a2b16ad..25e8e2d0 100644 --- a/yage/entity/entity.cpp +++ b/yage/entity/entity.cpp @@ -1,42 +1,51 @@ -/** --------------------------------------------------------------------------- - * -*- c++ -*- - * @file: entity.cpp - * - * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> - * MIT License, see LICENSE file for more details. - * ---------------------------------------------------------------------------- - */ - #include "entity.h" +#include "component.h" + #include <algorithm> namespace yage { -BaseComponent::Group BaseComponent::group_id_counter_ = 0; +Entity EntityManager::create_entity() +{ + Entity entity = update_next_entity(); + component_masks_.push_back(ComponentMask(0)); + return entity; +} -EntityManager::EntityManager(Space *space) : space_(space) {} +EntityManager &EntityManager::delete_entity(Entity entity) +{ + deleted_.push_back(entity); + return *this; +} -EntityManager::EntityManager(Space *space, std::size_t n) : space_(space) +bool EntityManager::is_valid(Entity entity) const { - entities_.reserve(n); + auto it = std::find(deleted_.begin(), deleted_.end(), entity); + if (it == deleted_.end()) { + return true; + } + return false; } -Entity EntityManager::createEntity() +EntityManager &EntityManager::add_component(Entity entity, + BaseComponent *component) { - Entity entity = next_entity_++; - entities_.push_back(entity); - return entity; + auto id = component->getGroup(); + component_masks_[entity] = + component_masks_[entity] | ComponentMask(1 << id); + return *this; } -void EntityManager::deleteEntity(Entity entity) +Entity EntityManager::update_next_entity() { - auto index = std::find_if(entities_.begin(), entities_.end(), - [&](Entity &value) { return value == entity; }); - if (index != entities_.end()) { - entities_.erase(index); + if (deleted_.empty()) { + return next_entity_++; } + Entity ent = deleted_.back(); + deleted_.pop_back(); + return ent; } } // namespace yage |