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; }
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 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()); }
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()); }
// traverse in given direction
BlockLookup Next(Block::Face f) const { return BlockLookup(chunk, pos, f); }
// traverse in given direction
BlockLookup Next(Block::Face f) const { return BlockLookup(chunk, pos, f); }