29 BlockID uniform = InvalidBlockID;
30 std::vector<BlockID> data;
31 std::unordered_map<glm::ivec3, BlockState> states;
32 std::unordered_map<glm::ivec3, MultiBlock> multiBlocks;
36 data(dims.x * dims.y * dims.z, 0),
39 void compress(BlockID block) {
47 data.resize(dims.x * dims.y * dims.z, uniform);
48 uniform = InvalidBlockID;
52 size_t index(
int x,
int y,
int z)
const {
return x + dims.x * (y + dims.y * z); }
53 size_t index(
const glm::ivec3& pos)
const {
return index(pos.x, pos.y, pos.z); }
57 BlockID
getBlock(
const glm::ivec3& pos)
const override final;
58 MultiBlock* getMultiBlock(
const glm::ivec3& pos)
override final;
60 void setBlock(
const glm::ivec3& pos, BlockID block)
override final;
61 void setBlock(
const glm::ivec3& pos, BlockID block,
BlockState state)
override final;
62 void setMultiBlock(
const glm::ivec3& pos,
MultiBlock&& multiBlock)
override final;
69 void setState(
const glm::ivec3& pos,
BlockState&& state)
override final;
70 void clearState(
const glm::ivec3& pos)
override final;
71 BlockState* getOrCreateState(
const glm::ivec3& pos)
override final;
73 void serialize(std::ostream& out)
const override final;
74 void deserialize(std::istream& in)
override final;