X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fchunk.hpp;h=28ba4e357aa6a87137b62ecfdc61b73a6205f17a;hb=7caa2326d25d4fc5ba98318dfccb508bb3e16820;hp=d89fefc2edb79e1e9d9dc14533a6a6afba734232;hpb=1a7bbd64b1fef1f4e2f9303f820d6f3ce76cebf1;p=blank.git diff --git a/src/chunk.hpp b/src/chunk.hpp index d89fefc..28ba4e3 100644 --- a/src/chunk.hpp +++ b/src/chunk.hpp @@ -15,7 +15,10 @@ namespace blank { class Chunk { public: - Chunk(); + using Pos = glm::tvec3; + +public: + explicit Chunk(const BlockTypeRegistry &); Chunk(Chunk &&); Chunk &operator =(Chunk &&); @@ -23,7 +26,7 @@ public: static constexpr int Width() { return 16; } static constexpr int Height() { return 16; } static constexpr int Depth() { return 16; } - static glm::tvec3 Extent() { return { Width(), Height(), Depth() }; } + static Pos Extent() { return { Width(), Height(), Depth() }; } static constexpr int Size() { return Width() * Height() * Depth(); } static AABB Bounds() { return AABB{ { 0, 0, 0 }, Extent() }; } @@ -40,11 +43,11 @@ public: static constexpr bool InBounds(int idx) { return idx >= 0 && idx < Size(); } - static glm::vec3 ToCoords(int idx) { - return glm::vec3( - 0.5f + idx % Width(), - 0.5f + (idx / Width()) % Height(), - 0.5f + idx / (Width() * Height()) + static Block::Pos ToCoords(int idx) { + return Block::Pos( + 0.5f + (idx % Width()), + 0.5f + ((idx / Width()) % Height()), + 0.5f + (idx / (Width() * Height())) ); } @@ -53,8 +56,10 @@ public: Block &BlockAt(int index) { return blocks[index]; } const Block &BlockAt(int index) const { return blocks[index]; } - Block &BlockAt(const glm::vec3 &pos) { return BlockAt(ToIndex(pos)); } - const Block &BlockAt(const glm::vec3 &pos) const { return BlockAt(ToIndex(pos)); } + Block &BlockAt(const Block::Pos &pos) { return BlockAt(ToIndex(pos)); } + const Block &BlockAt(const Block::Pos &pos) const { return BlockAt(ToIndex(pos)); } + + const BlockType &Type(const Block &b) const { return *types->Get(b.type); } bool Intersection( const Ray &, @@ -63,9 +68,9 @@ public: float *dist = nullptr, glm::vec3 *normal = nullptr) const; - void Position(const glm::tvec3 &); - const glm::tvec3 &Position() const { return position; } - glm::mat4 Transform(const glm::tvec3 &offset) const; + void Position(const Pos &); + const Pos &Position() const { return position; } + glm::mat4 Transform(const Pos &offset) const; void Draw(); @@ -74,9 +79,10 @@ private: void Update(); private: + const BlockTypeRegistry *types; std::vector blocks; Model model; - glm::tvec3 position; + Pos position; bool dirty; };