Test monde infini
This commit is contained in:
@@ -22,7 +22,6 @@ Chunk::~Chunk() {
|
||||
std::ostringstream pos;
|
||||
pos << CHUNK_PATH << m_posX << '_' << m_posY << ".chunk";
|
||||
|
||||
|
||||
std::ofstream output(pos.str().c_str(), std::fstream::binary);
|
||||
output.write(data, sizeof(data));
|
||||
output.close();
|
||||
@@ -31,36 +30,36 @@ Chunk::~Chunk() {
|
||||
|
||||
void Chunk::RemoveBlock(int x, int y, int z, World* world) {
|
||||
m_blocks.Set(x, y, z, BTYPE_AIR);
|
||||
|
||||
CheckNeighbors(x, y, world);
|
||||
|
||||
m_isDirty = true;
|
||||
}
|
||||
|
||||
void Chunk::SetBlock(int x, int y, int z, BlockType type, World* world) {
|
||||
m_blocks.Set(x, y, z, type);
|
||||
|
||||
CheckNeighbors(x, z, world);
|
||||
|
||||
m_isDirty = true;
|
||||
}
|
||||
|
||||
BlockType Chunk::GetBlock(int x, int y, int z) { return m_blocks.Get(x, y, z); }
|
||||
|
||||
void Chunk::CheckNeighbors(int x, int z, World* world) {
|
||||
if (x == 0 && m_posX >= 0 &&
|
||||
world->ChunkAt((m_posX - 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z))
|
||||
world->ChunkAt((m_posX - 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z)->MakeDirty();
|
||||
else if (x == CHUNK_SIZE_X - 1 && m_posX < WORLD_SIZE_X &&
|
||||
world->ChunkAt((m_posX + 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z))
|
||||
world->ChunkAt((m_posX + 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z)->MakeDirty();
|
||||
int cx, cy;
|
||||
|
||||
if (z == 0 && m_posY >= 0 &&
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY - 1) * CHUNK_SIZE_Z))
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY - 1) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
else if (z == CHUNK_SIZE_X - 1 && m_posY < WORLD_SIZE_Y &&
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY + 1) * CHUNK_SIZE_Z))
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY + 1) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
world->GetScope(cx, cy);
|
||||
|
||||
if (x == 0 && m_posX - cx >= 0 &&
|
||||
world->ChunkAt((m_posX - cx - 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z))
|
||||
world->ChunkAt((m_posX - cx - 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
else if (x == CHUNK_SIZE_X - 1 && m_posX - cx < WORLD_SIZE_X &&
|
||||
world->ChunkAt((m_posX - cx + 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z))
|
||||
world->ChunkAt((m_posX - cx + 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
|
||||
if (z == 0 && m_posY - cy >= 0 &&
|
||||
world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy - 1) * CHUNK_SIZE_Z))
|
||||
world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy - 1) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
else if (z == CHUNK_SIZE_X - 1 && m_posY - cy < WORLD_SIZE_Y &&
|
||||
world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy + 1) * CHUNK_SIZE_Z))
|
||||
world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy + 1) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
}
|
||||
|
||||
void Chunk::GetPosition(int& x, int& y) const {
|
||||
@@ -103,7 +102,11 @@ void Chunk::Update(BlockInfo* blockinfo[BTYPE_LAST], World* world) {
|
||||
void Chunk::AddBlockToMesh(VertexBuffer::VertexData* vd, int& count, BlockType bt,
|
||||
int x, int y, int z, float u, float v, float s, World* world) {
|
||||
|
||||
int cx = x + m_posX * CHUNK_SIZE_X, cy = z + m_posY * CHUNK_SIZE_Z;
|
||||
int cex, cey;
|
||||
|
||||
world->GetScope(cex, cey);
|
||||
|
||||
int cx = x + (m_posX - cex) * CHUNK_SIZE_X, cy = z + (m_posY - cey) * CHUNK_SIZE_Z;
|
||||
|
||||
if (y == CHUNK_SIZE_Y - 1 || GetBlock(x, y + 1, z) == BTYPE_AIR) { // y
|
||||
vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, .8f, .8f, .8f, u, v);
|
||||
|
Reference in New Issue
Block a user