diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2018-01-10 12:02:04 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2018-01-10 12:02:04 +0000 |
commit | a62fbea8d40f623ffcd60eced63f295cd55db084 (patch) | |
tree | 2374234d4364eb389df98fff0c4c180118331b27 /yage/engine/entitymanager.h | |
parent | cbd6bf4a695370dbfc088bbe0cd6f270e1c112a7 (diff) | |
download | YAGE-a62fbea8d40f623ffcd60eced63f295cd55db084.tar.gz YAGE-a62fbea8d40f623ffcd60eced63f295cd55db084.zip |
[Engine] Adding initial components for an ECS.
Diffstat (limited to 'yage/engine/entitymanager.h')
-rw-r--r-- | yage/engine/entitymanager.h | 83 |
1 files changed, 83 insertions, 0 deletions
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 <ymherklotz@gmail.com> + * MIT License, see LICENSE file for more details. + * ---------------------------------------------------------------------------- + */ + +#ifndef YAGE_ENGINE_ENTITYMANAGER_H +#define YAGE_ENGINE_ENTITYMANAGER_H + +#include "entity.h" + +#include <vector> + +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<Entity> entities_; +}; + +} // namespace yage + +#endif |