X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBlockLookup.hpp;h=3d7aa0420f442d204311086ac1025e31000697df;hb=e4a1425dccd0ba9b106e415dd02809f4308a85ee;hp=4c8b12ba41a6a50f14c4f5033b685ce42ddaeca3;hpb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;p=blank.git diff --git a/src/world/BlockLookup.hpp b/src/world/BlockLookup.hpp index 4c8b12b..3d7aa04 100644 --- a/src/world/BlockLookup.hpp +++ b/src/world/BlockLookup.hpp @@ -10,28 +10,32 @@ namespace blank { class BlockLookup { public: - // resolve chunk/position from oob coordinates - BlockLookup(Chunk *c, const Chunk::Pos &p) noexcept; + /// resolve chunk/position from oob coordinates + BlockLookup(Chunk *c, const RoughLocation::Fine &p) noexcept; - // resolve chunk/position from ib coordinates and direction - BlockLookup(Chunk *c, const Chunk::Pos &p, Block::Face dir) noexcept; + /// resolve chunk/position from ib coordinates and direction + BlockLookup(Chunk *c, const RoughLocation::Fine &p, Block::Face dir) noexcept; - // check if lookup was successful + /// check if lookup was successful operator bool() const { return chunk; } // only valid if lookup was successful Chunk &GetChunk() const noexcept { return *chunk; } - const Chunk::Pos &GetBlockPos() const noexcept { return pos; } + const RoughLocation::Fine &GetBlockPos() const noexcept { return pos; } + int GetBlockIndex() const noexcept { return Chunk::ToIndex(pos); } + ExactLocation::Fine GetBlockCoords() const noexcept { return Chunk::ToCoords(pos); } const Block &GetBlock() const noexcept { return GetChunk().BlockAt(GetBlockPos()); } const BlockType &GetType() const noexcept { return GetChunk().Type(GetBlock()); } int GetLight() const noexcept { return GetChunk().GetLight(GetBlockPos()); } + void SetBlock(const Block &b) noexcept { GetChunk().SetBlock(GetBlockPos(), b); } + // traverse in given direction BlockLookup Next(Block::Face f) const { return BlockLookup(chunk, pos, f); } private: Chunk *chunk; - Chunk::Pos pos; + RoughLocation::Fine pos; };