trees, but like, weirdly broken
This commit is contained in:
parent
3266ddb217
commit
3e773e77c6
3 changed files with 30 additions and 9 deletions
|
@ -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])
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue