diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/entity/Entity.hpp | 46 | ||||
-rw-r--r-- | include/entity/MeshInstance.hpp | 8 |
2 files changed, 54 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 diff --git a/include/entity/MeshInstance.hpp b/include/entity/MeshInstance.hpp new file mode 100644 index 0000000..004c1c7 --- /dev/null +++ b/include/entity/MeshInstance.hpp @@ -0,0 +1,8 @@ +#pragma once + +namespace amalgine { + class MeshInstance { + public: + void update(); + }; +}
\ No newline at end of file |