X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBlockType.hpp;h=ef328d4d926feb353cf76df65810274c99939a73;hb=b94a7dc7daad9ae9be90a39d723e332dae375325;hp=b50169c53ee72ac033e5c1eac09b1eabd551a9cd;hpb=75172fd735e34082c34b47ae7c194445b53038d9;p=blank.git diff --git a/src/world/BlockType.hpp b/src/world/BlockType.hpp index b50169c..ef328d4 100644 --- a/src/world/BlockType.hpp +++ b/src/world/BlockType.hpp @@ -2,6 +2,7 @@ #define BLANK_WORLD_BLOCKTYPE_HPP_ #include "Block.hpp" +#include "BlockGravity.hpp" #include "../graphics/BlockMesh.hpp" #include "../graphics/EntityMesh.hpp" #include "../graphics/PrimitiveMesh.hpp" @@ -13,6 +14,10 @@ namespace blank { +class ResourceIndex; +class ShapeRegistry; +class TokenStreamReader; + /// single 1x1x1 cube /// attributes of a type of block struct BlockType { @@ -23,6 +28,12 @@ struct BlockType { glm::vec3 rgb_mod; glm::vec3 outline_color; + /// gravity configuration or null if not emitting gravity + std::unique_ptr gravity; + + /// a string identifying in contexts where numbers just won't do + /// must be unique within any given set + std::string name; /// a string to display to the user std::string label; @@ -66,6 +77,16 @@ struct BlockType { BlockType() noexcept; + /// clone values of given type + /// this copies everything except for ID, name, label, and gravity + void Copy(const BlockType &) noexcept; + + void Read( + TokenStreamReader &in, + ResourceIndex &snd_index, + ResourceIndex &tex_index, + const ShapeRegistry &shapes); + bool FaceFilled(const Block &block, Block::Face face) const noexcept { return shape && shape->FaceFilled(block.OrientedFace(face)); }