-const BlockType BlockType::DEFAULT;
-
-void BlockType::FillVBO(
- const glm::vec3 &pos,
- std::vector<glm::vec3> &vertices,
- std::vector<glm::vec3> &colors,
- std::vector<glm::vec3> &normals
-) const {
- vertices.emplace_back(pos.x , pos.y , pos.z + 1); // front
- vertices.emplace_back(pos.x + 1, pos.y , pos.z + 1);
- vertices.emplace_back(pos.x , pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y , pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x , pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x , pos.y , pos.z ); // back
- vertices.emplace_back(pos.x , pos.y + 1, pos.z );
- vertices.emplace_back(pos.x + 1, pos.y , pos.z );
- vertices.emplace_back(pos.x + 1, pos.y , pos.z );
- vertices.emplace_back(pos.x , pos.y + 1, pos.z );
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z );
- vertices.emplace_back(pos.x , pos.y + 1, pos.z ); // top
- vertices.emplace_back(pos.x , pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z );
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z );
- vertices.emplace_back(pos.x , pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x , pos.y , pos.z ); // bottom
- vertices.emplace_back(pos.x + 1, pos.y , pos.z );
- vertices.emplace_back(pos.x , pos.y , pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y , pos.z );
- vertices.emplace_back(pos.x + 1, pos.y , pos.z + 1);
- vertices.emplace_back(pos.x , pos.y , pos.z + 1);
- vertices.emplace_back(pos.x , pos.y , pos.z ); // left
- vertices.emplace_back(pos.x , pos.y , pos.z + 1);
- vertices.emplace_back(pos.x , pos.y + 1, pos.z );
- vertices.emplace_back(pos.x , pos.y + 1, pos.z );
- vertices.emplace_back(pos.x , pos.y , pos.z + 1);
- vertices.emplace_back(pos.x , pos.y + 1, pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y , pos.z ); // right
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z );
- vertices.emplace_back(pos.x + 1, pos.y , pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y , pos.z + 1);
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z );
- vertices.emplace_back(pos.x + 1, pos.y + 1, pos.z + 1);
-
- colors.insert(colors.end(), 6 * 6, color);
-
- normals.insert(normals.end(), 6, glm::vec3( 0.0f, 0.0f, 1.0f)); // front
- normals.insert(normals.end(), 6, glm::vec3( 0.0f, 0.0f, -1.0f)); // back
- normals.insert(normals.end(), 6, glm::vec3( 0.0f, 1.0f, 0.0f)); // top
- normals.insert(normals.end(), 6, glm::vec3( 0.0f, -1.0f, 0.0f)); // bottom
- normals.insert(normals.end(), 6, glm::vec3(-1.0f, 0.0f, 0.0f)); // left
- normals.insert(normals.end(), 6, glm::vec3( 1.0f, 0.0f, 0.0f)); // right
-}
-
-
-BlockTypeRegistry::BlockTypeRegistry() {
- Add(BlockType::DEFAULT);
-}
-
-int BlockTypeRegistry::Add(const BlockType &t) {
- int id = types.size();
- types.push_back(t);
- types.back().id = id;
- return id;
-}
-
-
-Chunk::Chunk()
-: blocks(Size())
-, model()
-, transform(1.0f)
-, dirty(false) {
-
-}
-
-Chunk::Chunk(Chunk &&other)
-: blocks(std::move(other.blocks))
-, model(std::move(other.model))
-, transform(other.transform)
-, dirty(other.dirty) {
-
-}
-
-Chunk &Chunk::operator =(Chunk &&other) {
- blocks = std::move(other.blocks);
- model = std::move(other.model);
- transform = other.transform;
- dirty = other.dirty;
- return *this;
-}
-
-
-void Chunk::Draw() {
- if (dirty) {
- Update();
+World::World()
+: blockType()
+, blockShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f }})
+, stairShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f }}, { 0.0f, 0.0f })
+, slabShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.0f, 0.5f }})
+, generate(0)
+, chunks(blockType, generate)
+, player() {
+ BlockType::Faces block_fill = { true, true, true, true, true, true };
+ BlockType::Faces slab_fill = { false, true, false, false, false, false };
+ BlockType::Faces stair_fill = { false, true, false, false, false, true };
+
+ { // white block
+ BlockType type(true, { 1.0f, 1.0f, 1.0f }, &blockShape);
+ type.block_light = true;
+ type.fill = block_fill;
+ blockType.Add(type);