X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2Fblock.cpp;h=5059a999ca85d5e0010dd2f3b1a3ebe4830c8170;hb=07b8335e7bfd631e0878e183c87238812d632c56;hp=442e54f4d591a64115f0d5ec3d0768dba660045b;hpb=5998b18978bd8e7a0c9deb516474634e1d3521c9;p=blank.git diff --git a/src/world/block.cpp b/src/world/block.cpp index 442e54f..5059a99 100644 --- a/src/world/block.cpp +++ b/src/world/block.cpp @@ -11,13 +11,6 @@ namespace blank { -const NullShape BlockType::DEFAULT_SHAPE; - - -bool operator ==(const Block &a, const Block &b) { - return a.type == b.type && a.orient == b.orient; -} - std::ostream &operator <<(std::ostream &out, const Block &block) { return out << "Block(" << block.type << ", " << block.GetFace() << ", " << block.GetTurn() << ')'; } @@ -73,51 +66,73 @@ std::ostream &operator <<(std::ostream &out, const Block::Turn &turn) { } -BlockType::BlockType(bool v, const glm::vec3 &col, const Shape *s) noexcept -: shape(s) -, color(col) +BlockType::BlockType() noexcept +: shape(nullptr) +, textures() +, hsl_mod(0.0f, 1.0f, 1.0f) +, rgb_mod(1.0f, 1.0f, 1.0f) , outline_color(-1, -1, -1) , label("some block") +, place_sound(-1) +, remove_sound(-1) , id(0) , luminosity(0) -, visible(v) -, block_light(false) -, collision(false) -, collide_block(false) -, fill({ false, false, false, false, false, false }) { +, visible(true) +, block_light(true) +, collision(true) +, collide_block(true) +, generate(false) +, min_solidity(0.5f) +, mid_solidity(0.75f) +, max_solidity(1.0f) +, min_humidity(-1.0f) +, mid_humidity(0.0f) +, max_humidity(1.0f) +, min_temperature(-1.0f) +, mid_temperature(0.0f) +, max_temperature(1.0f) +, min_richness(-1.0f) +, mid_richness(0.0f) +, max_richness(1.0f) +, commonness(1.0f) { } -void BlockType::FillEntityModel( - EntityModel::Buffer &buf, - const glm::mat4 &transform, - EntityModel::Index idx_offset +void BlockType::FillEntityMesh( + EntityMesh::Buffer &buf, + const glm::mat4 &transform ) const noexcept { - shape->Vertices(buf.vertices, buf.normals, buf.indices, transform, idx_offset); - buf.colors.insert(buf.colors.end(), shape->VertexCount(), color); + if (!shape) return; + shape->Fill(buf, transform, textures); + buf.hsl_mods.insert(buf.hsl_mods.end(), shape->VertexCount(), hsl_mod); + buf.rgb_mods.insert(buf.rgb_mods.end(), shape->VertexCount(), rgb_mod); } -void BlockType::FillBlockModel( - BlockModel::Buffer &buf, +void BlockType::FillBlockMesh( + BlockMesh::Buffer &buf, const glm::mat4 &transform, - BlockModel::Index idx_offset + BlockMesh::Index idx_offset ) const noexcept { - shape->Vertices(buf.vertices, buf.indices, transform, idx_offset); - buf.colors.insert(buf.colors.end(), shape->VertexCount(), color); + if (!shape) return; + shape->Fill(buf, transform, textures, idx_offset); + buf.hsl_mods.insert(buf.hsl_mods.end(), shape->VertexCount(), hsl_mod); + buf.rgb_mods.insert(buf.rgb_mods.end(), shape->VertexCount(), rgb_mod); } -void BlockType::FillOutlineModel( - OutlineModel::Buffer &buf, - const glm::vec3 &pos_offset, - OutlineModel::Index idx_offset -) const noexcept { - shape->Outline(buf.vertices, buf.indices, pos_offset, idx_offset); +void BlockType::FillOutlineMesh(OutlineMesh::Buffer &buf) const noexcept { + if (!shape) return; + shape->Outline(buf); buf.colors.insert(buf.colors.end(), shape->OutlineCount(), outline_color); } BlockTypeRegistry::BlockTypeRegistry() { - Add(BlockType()); + BlockType air; + air.visible = false; + air.block_light = false; + air.collision = false; + air.collide_block = false; + Add(air); } Block::Type BlockTypeRegistry::Add(const BlockType &t) { @@ -155,7 +170,7 @@ const glm::mat4 Block::orient2transform[ORIENT_COUNT] = { { 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, }, // face: back, turn: right }; -const glm::tvec3 Block::face2normal[FACE_COUNT] = { +const glm::ivec3 Block::face2normal[FACE_COUNT] = { { 0, 1, 0 }, { 0, -1, 0 }, { 1, 0, 0 },