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 /src/entity/Entity.cpp | |
parent | 12c36c61c3f8d19c44cb2e5ffdf3ed812a0390d2 (diff) |
Diffstat (limited to 'src/entity/Entity.cpp')
-rw-r--r-- | src/entity/Entity.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/entity/Entity.cpp b/src/entity/Entity.cpp new file mode 100644 index 0000000..57f6110 --- /dev/null +++ b/src/entity/Entity.cpp @@ -0,0 +1,62 @@ +#include "../../include/entity/Entity.hpp" +#include <assert.h> + +namespace amalgine { + EntityWorld::EntityWorld() { + for(int i = 0; i < NUM_ENTITIES; ++i) { + mask[i] = ENTITY_MASK_NONE; + transformation[i] = glm::mat4(1.0f); + velocity[i] = glm::vec3(0.0f, 0.0f, 0.0f); + mesh_instance[i] = MeshInstance(); + } + } + + Entity EntityWorld::create_entity(EntityMask type) { + for(int i = 0; i < NUM_ENTITIES; ++i) { + if(mask[i] == ENTITY_MASK_NONE) { + mask[i] = type; + return i; + } + } + return INVALID_ENTITY; + } + + void EntityWorld::remove_entity(Entity entity) { + mask[entity] = ENTITY_MASK_NONE; + } + + glm::mat4& EntityWorld::get_transformation(Entity entity) { + assert(mask[entity] & ENTITY_MASK_TRANSFORMATION); + return transformation[entity]; + } + + glm::vec3& EntityWorld::get_velocity(Entity entity) { + assert(mask[entity] & ENTITY_MASK_VELOCITY); + return velocity[entity]; + } + + MeshInstance& EntityWorld::get_mesh_instance(Entity entity) { + assert(mask[entity] & ENTITY_MASK_MESH_COMPONENT); + return mesh_instance[entity]; + } + + void EntityWorld::update() { + const float gravity = -9.8f; + for(int i = 0; i < NUM_ENTITIES; ++i) { + velocity[i].z -= gravity; + } + + const EntityMaskType transform_velocity_mask = ENTITY_MASK_TRANSFORMATION | ENTITY_MASK_VELOCITY; + for(int i = 0; i < NUM_ENTITIES; ++i) { + if((mask[i] & transform_velocity_mask) == transform_velocity_mask) { + transformation[i][3].x += velocity[i].x; + transformation[i][3].y += velocity[i].y; + transformation[i][3].z += velocity[i].z; + } + } + + for(int i = 0; i < NUM_ENTITIES; ++i) { + mesh_instance[i].update(); + } + } +}
\ No newline at end of file |