X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBlockType.hpp;h=a63507aec28ce568f991866a2abece597d2ac845;hb=e4a1425dccd0ba9b106e415dd02809f4308a85ee;hp=a27b89bfd30016c66fcf677d64c23a3e51b78693;hpb=957b1df87d9a692c517a269221da81227100240e;p=blank.git diff --git a/src/world/BlockType.hpp b/src/world/BlockType.hpp index a27b89b..a63507a 100644 --- a/src/world/BlockType.hpp +++ b/src/world/BlockType.hpp @@ -2,29 +2,41 @@ #define BLANK_WORLD_BLOCKTYPE_HPP_ #include "Block.hpp" -#include "../model/BlockModel.hpp" -#include "../model/EntityModel.hpp" -#include "../model/OutlineModel.hpp" -#include "../model/shapes.hpp" +#include "BlockGravity.hpp" +#include "../graphics/BlockMesh.hpp" +#include "../graphics/EntityMesh.hpp" +#include "../graphics/PrimitiveMesh.hpp" +#include "../model/Shape.hpp" #include +#include namespace blank { +class ResourceIndex; +class ShapeRegistry; +class TokenStreamReader; + /// single 1x1x1 cube /// attributes of a type of block struct BlockType { const Shape *shape; - float texture; + std::vector textures; glm::vec3 hsl_mod; glm::vec3 rgb_mod; glm::vec3 outline_color; + /// gravity configuration or null if not emitting gravity + std::unique_ptr gravity; + /// a string to display to the user std::string label; + int place_sound; + int remove_sound; + Block::Type id; /// light level that blocks of this type emit @@ -60,38 +72,28 @@ struct BlockType { /// commonness factor, random chance is multiplied by this float commonness; - struct Faces { - bool face[Block::FACE_COUNT]; - Faces &operator =(const Faces &other) noexcept { - for (int i = 0; i < Block::FACE_COUNT; ++i) { - face[i] = other.face[i]; - } - return *this; - } - bool operator [](Block::Face f) const noexcept { - return face[f]; - } - } fill; - BlockType() noexcept; - static const NullShape DEFAULT_SHAPE; + void Read( + TokenStreamReader &in, + ResourceIndex &snd_index, + ResourceIndex &tex_index, + const ShapeRegistry &shapes); bool FaceFilled(const Block &block, Block::Face face) const noexcept { - return fill[block.OrientedFace(face)]; + return shape && shape->FaceFilled(block.OrientedFace(face)); } - void FillEntityModel( - EntityModel::Buffer &m, - const glm::mat4 &transform = glm::mat4(1.0f), - EntityModel::Index idx_offset = 0 + void FillEntityMesh( + EntityMesh::Buffer &m, + const glm::mat4 &transform = glm::mat4(1.0f) ) const noexcept; - void FillBlockModel( - BlockModel::Buffer &m, + void FillBlockMesh( + BlockMesh::Buffer &m, const glm::mat4 &transform = glm::mat4(1.0f), - BlockModel::Index idx_offset = 0 + BlockMesh::Index idx_offset = 0 ) const noexcept; - void FillOutlineModel(OutlineModel::Buffer &m) const noexcept; + void OutlinePrimitiveMesh(PrimitiveMesh::Buffer &) const noexcept; };