]> git.localhorst.tv Git - blank.git/blobdiff - src/world/BlockType.hpp
actually load shapes
[blank.git] / src / world / BlockType.hpp
index 344bec7f6542b1c5ffa049ec08cda2b8dd8135d2..429bdaaa447dd25aeb39ba79f61aa1f5ddbc2840 100644 (file)
@@ -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 <glm/glm.hpp>
+#include <vector>
 
 
 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<float> 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;
 
 };