X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fchunk.hpp;h=fa19776ca60b063ee0a10aca4d2ea35d207a9c5c;hb=f577e22966a636653ca266a6e30f1834c4bb8464;hp=0b1e5bdec20f79f65971e23234a5d77e04cd2dfd;hpb=e74f1ad236429f05db90c0ace825277e2a3fbc05;p=blank.git diff --git a/src/chunk.hpp b/src/chunk.hpp index 0b1e5bd..fa19776 100644 --- a/src/chunk.hpp +++ b/src/chunk.hpp @@ -91,7 +91,6 @@ public: // check if block at given index is completely enclosed (and therefore invisible) bool Obstructed(int idx) const; - void Allocate(); void Invalidate() { dirty = true; } void SetBlock(int index, const Block &); @@ -146,8 +145,8 @@ private: private: const BlockTypeRegistry *types; Chunk *neighbor[Block::FACE_COUNT]; - std::vector blocks; - std::vector light; + Block blocks[16 * 16 * 16]; + unsigned char light[16 * 16 * 16]; BlockModel model; Pos position; bool dirty; @@ -155,20 +154,29 @@ private: }; -struct BlockLookup { +class BlockLookup { - Chunk *chunk; - Chunk::Pos pos; - const Block *result; - - // resolve chunk/position/block from oob coordinates - // result will be nullptr if unsuccessful +public: + // resolve chunk/position from oob coordinates BlockLookup(Chunk *c, const Chunk::Pos &p); - // resolve chunk/position/block from ib coordinates and direction - // result will be nullptr if unsuccessful + // resolve chunk/position from ib coordinates and direction BlockLookup(Chunk *c, const Chunk::Pos &p, Block::Face dir); + // check if lookup was successful + operator bool() const { return chunk; } + + // only valid if lookup was successful + Chunk &GetChunk() const { return *chunk; } + const Chunk::Pos &GetBlockPos() const { return pos; } + const Block &GetBlock() const { return GetChunk().BlockAt(GetBlockPos()); } + const BlockType &GetType() const { return GetChunk().Type(GetBlock()); } + int GetLight() const { return GetChunk().GetLight(GetBlockPos()); } + +private: + Chunk *chunk; + Chunk::Pos pos; + };