From 86a65fc39c549f6349244d6df515b93b21c7806a Mon Sep 17 00:00:00 2001 From: Paul Mathieu Date: Fri, 24 Dec 2021 05:50:13 -0800 Subject: [PATCH] Add a few trees --- game.js | 16 ++++++- terrain.js | 27 ++++++----- texture.png | Bin 40386 -> 41468 bytes world.js | 128 +++++++++++++++++++++++++++++++++++++++------------- 4 files changed, 127 insertions(+), 44 deletions(-) diff --git a/game.js b/game.js index 7d9dac7..6256b73 100644 --- a/game.js +++ b/game.js @@ -133,6 +133,17 @@ function getObjects(world, z, x, glContext) { } return true; + }) + .sort((a, b) => { + const zz = Math.floor(z / 16); + const xx = Math.floor(x / 16); + const azz = Math.floor(a.position.z / 16) - zz; + const axx = Math.floor(a.position.x / 16) - xx; + const bzz = Math.floor(b.position.z / 16) - zz; + const bxx = Math.floor(b.position.x / 16) - xx; + const da = Math.abs(azz) + Math.abs(axx); + const db = Math.abs(bzz) + Math.abs(bxx); + return db - da; }); const buffers = drawedChunks .map(chunk => chunk.buffer) @@ -203,14 +214,15 @@ function tagABlock(gl, params, objects) { // [x] double jump!! // [x] fullscreen // [ ] a soundrack -// [ ] trees and stuff +// [x] trees and stuff // [ ] different biomes (with different noise stats) +// [ ] water you can swim in (and not walk on) // [ ] flowy water // [ ] save the world (yay) to local storage (bah) // [ ] caves // [ ] crafting // [ ] fix bugs -// [ ] better light +// [ ] better light (esp. cave lighting) // [ ] inventory // [ ] monsters // [ ] multi player diff --git a/terrain.js b/terrain.js index 5090b54..13c7807 100644 --- a/terrain.js +++ b/terrain.js @@ -9,18 +9,23 @@ const sigmoid = (a, b, f = smoothstep) => x => { return f((x - a) / (b - a)); }; +// super ghetto random +function xorshift(x) { + x ^= x << 13; + x ^= x >> 7; + x ^= x << 17; + return x; +} + +export function random(seed, z, x) { + return xorshift(1337 * z + seed + 80085 * x); +} + function ghettoPerlinNoise(seed, x, y, gridSize = 16) { const dot = (vx, vy) => vx[0] * vy[0] + vx[1] * vy[1]; - // super ghetto random - const xorshift = (x) => { - x ^= x << 13; - x ^= x >> 7; - x ^= x << 17; - return x; - }; const randGrad = (x0, y0) => { - const rand = xorshift(1337 * x0 + seed + 80085 * y0); + const rand = random(seed, x0, y0); return [Math.sin(rand), Math.cos(rand)]; }; @@ -50,8 +55,7 @@ function cliffPerlin(seed, x, y) { return interpolate(-1, 1, 0.5 * (1 + Math.atan2(noise1, noise2) / Math.PI), softerEdge); } -export function makeTerrain(x, y) { - const seed = 1337; +export function makeTerrain(seed, x, y) { const lacunarity = 2.1; const persistence = 0.35; const noiseMap = (x, y) => cliffPerlin(seed, x / 2, y / 2); @@ -119,6 +123,7 @@ function colorInterp(x) { function main() { const canvas = document.querySelector('#canvas'); const ctx = canvas.getContext('2d'); + const seed = 1337; ctx.fillStyle = 'gray'; ctx.fill(); @@ -128,7 +133,7 @@ function main() { const imgdat = ctx.createImageData(16, 16); const dat = imgdat.data; - const chunk = makeTerrain(i - canvas.width / 2, j - canvas.height / 2); + const chunk = makeTerrain(seed, i - canvas.width / 2, j - canvas.height / 2); for (let k = 0; k < 16; k++) { for (let l = 0; l < 16; l++) { const offset = 4 * (16 * (15 - l) + k); diff --git a/texture.png b/texture.png index 4795d440575770ed74944c047d70783818519b13..262de73a13894125cee8370302d3b9633745137e 100644 GIT binary patch delta 36897 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 fj=w=*TkQV;eG 15 || j > 15 || k > 255) return; + const offset = 256 * (16 * i + j) + k; + if (data[offset] !== BlockType.AIR) return; + data[offset] = type; + } + + for (let i = pos[0] - 2; i < pos[0] + 3; i++) { + for (let j = pos[1] - 2; j < pos[1] + 3; j++) { + for (let k = firstBlock + height - 2; k < firstBlock + height + 2; k++) { + setBlock(i, j, k, BlockType.LEAVES); + } + } + } + + return firstBlock + height; +} + function makeChunk(z, x) { - const terrain = makeTerrain(z, x); + const seed = 1337; + const terrain = makeTerrain(seed, z, x); const data = new Uint8Array(16 * 16 * 256); + const trees = []; + for (let i = 0; i < 16; i++) { for (let j = 0; j < 16; j++) { const height = terrain[i * 16 + j]; - // everything above is air - // that block is grass - // everything below is dirt const offset = i * (16 * 256) + j * 256; const stoneHeight = Math.max(48, height); const grassHeight = stoneHeight + 8; const waterHeight = 67; + let currentHeight = 0; data.set(Array(stoneHeight).fill(BlockType.STONE), offset); - data.set(Array(grassHeight - 1 - stoneHeight).fill(BlockType.DIRT), offset + stoneHeight); + currentHeight = stoneHeight; + data.set(Array(grassHeight - currentHeight).fill(BlockType.DIRT), offset + currentHeight); + currentHeight = grassHeight; if (grassHeight < waterHeight) { - data.set(Array(waterHeight - grassHeight + 1).fill(BlockType.WATER), offset + grassHeight - 1); + data.set(Array(waterHeight - currentHeight).fill(BlockType.WATER), offset + currentHeight); + currentHeight = waterHeight; } else { data[offset + grassHeight - 1] = BlockType.GRASS; + if (hasATree(seed, z + i, x + j)) { + trees.push([i, j, currentHeight]); + } } - const surfaceHeight = Math.max(waterHeight, grassHeight); - data.set(Array(256 - surfaceHeight).fill(BlockType.AIR), offset + surfaceHeight); + data.set(Array(256 - currentHeight).fill(BlockType.AIR), offset + currentHeight); } } + for (const tree of trees) { + makeATree(data, tree, seed, z, x); + } + return { position: {z, x}, data, @@ -140,6 +183,14 @@ function faceTexture(type, dir) { case BlockType.DIRT: return [2, 15]; case BlockType.STONE: return [3, 15]; case BlockType.WATER: return [4, 15]; + case BlockType.TREE: + switch (dir) { + case '+y': + case '-y': + return [5, 15]; + default: return [6, 15]; + } + case BlockType.LEAVES: return [7, 15]; default: return [0, 0]; } } @@ -156,6 +207,16 @@ function faceCenter(blockCenter, dir) { } } +function isTransparent(type) { + switch (type) { + case BlockType.WATER: + case BlockType.LEAVES: + case BlockType.AIR: + return true; + default: return false; + } +} + function makeFaceList(data, chunkz, chunkx, blockLookup) { const lookup = (i, j, k) => { if (i < 0 || j < 0 || i > 15 || j > 15) { @@ -176,7 +237,7 @@ function makeFaceList(data, chunkz, chunkx, blockLookup) { ]; const solidFaces = []; - const waterFaces = []; + const transparentFaces = []; for (let i = 0; i < 16; i++) { for (let j = 0; j < 16; j++) { @@ -185,21 +246,28 @@ function makeFaceList(data, chunkz, chunkx, blockLookup) { if (data[bi] === BlockType.AIR) { continue; } - for (const {dir, faceCenter} of neighbors(i, j, k) - .filter(({ block }) => block === BlockType.AIR || (block === BlockType.WATER && data[bi] !== BlockType.WATER))) { - if (data[bi] !== BlockType.WATER) { - solidFaces.push({ - blockIndex: bi, + if (isTransparent(data[bi])) { + for (const { dir, faceCenter } of neighbors(i, j, k) + .filter(({ block }) => block === BlockType.AIR) + ) { + if (data[bi] === BlockType.WATER) { + faceCenter[1] -= 0.15; + } + transparentFaces.push({ dir, face: makeFace(dir, faceTexture(data[bi], dir), faceCenter), + blockIndex: bi, }); - } else { - faceCenter[1] -= 0.15; - waterFaces.push({ - blockIndex: bi, + } + } else { + for (const { dir, faceCenter } of neighbors(i, j, k) + .filter(({ block }) => isTransparent(block)) + ) { + solidFaces.push({ dir, face: makeFace(dir, faceTexture(data[bi], dir), faceCenter), - }) + blockIndex: bi, + }); } } } @@ -208,7 +276,7 @@ function makeFaceList(data, chunkz, chunkx, blockLookup) { return { solidFaces, - waterFaces, + transparentFaces, }; } @@ -292,20 +360,19 @@ function invalidateChunkGeometry(world, i, j) { } function addFace(chunk, block, dir) { - if (block.type === BlockType.WATER) { - const face = createChunkFace(block, dir); - if (dir === '+y') { - face[1] -= 0.15; - } + const face = createChunkFace(block, dir); + if (isTransparent(block.type)) { chunk.transparentFaces.push(face); - } else { - chunk.faces.push(createChunkFace(block, dir)); + chunk.faces.push(face); } } export function createChunkFace(block, dir, center = null) { center = center ?? faceCenter(block.centerPosition, dir); + if (block.type === BlockType.WATER && dir === '+y') { + center[1] -= 0.15; + } return { dir, blockIndex: block.blockIndex, @@ -337,7 +404,7 @@ export function updateWorldGeometry(gl, world, z, x, timeLimit = 10000) { const faces = makeFaceList(chunk.data, chunk.position.z, chunk.position.x, lookup); chunk.faces = faces.solidFaces; - chunk.transparentFaces = faces.waterFaces; + chunk.transparentFaces = faces.transparentFaces; } chunk.buffer = makeBufferFromFaces(gl, chunk.faces.map(f => f.face)); @@ -487,6 +554,7 @@ export function markBlock(world, cameraPosition, direction, maxDistance) { export function destroyBlock(world, block) { const trimFaces = chunk => { chunk.faces = chunk.faces.filter(({blockIndex}) => chunk.data[blockIndex] !== BlockType.AIR); + chunk.transparentFaces = chunk.transparentFaces.filter(({blockIndex}) => chunk.data[blockIndex] !== BlockType.AIR); } block.chunk.data[block.blockIndex] = BlockType.AIR; @@ -511,8 +579,6 @@ export function destroyBlock(world, block) { .filter(({ block }) => block.type !== BlockType.AIR && block.type !== BlockType.UNDEFINED) .forEach(({ block, dir }) => { - // TODO: don't add transparent faces twice - // since we "forget" to trim them addFace(block.chunk, block, dir); trimFaces(block.chunk);