aboutsummaryrefslogtreecommitdiffstats
path: root/yage/entity/space.h
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2018-02-13 19:14:33 +0000
committerYann Herklotz <ymherklotz@gmail.com>2018-02-13 19:14:33 +0000
commit49af8b16ae3f9e6579656ed10f815e9c465557d0 (patch)
tree1dff4aea6a59c466ea6a6f15ad7f5e2ac69f5b37 /yage/entity/space.h
parente9bd903761605c7619a235edddf07c3a0b963968 (diff)
downloadYAGE-49af8b16ae3f9e6579656ed10f815e9c465557d0.tar.gz
YAGE-49af8b16ae3f9e6579656ed10f815e9c465557d0.zip
[entity] Starting work on entity system.
Diffstat (limited to 'yage/entity/space.h')
-rw-r--r--yage/entity/space.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/yage/entity/space.h b/yage/entity/space.h
new file mode 100644
index 00000000..e69df37a
--- /dev/null
+++ b/yage/entity/space.h
@@ -0,0 +1,61 @@
+/** ---------------------------------------------------------------------------
+ * @file: space.h
+ *
+ * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com>
+ * MIT License, see LICENSE file for more details.
+ * ----------------------------------------------------------------------------
+ */
+
+#ifndef YAGE_ENGINE_SPACE_H
+#define YAGE_ENGINE_SPACE_H
+
+#include <vector>
+
+#include "entitymanager.h"
+
+namespace yage
+{
+
+class System;
+
+/**
+ * Space that keeps track of all the entities, componenets and runs the systems
+ * on the data to update them. There can be multiple instances of a space, which
+ * can be used, for example, for different levels in the game that can be loaded
+ * separately, or a game menu that can be loaded above the other spaces when the
+ * user presses on pause.
+ */
+class Space
+{
+public:
+ /**
+ * Default instance for a space.
+ */
+ Space();
+
+ /**
+ * Create an entity that will belong to this space, and return the handle to
+ * the user. The Entity class itself should not be visible to the user, as
+ * the user only needs to worry about the handle when referring to the
+ * Entity and changing it.
+ */
+ unsigned createEntity();
+
+private:
+ /**
+ * The subspaces of the Space that act on the data and on their respective
+ * component. These are specific to the Space, as other spaces might have
+ * different Systems and not act on the same entities.
+ */
+ std::vector<System *> systems_;
+
+ /**
+ * Manages all the entities in the system, can create them for the current
+ * space.
+ */
+ EntityManager em_;
+};
+
+} // namespace yage
+
+#endif