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 { blockTypes as T, level as L, probability as P } from './def'
|
||||||
import type { Block } from '../types.d'
|
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 max = row.length - 1
|
||||||
const h = i - 1
|
const h = i - 1
|
||||||
const j = 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 above = previousRow[i]
|
||||||
const aboveLeft = previousRow[h]
|
const aboveLeft = previousRow[h]
|
||||||
const aboveRight = previousRow[j]
|
const aboveRight = previousRow[j]
|
||||||
|
const below = nextRow[i]
|
||||||
|
|
||||||
if (current === T.treeCrown) {
|
if (current === T.treeCrown) {
|
||||||
if (i > 0) row[h] = T.treeLeaves
|
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
|
if (i < max) row[j] = T.treeLeaves
|
||||||
|
|
||||||
} else if (above === T.treeTrunk) {
|
} else if (above === T.treeTrunk) {
|
||||||
if (current === T.air) row[i] = T.treeTrunk
|
if (below === T.soil || below === T.grass) row[i] = T.treeRoot
|
||||||
else row[i] = T.treeRoot
|
else row[i] = T.treeTrunk
|
||||||
} else if (above === T.treeRoot) {
|
} else if (above === T.treeRoot) {
|
||||||
row[i] = T.soil
|
row[i] = T.soil
|
||||||
if (i > 0) row[h] = T.treeRoot
|
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) {
|
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)
|
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) {
|
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)
|
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++) {
|
for (let column = 0; column < row.length; column++) {
|
||||||
if (level < L.ground) {
|
if (level < L.ground) {
|
||||||
// growTrees(level, column, columnOffset, row, previousRow)
|
growTrees(level, column, columnOffset, row, previousRow, nextRow)
|
||||||
} else {
|
} else {
|
||||||
row[column] = extendBlock(level, column, columnOffset, row[column], previousRow[column])
|
row[column] = extendBlock(level, column, columnOffset, row[column], previousRow[column])
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ export const level = {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const probability = {
|
export const probability = {
|
||||||
tree: 0.3,
|
tree: 0.2,
|
||||||
soilHole: 0.3,
|
soilHole: 0.3,
|
||||||
soilGravel: 0.2,
|
soilGravel: 0.2,
|
||||||
stoneGravel: 0.1,
|
stoneGravel: 0.1,
|
||||||
|
|
|
@ -75,9 +75,10 @@ export default function createLevel(width: number, height: number, seed = 'extre
|
||||||
const level = levelOffset + i
|
const level = levelOffset + i
|
||||||
const row: Block[] = Array(width)
|
const row: Block[] = Array(width)
|
||||||
const previousRow = i ? _grid[i-1] : [] as Block[]
|
const previousRow = i ? _grid[i-1] : [] as Block[]
|
||||||
|
const nextRow = _grid[i+1] ?? [] as Block[]
|
||||||
|
|
||||||
blockGen.fillRow(level, columnOffset, row)
|
blockGen.fillRow(level, columnOffset, row)
|
||||||
blockExt.extendRow(level, columnOffset, row, previousRow)
|
blockExt.extendRow(level, columnOffset, row, previousRow, nextRow)
|
||||||
|
|
||||||
_grid[i] = row
|
_grid[i] = row
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue