diff --git a/src/renderer/chunk.cpp b/src/renderer/chunk.cpp index 3f890a9..6f0e4ee 100644 --- a/src/renderer/chunk.cpp +++ b/src/renderer/chunk.cpp @@ -17,15 +17,15 @@ Chunk::Chunk(int x, int z) { for (int z = 0; z < CHUNK_DEPTH; z++) { // Grass on the top layer - if (y == CHUNK_HEIGHT - 1) { + // if (y == CHUNK_HEIGHT - 1) { Voxels.push_back((uint8_t)EBlockType::Grass); - } else { + // } else { - Voxels.push_back((uint8_t)EBlockType::Dirt); + // Voxels.push_back((uint8_t)EBlockType::Dirt); - } + // } } diff --git a/src/renderer/voxel.cpp b/src/renderer/voxel.cpp index 65dcc6c..dba00b5 100644 --- a/src/renderer/voxel.cpp +++ b/src/renderer/voxel.cpp @@ -1,6 +1,7 @@ #include "voxel.hpp" #include +#include #include "shader.hpp" #include "camera.hpp" @@ -87,10 +88,14 @@ void Voxel::AddFace(EFaceType::Face face) { std::cout << "Voxel ID " << (int)Block << std::endl; - CBlockEntry block = BlockDictionary.BlockEntries[Block]; - std::cout << "Block ID " << (int)block.ID << std::endl; + std::shared_ptr block = BlockDictionary.BlockEntries[Block]; + + std::cout << "Block Entries Size " << BlockDictionary.BlockEntries.size() << std::endl; + + std::cout << "Block ID " << (int)block->ID << std::endl; + std::cout << "Block Texture Count " << (int)block->FaceTextures.size() << std::endl; - uint16_t tex = block.FaceTextures[face]; + uint16_t tex = block->FaceTextures[(uint16_t)face]; std::cout << "Texture ID " << (int)tex << std::endl; std::vector uvws; @@ -103,7 +108,6 @@ void Voxel::AddFace(EFaceType::Face face) { m_uvs.insert(m_uvs.end(), uvws.begin(), uvws.end()); - } void Voxel::GetMesh(std::vector& verts, std::vector& uvs) { diff --git a/src/world/block.cpp b/src/world/block.cpp index abc7fa2..814a5ba 100644 --- a/src/world/block.cpp +++ b/src/world/block.cpp @@ -6,27 +6,28 @@ void CBlockDictionary::Build() { - registerTexture("dirt.png"); - registerTexture("grass_side.png"); - registerTexture("grass_top.png"); + RegisterTexture("dirt.png"); + RegisterTexture("grass_side.png"); + RegisterTexture("grass_top.png"); // Texture winding order - top, bottom, left, right, front, back - registerBlock(EBlockType::Air, { EFaceTexture::Air, EFaceTexture::Air, EFaceTexture::Air, EFaceTexture::Air, EFaceTexture::Air, EFaceTexture::Air }); - registerBlock(EBlockType::Dirt, { EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt }); - registerBlock(EBlockType::Grass, { EFaceTexture::Grass, EFaceTexture::Dirt, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide }); + RegisterBlock(EBlockType::Air, { }); + RegisterBlock(EBlockType::Dirt, { EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt }); + RegisterBlock(EBlockType::Grass, { EFaceTexture::Grass, EFaceTexture::Dirt, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide }); + + std::cout << "Block Entries Size " << BlockEntries.size() << std::endl; } -void CBlockDictionary::registerTexture(std::string texture) { +void CBlockDictionary::RegisterTexture(std::string texture) { Textures.push_back(texture); } -void CBlockDictionary::registerBlock(EBlockType::Block block, std::vector faceTextures) { +void CBlockDictionary::RegisterBlock(uint8_t block, std::vector faceTextures) { - CBlockEntry entry = { block, faceTextures }; - - BlockEntries[(uint8_t)block] = entry; + std::cout << "Block Entries Size " << BlockEntries.size() << std::endl; + BlockEntries[block] = std::make_shared((uint8_t)block, faceTextures); } diff --git a/src/world/block.hpp b/src/world/block.hpp index 56b02e8..f9e654b 100644 --- a/src/world/block.hpp +++ b/src/world/block.hpp @@ -8,9 +8,9 @@ namespace EBlockType { enum Block : uint8_t { - Air = 0, - Dirt, - Grass + Air = 0, + Dirt = 1, + Grass = 2 }; @@ -20,19 +20,22 @@ namespace EFaceTexture { enum Texture : uint16_t { - Air = 0, - Dirt, - GrassSide, - Grass + Dirt = 0, + GrassSide = 1, + Grass = 2 }; } +// Texture winding order - top, bottom, left, right, front, back class CBlockEntry { public: + + CBlockEntry(uint8_t id, std::vector faceTextures) + : ID(id), FaceTextures(faceTextures) { } + uint8_t ID; - // Texture winding order - top, bottom, left, right, front, back std::vector FaceTextures; }; @@ -52,14 +55,12 @@ public: // Only supports up to 255 blocs, 0 being air // word stores vectors of chunks which are 16x16x256 // vectors of uint8_t which reference the block dictionary - std::map BlockEntries; - -private: + std::map> BlockEntries; // Expects textures to be inserted in order, 0-... - void registerTexture(std::string texture); + void RegisterTexture(std::string texture); - void registerBlock(EBlockType::Block block, std::vector faceTextures); + void RegisterBlock(uint8_t block, std::vector faceTextures); };