X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fentity.cpp;fp=src%2Fentity.cpp;h=0000000000000000000000000000000000000000;hb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;hp=275c8467345dbd0f72eba5718b8456e1cfdcaa4d;hpb=e53a0e2e711a7d8bd9b0ddacd1360aa14370643f;p=blank.git diff --git a/src/entity.cpp b/src/entity.cpp deleted file mode 100644 index 275c846..0000000 --- a/src/entity.cpp +++ /dev/null @@ -1,114 +0,0 @@ -#include "entity.hpp" - -#include "geometry.hpp" -#include "shape.hpp" - -#include -#include - -namespace { - -blank::Model::Buffer model_buffer; - -} - -namespace blank { - -Entity::Entity() noexcept -: shape(nullptr) -, model() -, velocity(0, 0, 0) -, position(0, 0, 0) -, chunk(0, 0, 0) -, angular_velocity(1.0f, 0.0f, 0.0f, 0.0f) -, rotation(1.0f) { - -} - - -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); - model_buffer.colors.resize(shape->VertexCount(), color); - model.Update(model_buffer); -} - -void Entity::SetShapeless() noexcept { - shape = nullptr; -} - - -void Entity::Velocity(const glm::vec3 &vel) noexcept { - velocity = vel; -} - -void Entity::Position(const Block::Pos &pos) noexcept { - position = pos; - while (position.x >= Chunk::width) { - position.x -= Chunk::width; - ++chunk.x; - } - while (position.x < 0) { - position.x += Chunk::width; - --chunk.x; - } - while (position.y >= Chunk::height) { - position.y -= Chunk::height; - ++chunk.y; - } - while (position.y < 0) { - position.y += Chunk::height; - --chunk.y; - } - while (position.z >= Chunk::depth) { - position.z -= Chunk::depth; - ++chunk.z; - } - while (position.z < 0) { - position.z += Chunk::depth; - --chunk.z; - } -} - -void Entity::Move(const glm::vec3 &delta) noexcept { - Position(position + delta); -} - -void Entity::AngularVelocity(const glm::quat &v) noexcept { - angular_velocity = v; -} - -void Entity::Rotation(const glm::mat4 &rot) noexcept { - rotation = rot; -} - -void Entity::Rotate(const glm::quat &delta) noexcept { - Rotation(rotation * glm::mat4_cast(delta)); -} - -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 noexcept { - glm::mat4 transform = Transform(chunk_offset); - 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) noexcept { - Move(velocity * float(dt)); - Rotate(angular_velocity * float(dt)); -} - - -void Entity::Draw() noexcept { - model.Draw(); -} - -}