diff options
author | dec05eba <dec05eba@protonmail.com> | 2020-03-11 01:52:27 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-11-18 15:22:10 +0100 |
commit | 1156c0f58b01ff080b9d9ede15b449a845df6654 (patch) | |
tree | 426c14ffd9e6aac2d37af58211e78b1fae8d6fe6 /include/entity/Entity.hpp | |
parent | 12c36c61c3f8d19c44cb2e5ffdf3ed812a0390d2 (diff) |
Diffstat (limited to 'include/entity/Entity.hpp')
-rw-r--r-- | include/entity/Entity.hpp | 46 |
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 |