Small refactor in makeChunk
This commit is contained in:
parent
ce7f4f66c5
commit
5a334fec13
41
index.js
41
index.js
@ -223,7 +223,7 @@ function makeTerrain(x, y) {
|
|||||||
function makeChunk(x, y) {
|
function makeChunk(x, y) {
|
||||||
const terrain = makeTerrain(x, y);
|
const terrain = makeTerrain(x, y);
|
||||||
|
|
||||||
const chunk = new Uint8Array(16 * 16 * 256);
|
const data = new Uint8Array(16 * 16 * 256);
|
||||||
|
|
||||||
for (let i = 0; i < 16; i++) {
|
for (let i = 0; i < 16; i++) {
|
||||||
for (let j = 0; j < 16; j++) {
|
for (let j = 0; j < 16; j++) {
|
||||||
@ -233,19 +233,25 @@ function makeChunk(x, y) {
|
|||||||
// everything below is dirt
|
// everything below is dirt
|
||||||
const offset = i * (16 * 256) + j * 256;
|
const offset = i * (16 * 256) + j * 256;
|
||||||
const stoneHeight = Math.min(62, height);
|
const stoneHeight = Math.min(62, height);
|
||||||
chunk.set(Array(stoneHeight).fill(BlockType.STONE), offset);
|
data.set(Array(stoneHeight).fill(BlockType.STONE), offset);
|
||||||
if (stoneHeight < height) {
|
if (stoneHeight < height) {
|
||||||
chunk.set(Array(height - 1 - stoneHeight).fill(BlockType.DIRT), offset + stoneHeight);
|
data.set(Array(height - 1 - stoneHeight).fill(BlockType.DIRT), offset + stoneHeight);
|
||||||
chunk[offset + height - 1] = BlockType.GRASS;
|
data[offset + height - 1] = BlockType.GRASS;
|
||||||
}
|
}
|
||||||
chunk.set(Array(256 - height).fill(BlockType.AIR), offset + height);
|
data.set(Array(256 - height).fill(BlockType.AIR), offset + height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return chunk;
|
return {
|
||||||
|
position: {x, y},
|
||||||
|
data,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeChunkMesh(chunk, z0, x0) {
|
function makeChunkMesh(chunk) {
|
||||||
|
const {x: z0, y: x0} = chunk.position;
|
||||||
|
const {data} = chunk;
|
||||||
|
|
||||||
const blockPos = i => {
|
const blockPos = i => {
|
||||||
const x = Math.floor(i / (16 * 256));
|
const x = Math.floor(i / (16 * 256));
|
||||||
const y = Math.floor((i - 16 * 258 * x) / 256);
|
const y = Math.floor((i - 16 * 258 * x) / 256);
|
||||||
@ -282,20 +288,20 @@ function makeChunkMesh(chunk, z0, x0) {
|
|||||||
const bi = blockIndex(i, j, k);
|
const bi = blockIndex(i, j, k);
|
||||||
|
|
||||||
const upTexture = (() => {
|
const upTexture = (() => {
|
||||||
switch (chunk[bi - 1]) {
|
switch (data[bi - 1]) {
|
||||||
case BlockType.GRASS: return [0, 15];
|
case BlockType.GRASS: return [0, 15];
|
||||||
case BlockType.DIRT: return [2, 15];
|
case BlockType.DIRT: return [2, 15];
|
||||||
case BlockType.STONE: return [3, 15];
|
case BlockType.STONE: return [3, 15];
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
if (chunk[bi] == BlockType.AIR) {
|
if (data[bi] == BlockType.AIR) {
|
||||||
faces.push(makeFace('+y', upTexture, [x0 + j, k - 0.5, z0 + i]));
|
faces.push(makeFace('+y', upTexture, [x0 + j, k - 0.5, z0 + i]));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const sideTexture = (() => {
|
const sideTexture = (() => {
|
||||||
switch (chunk[bi]) {
|
switch (data[bi]) {
|
||||||
case BlockType.GRASS: return [1, 15];
|
case BlockType.GRASS: return [1, 15];
|
||||||
case BlockType.DIRT: return [2, 15];
|
case BlockType.DIRT: return [2, 15];
|
||||||
case BlockType.STONE: return [3, 15];
|
case BlockType.STONE: return [3, 15];
|
||||||
@ -303,7 +309,7 @@ function makeChunkMesh(chunk, z0, x0) {
|
|||||||
})();
|
})();
|
||||||
|
|
||||||
for ({ pos, dir } of sideNeighbors(i, j)) {
|
for ({ pos, dir } of sideNeighbors(i, j)) {
|
||||||
if (chunk[blockIndex(...pos, k)] == BlockType.AIR) {
|
if (data[blockIndex(...pos, k)] == BlockType.AIR) {
|
||||||
faces.push(makeFace(dir, sideTexture, faceDir(dir, x0 + j, k, z0 + i)));
|
faces.push(makeFace(dir, sideTexture, faceDir(dir, x0 + j, k, z0 + i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -328,15 +334,14 @@ function makeChunkMesh(chunk, z0, x0) {
|
|||||||
|
|
||||||
function makeWorldBuffers(gl) {
|
function makeWorldBuffers(gl) {
|
||||||
const chunkFaces = [].concat(
|
const chunkFaces = [].concat(
|
||||||
makeChunkMesh(makeChunk(0, -16), 0, -16),
|
makeChunkMesh(makeChunk(0, -16)),
|
||||||
makeChunkMesh(makeChunk(16, -16), 16, -16),
|
makeChunkMesh(makeChunk(16, -16)),
|
||||||
makeChunkMesh(makeChunk(0, 0), 0, 0),
|
makeChunkMesh(makeChunk(0, 0)),
|
||||||
makeChunkMesh(makeChunk(16, 0), 16, 0),
|
makeChunkMesh(makeChunk(16, 0)),
|
||||||
makeChunkMesh(makeChunk(16, 16), 16, 16),
|
makeChunkMesh(makeChunk(16, 16)),
|
||||||
makeChunkMesh(makeChunk(0, 16), 0, 16),
|
makeChunkMesh(makeChunk(0, 16)),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
return makeBuffersFromFraces(gl, chunkFaces);
|
return makeBuffersFromFraces(gl, chunkFaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user