trees, but like, weirdly broken

This commit is contained in:
Norman Köhring 2025-03-23 13:32:38 +01:00
parent 3266ddb217
commit 3e773e77c6
3 changed files with 30 additions and 9 deletions

View file

@ -2,7 +2,13 @@ import type { NoiseFunction2D } from 'simplex-noise'
import { blockTypes as T, level as L, probability as P } from './def'
import type { Block } from '../types.d'
function trees(r: number, i: number, row: Block[], previousRow: Block[]) {
function trees(
r: number,
i: number,
row: Block[],
previousRow: Block[],
nextRow: Block[],
) {
const max = row.length - 1
const h = i - 1
const j = i + 1
@ -10,6 +16,7 @@ function trees(r: number, i: number, row: Block[], previousRow: Block[]) {
const above = previousRow[i]
const aboveLeft = previousRow[h]
const aboveRight = previousRow[j]
const below = nextRow[i]
if (current === T.treeCrown) {
if (i > 0) row[h] = T.treeLeaves
@ -26,8 +33,8 @@ function trees(r: number, i: number, row: Block[], previousRow: Block[]) {
if (i < max) row[j] = T.treeLeaves
} else if (above === T.treeTrunk) {
if (current === T.air) row[i] = T.treeTrunk
else row[i] = T.treeRoot
if (below === T.soil || below === T.grass) row[i] = T.treeRoot
else row[i] = T.treeTrunk
} else if (above === T.treeRoot) {
row[i] = T.soil
if (i > 0) row[h] = T.treeRoot
@ -68,9 +75,16 @@ function underground(r: number, i: number, current: Block, above: Block) {
}
export default function createBlockExtender(rand: NoiseFunction2D) {
function growTrees(level: number, column: number, offset: number, row: Block[], previousRow: Block[]) {
function growTrees(
level: number,
column: number,
offset: number,
row: Block[],
previousRow: Block[],
nextRow: Block[],
) {
const r = rand(level, column + offset)
trees(r, column, row, previousRow)
trees(r, column, row, previousRow, nextRow)
}
function extendBlock(level: number, column: number, offset: number, current: Block, above: Block) {
@ -81,10 +95,16 @@ export default function createBlockExtender(rand: NoiseFunction2D) {
return underground(r, column, current, above)
}
function extendRow(level: number, columnOffset: number, row: Block[], previousRow: Block[]) {
function extendRow(
level: number,
columnOffset: number,
row: Block[],
previousRow: Block[],
nextRow: Block[],
) {
for (let column = 0; column < row.length; column++) {
if (level < L.ground) {
// growTrees(level, column, columnOffset, row, previousRow)
growTrees(level, column, columnOffset, row, previousRow, nextRow)
} else {
row[column] = extendBlock(level, column, columnOffset, row[column], previousRow[column])
}

View file

@ -49,7 +49,7 @@ export const level = {
}
export const probability = {
tree: 0.3,
tree: 0.2,
soilHole: 0.3,
soilGravel: 0.2,
stoneGravel: 0.1,

View file

@ -75,9 +75,10 @@ export default function createLevel(width: number, height: number, seed = 'extre
const level = levelOffset + i
const row: Block[] = Array(width)
const previousRow = i ? _grid[i-1] : [] as Block[]
const nextRow = _grid[i+1] ?? [] as Block[]
blockGen.fillRow(level, columnOffset, row)
blockExt.extendRow(level, columnOffset, row, previousRow)
blockExt.extendRow(level, columnOffset, row, previousRow, nextRow)
_grid[i] = row
}