This commit is contained in:
Ben Kyd
2019-10-18 17:07:31 +01:00
parent 5e13de6a3e
commit 2b987803b6
4 changed files with 38 additions and 32 deletions

View File

@@ -17,15 +17,15 @@ Chunk::Chunk(int x, int z) {
for (int z = 0; z < CHUNK_DEPTH; z++) { for (int z = 0; z < CHUNK_DEPTH; z++) {
// Grass on the top layer // Grass on the top layer
if (y == CHUNK_HEIGHT - 1) { // if (y == CHUNK_HEIGHT - 1) {
Voxels.push_back((uint8_t)EBlockType::Grass); Voxels.push_back((uint8_t)EBlockType::Grass);
} else { // } else {
Voxels.push_back((uint8_t)EBlockType::Dirt); // Voxels.push_back((uint8_t)EBlockType::Dirt);
} // }
} }

View File

@@ -1,6 +1,7 @@
#include "voxel.hpp" #include "voxel.hpp"
#include <iostream> #include <iostream>
#include <memory>
#include "shader.hpp" #include "shader.hpp"
#include "camera.hpp" #include "camera.hpp"
@@ -87,10 +88,14 @@ void Voxel::AddFace(EFaceType::Face face) {
std::cout << "Voxel ID " << (int)Block << std::endl; std::cout << "Voxel ID " << (int)Block << std::endl;
CBlockEntry block = BlockDictionary.BlockEntries[Block]; std::shared_ptr<CBlockEntry> block = BlockDictionary.BlockEntries[Block];
std::cout << "Block ID " << (int)block.ID << std::endl;
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::cout << "Texture ID " << (int)tex << std::endl;
std::vector<glm::vec3> uvws; std::vector<glm::vec3> uvws;
@@ -103,7 +108,6 @@ void Voxel::AddFace(EFaceType::Face face) {
m_uvs.insert(m_uvs.end(), uvws.begin(), uvws.end()); m_uvs.insert(m_uvs.end(), uvws.begin(), uvws.end());
} }
void Voxel::GetMesh(std::vector<glm::vec3>& verts, std::vector<glm::vec3>& uvs) { void Voxel::GetMesh(std::vector<glm::vec3>& verts, std::vector<glm::vec3>& uvs) {

View File

@@ -6,27 +6,28 @@
void CBlockDictionary::Build() { void CBlockDictionary::Build() {
registerTexture("dirt.png"); RegisterTexture("dirt.png");
registerTexture("grass_side.png"); RegisterTexture("grass_side.png");
registerTexture("grass_top.png"); RegisterTexture("grass_top.png");
// Texture winding order - top, bottom, left, right, front, back // 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::Air, { });
registerBlock(EBlockType::Dirt, { EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt }); 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::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); Textures.push_back(texture);
} }
void CBlockDictionary::registerBlock(EBlockType::Block block, std::vector<uint16_t> faceTextures) { void CBlockDictionary::RegisterBlock(uint8_t block, std::vector<uint16_t> faceTextures) {
CBlockEntry entry = { block, faceTextures }; std::cout << "Block Entries Size " << BlockEntries.size() << std::endl;
BlockEntries[block] = std::make_shared<CBlockEntry>((uint8_t)block, faceTextures);
BlockEntries[(uint8_t)block] = entry;
} }

View File

@@ -8,9 +8,9 @@ namespace EBlockType {
enum Block : uint8_t { enum Block : uint8_t {
Air = 0, Air = 0,
Dirt, Dirt = 1,
Grass Grass = 2
}; };
@@ -20,19 +20,22 @@ namespace EFaceTexture {
enum Texture : uint16_t { enum Texture : uint16_t {
Air = 0, Dirt = 0,
Dirt, GrassSide = 1,
GrassSide, Grass = 2
Grass
}; };
} }
// Texture winding order - top, bottom, left, right, front, back
class CBlockEntry { class CBlockEntry {
public: public:
CBlockEntry(uint8_t id, std::vector<uint16_t> faceTextures)
: ID(id), FaceTextures(faceTextures) { }
uint8_t ID; uint8_t ID;
// Texture winding order - top, bottom, left, right, front, back
std::vector<uint16_t> FaceTextures; std::vector<uint16_t> FaceTextures;
}; };
@@ -52,14 +55,12 @@ public:
// Only supports up to 255 blocs, 0 being air // Only supports up to 255 blocs, 0 being air
// word stores vectors of chunks which are 16x16x256 // word stores vectors of chunks which are 16x16x256
// vectors of uint8_t which reference the block dictionary // vectors of uint8_t which reference the block dictionary
std::map<uint8_t, CBlockEntry> BlockEntries; std::map<uint8_t, std::shared_ptr<CBlockEntry>> BlockEntries;
private:
// Expects textures to be inserted in order, 0-... // 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<uint16_t> faceTextures); void RegisterBlock(uint8_t block, std::vector<uint16_t> faceTextures);
}; };