X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBlockType.hpp;h=429bdaaa447dd25aeb39ba79f61aa1f5ddbc2840;hb=3a487f44c26f9bb9d1a1c831406b6497b2b3b425;hp=344bec7f6542b1c5ffa049ec08cda2b8dd8135d2;hpb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;p=blank.git diff --git a/src/world/BlockType.hpp b/src/world/BlockType.hpp index 344bec7..429bdaa 100644 --- a/src/world/BlockType.hpp +++ b/src/world/BlockType.hpp @@ -2,12 +2,13 @@ #define BLANK_WORLD_BLOCKTYPE_HPP_ #include "Block.hpp" -#include "../model/BlockModel.hpp" -#include "../model/Model.hpp" -#include "../model/OutlineModel.hpp" -#include "../model/shapes.hpp" +#include "../graphics/BlockMesh.hpp" +#include "../graphics/EntityMesh.hpp" +#include "../graphics/OutlineMesh.hpp" +#include "../model/bounds.hpp" #include +#include namespace blank { @@ -16,17 +17,50 @@ namespace blank { /// attributes of a type of block struct BlockType { - const Shape *shape; - glm::vec3 color; + const CollisionBounds *shape; + std::vector textures; + glm::vec3 hsl_mod; + glm::vec3 rgb_mod; glm::vec3 outline_color; + /// a string to display to the user + std::string label; + Block::Type id; + /// light level that blocks of this type emit int luminosity; + /// whether to draw bool visible; + /// if true, stops light from propagating and fixes level to luminosity bool block_light; + /// whether to check for collisions at all + bool collision; + /// if the block should be impenetrable + bool collide_block; + + // generation properties + /// whether to use this block in generation at all + bool generate; + // min/mid/max points for the respective properties + // should all be in the (-1,1) range + float min_solidity; + float mid_solidity; + float max_solidity; + float min_humidity; + float mid_humidity; + float max_humidity; + float min_temperature; + float mid_temperature; + float max_temperature; + float min_richness; + float mid_richness; + float max_richness; + /// commonness factor, random chance is multiplied by this + float commonness; + struct Faces { bool face[Block::FACE_COUNT]; Faces &operator =(const Faces &other) noexcept { @@ -40,33 +74,25 @@ struct BlockType { } } fill; - explicit BlockType( - bool v = false, - const glm::vec3 &color = { 1, 1, 1 }, - const Shape *shape = &DEFAULT_SHAPE - ) noexcept; + BlockType() noexcept; - static const NullShape DEFAULT_SHAPE; + static const NullBounds DEFAULT_SHAPE; bool FaceFilled(const Block &block, Block::Face face) const noexcept { return fill[block.OrientedFace(face)]; } - void FillModel( - Model::Buffer &m, + void FillEntityMesh( + EntityMesh::Buffer &m, const glm::mat4 &transform = glm::mat4(1.0f), - Model::Index idx_offset = 0 + EntityMesh::Index idx_offset = 0 ) 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 - ) const noexcept; - void FillOutlineModel( - OutlineModel &m, - const glm::vec3 &pos_offset = { 0, 0, 0 }, - OutlineModel::Index idx_offset = 0 + BlockMesh::Index idx_offset = 0 ) const noexcept; + void FillOutlineMesh(OutlineMesh::Buffer &m) const noexcept; };