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++) {
// 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);
}
// }
}

View File

@@ -1,6 +1,7 @@
#include "voxel.hpp"
#include <iostream>
#include <memory>
#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<CBlockEntry> 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<glm::vec3> 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<glm::vec3>& verts, std::vector<glm::vec3>& uvs) {

View File

@@ -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<uint16_t> faceTextures) {
void CBlockDictionary::RegisterBlock(uint8_t block, std::vector<uint16_t> faceTextures) {
CBlockEntry entry = { block, faceTextures };
BlockEntries[(uint8_t)block] = entry;
std::cout << "Block Entries Size " << BlockEntries.size() << std::endl;
BlockEntries[block] = std::make_shared<CBlockEntry>((uint8_t)block, faceTextures);
}

View File

@@ -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<uint16_t> faceTextures)
: ID(id), FaceTextures(faceTextures) { }
uint8_t ID;
// Texture winding order - top, bottom, left, right, front, back
std::vector<uint16_t> 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<uint8_t, CBlockEntry> BlockEntries;
private:
std::map<uint8_t, std::shared_ptr<CBlockEntry>> 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<uint16_t> faceTextures);
void RegisterBlock(uint8_t block, std::vector<uint16_t> faceTextures);
};