aboutsummaryrefslogtreecommitdiff
path: root/include/entity/Entity.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/entity/Entity.hpp')
-rw-r--r--include/entity/Entity.hpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/include/entity/Entity.hpp b/include/entity/Entity.hpp
new file mode 100644
index 0000000..853da3a
--- /dev/null
+++ b/include/entity/Entity.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "MeshInstance.hpp"
+#include "../types.hpp"
+
+#include <glm/gtc/type_ptr.hpp>
+
+namespace amalgine {
+ const int NUM_ENTITIES = 1024; // Should always be a power a multiple of 16, to utilize compiler auto-vectorization
+
+ using Entity = int;
+ const Entity INVALID_ENTITY = -1;
+
+ using EntityMaskType = u64;
+ enum EntityMask : EntityMaskType {
+ ENTITY_MASK_NONE = 0,
+ ENTITY_MASK_TRANSFORMATION = 1 << 0,
+ ENTITY_MASK_VELOCITY = 1 << 1,
+ ENTITY_MASK_MESH_COMPONENT = 1 << 2
+ };
+
+ class EntityWorld {
+ public:
+ EntityWorld();
+
+ // Returns @INVALID_ENTITY on failure
+ // O(n)
+ Entity create_entity(EntityMask type);
+ // O(1)
+ void remove_entity(Entity entity);
+
+ glm::mat4& get_transformation(Entity entity);
+ glm::vec3& get_velocity(Entity entity);
+ MeshInstance& get_mesh_instance(Entity entity);
+
+
+ void update();
+ private:
+ EntityMask mask[NUM_ENTITIES];
+
+ // Components
+ glm::mat4 transformation[NUM_ENTITIES];
+ glm::vec3 velocity[NUM_ENTITIES];
+ MeshInstance mesh_instance[NUM_ENTITIES];
+ };
+} \ No newline at end of file