aboutsummaryrefslogtreecommitdiff
path: root/src/entity/Entity.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/entity/Entity.cpp')
-rw-r--r--src/entity/Entity.cpp62
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