1
0
Fork 0
Univerxel/src/core/world/Chunk.cpp

39 lines
1.0 KiB
C++

#include "Chunk.hpp"
#include <iostream>
#include "../geometry/math.hpp"
using namespace world;
Chunk::Chunk(std::istream& str) {
voxels.resize(CHUNK_SIZE);
if constexpr(RLE) {
uint16_t i = 0;
while(!str.eof()) {
uint16_t count;
Voxel voxel;
str.read(reinterpret_cast<char *>(&count), sizeof(count));
str.read(reinterpret_cast<char *>(&voxel), sizeof(voxel));
str.peek();
for (; count > 0; count--) {
voxels[i] = voxel;
i++;
}
}
assert((i == 1 || i == CHUNK_SIZE) && "Mismatch data length");
if (i == 1) {
voxels.resize(1);
voxels.shrink_to_fit();
}
} else {
for(auto& voxel: voxels) {
str.read(reinterpret_cast<char *>(&voxel), sizeof(voxel));
}
}
}
Chunk::Chunk(Voxel v): voxels({v}) { }
Chunk::~Chunk() { }
const Voxel &Chunk::getAt(const chunk_voxel_pos &pos) const {
return get(glm::toIdx(pos));
}