From a62fbea8d40f623ffcd60eced63f295cd55db084 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Wed, 10 Jan 2018 12:02:04 +0000 Subject: [Engine] Adding initial components for an ECS. --- yage/engine/entitymanager.h | 83 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 yage/engine/entitymanager.h (limited to 'yage/engine/entitymanager.h') diff --git a/yage/engine/entitymanager.h b/yage/engine/entitymanager.h new file mode 100644 index 00000000..da125d94 --- /dev/null +++ b/yage/engine/entitymanager.h @@ -0,0 +1,83 @@ +/** --------------------------------------------------------------------------- + * @file: entitymanager.h + * + * Copyright (c) 2017 Yann Herklotz Grave + * MIT License, see LICENSE file for more details. + * ---------------------------------------------------------------------------- + */ + +#ifndef YAGE_ENGINE_ENTITYMANAGER_H +#define YAGE_ENGINE_ENTITYMANAGER_H + +#include "entity.h" + +#include + +namespace yage +{ + +class Space; + +/** + * Manages entities in a space. + */ +class EntityManager +{ +public: + /** + * Default instance of an EntityManager. + */ + EntityManager() = default; + + /** + * Creates an instance of the entity manager, which refers back to the space + * it was created in and belongs to. + * + * @param space Current space that the EntityManager belongs to. + */ + EntityManager(Space *space); + + /** + * Creates an instance of the entitiy manager with an initial size. + * + * @param space Current space that the EntityManager belongs to. + * @param n Initial size of the EntityManager. + */ + EntityManager(Space *space, std::size_t n); + + /** + * Creates an Entity and returns the handle to the entity, which can then be + * used by the user to do operations on it. + * + * @return The handle to the entity that was created in the space. + */ + unsigned createEntity(); + + /** + * Creates an Entity and returns it. + * + * @return The entity that was created by the entity manager in the current + * space. + */ + Entity createEntityInstance(); + +private: + /** + * The next available handle to give to the user. + */ + unsigned next_handle_; + + /** + * The space that the entity manager belongs to. + */ + Space *space_; + + /** + * The entities in the current space. + */ + std::vector entities_; +}; + +} // namespace yage + +#endif -- cgit