X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fblock.cpp;h=fa39790ee35e0e396224d12581ed102baba1083e;hb=b4995967309bf5570161db2287e27b84ca94ab9a;hp=b0de21aff95bf52d1538ec703b4cf55d6fc82f19;hpb=9c1f7b20394808f7ec7a6cadd9e0dd665c6f6bd5;p=blank.git diff --git a/src/block.cpp b/src/block.cpp index b0de21a..fa39790 100644 --- a/src/block.cpp +++ b/src/block.cpp @@ -1,17 +1,68 @@ #include "block.hpp" +#include "geometry.hpp" + +#include +#include + namespace blank { +namespace { + +const glm::mat4 block_transforms[Block::DIR_COUNT * Block::ROT_COUNT] = { + glm::mat4(1.0f), + glm::eulerAngleY(PI_0p5), + glm::eulerAngleY(PI), + glm::eulerAngleY(PI_1p5), + glm::eulerAngleX(PI), + glm::eulerAngleYX(PI_0p5, PI), + glm::eulerAngleYX(PI, PI), + glm::eulerAngleYX(PI_1p5, PI), + glm::eulerAngleZ(PI_0p5), + glm::eulerAngleYZ(PI_0p5, PI_0p5), + glm::eulerAngleYZ(PI, PI_0p5), + glm::eulerAngleYZ(PI_1p5, PI_0p5), + glm::eulerAngleZ(PI_1p5), + glm::eulerAngleYZ(PI_0p5, PI_1p5), + glm::eulerAngleYZ(PI, PI_1p5), + glm::eulerAngleYZ(PI_1p5, PI_1p5), + glm::eulerAngleX(PI_0p5), + glm::eulerAngleYX(PI_0p5, PI_0p5), + glm::eulerAngleYX(PI, PI_0p5), + glm::eulerAngleYX(PI_1p5, PI_0p5), + glm::eulerAngleX(PI_1p5), + glm::eulerAngleYX(PI_0p5, PI_1p5), + glm::eulerAngleYX(PI, PI_1p5), + glm::eulerAngleYX(PI_1p5, PI_1p5), +}; + +} + +const glm::mat4 &Block::Transform() const { + return block_transforms[orient]; +} + + const NullShape BlockType::DEFAULT_SHAPE; +BlockType::BlockType(bool v, const glm::vec3 &col, const Shape *s) +: shape(s) +, color(col) +, outline_color(-1, -1, -1) +, id(0) +, visible(v) +, fill({ false, false, false, false, false, false }) { + +} + void BlockType::FillModel( - Model &model, - const glm::vec3 &pos_offset, + Model::Buffer &buf, + const glm::mat4 &transform, Model::Index idx_offset ) const { - shape->Vertices(model.vertices, model.normals, model.indices, pos_offset, idx_offset); - model.colors.insert(model.colors.end(), shape->VertexCount(), color); + shape->Vertices(buf.vertices, buf.normals, buf.indices, transform, idx_offset); + buf.colors.insert(buf.colors.end(), shape->VertexCount(), color); } void BlockType::FillOutlineModel(