]> git.localhorst.tv Git - blank.git/blobdiff - src/entity.cpp
minor optimizations in chunk
[blank.git] / src / entity.cpp
index b24835030884be373db2d3a9adfcaeea2d8f42b5..275c8467345dbd0f72eba5718b8456e1cfdcaa4d 100644 (file)
@@ -1,6 +1,7 @@
 #include "entity.hpp"
 
-#include "chunk.hpp"
+#include "geometry.hpp"
+#include "shape.hpp"
 
 #include <cmath>
 #include <glm/gtx/transform.hpp>
@@ -13,7 +14,7 @@ blank::Model::Buffer model_buffer;
 
 namespace blank {
 
-Entity::Entity()
+Entity::Entity() noexcept
 : shape(nullptr)
 , model()
 , velocity(0, 0, 0)
@@ -25,7 +26,7 @@ Entity::Entity()
 }
 
 
-void Entity::SetShape(Shape *s, const glm::vec3 &color) {
+void Entity::SetShape(const Shape *s, const glm::vec3 &color) {
        shape = s;
        model_buffer.Clear();
        shape->Vertices(model_buffer.vertices, model_buffer.normals, model_buffer.indices);
@@ -33,80 +34,80 @@ void Entity::SetShape(Shape *s, const glm::vec3 &color) {
        model.Update(model_buffer);
 }
 
-void Entity::SetShapeless() {
+void Entity::SetShapeless() noexcept {
        shape = nullptr;
 }
 
 
-void Entity::Velocity(const glm::vec3 &vel) {
+void Entity::Velocity(const glm::vec3 &vel) noexcept {
        velocity = vel;
 }
 
-void Entity::Position(const Block::Pos &pos) {
+void Entity::Position(const Block::Pos &pos) noexcept {
        position = pos;
-       while (position.x >= Chunk::Width()) {
-               position.x -= Chunk::Width();
+       while (position.x >= Chunk::width) {
+               position.x -= Chunk::width;
                ++chunk.x;
        }
        while (position.x < 0) {
-               position.x += Chunk::Width();
+               position.x += Chunk::width;
                --chunk.x;
        }
-       while (position.y >= Chunk::Height()) {
-               position.y -= Chunk::Height();
+       while (position.y >= Chunk::height) {
+               position.y -= Chunk::height;
                ++chunk.y;
        }
        while (position.y < 0) {
-               position.y += Chunk::Height();
+               position.y += Chunk::height;
                --chunk.y;
        }
-       while (position.z >= Chunk::Depth()) {
-               position.z -= Chunk::Depth();
+       while (position.z >= Chunk::depth) {
+               position.z -= Chunk::depth;
                ++chunk.z;
        }
        while (position.z < 0) {
-               position.z += Chunk::Depth();
+               position.z += Chunk::depth;
                --chunk.z;
        }
 }
 
-void Entity::Move(const glm::vec3 &delta) {
+void Entity::Move(const glm::vec3 &delta) noexcept {
        Position(position + delta);
 }
 
-void Entity::AngularVelocity(const glm::quat &v) {
+void Entity::AngularVelocity(const glm::quat &v) noexcept {
        angular_velocity = v;
 }
 
-void Entity::Rotation(const glm::mat4 &rot) {
+void Entity::Rotation(const glm::mat4 &rot) noexcept {
        rotation = rot;
 }
 
-void Entity::Rotate(const glm::quat &delta) {
+void Entity::Rotate(const glm::quat &delta) noexcept {
        Rotation(rotation * glm::mat4_cast(delta));
 }
 
-glm::mat4 Entity::Transform(const Chunk::Pos &chunk_offset) const {
+glm::mat4 Entity::Transform(const Chunk::Pos &chunk_offset) const noexcept {
        const glm::vec3 chunk_pos = (chunk - chunk_offset) * Chunk::Extent();
        return glm::translate(position + chunk_pos) * rotation;
 }
 
-Ray Entity::Aim(const Chunk::Pos &chunk_offset) const {
+Ray Entity::Aim(const Chunk::Pos &chunk_offset) const noexcept {
        glm::mat4 transform = Transform(chunk_offset);
-       glm::vec4 from = transform * glm::vec4(0.0f, 0.0f, 1.0f, 1.0f);
+       glm::vec4 from = transform * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
        from /= from.w;
        glm::vec4 to = transform * glm::vec4(0.0f, 0.0f, -1.0f, 1.0f);
        to /= to.w;
        return Ray{ glm::vec3(from), glm::normalize(glm::vec3(to - from)) };
 }
 
-void Entity::Update(int dt) {
+void Entity::Update(int dt) noexcept {
        Move(velocity * float(dt));
        Rotate(angular_velocity * float(dt));
 }
 
 
-void Entity::Draw() {
+void Entity::Draw() noexcept {
        model.Draw();
 }