You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.1 KiB
TypeScript

import alea from 'alea'
import { createNoise2D } from 'simplex-noise'
import createBlockGenerator from './blockGen'
import {blockTypes as T, level as L, type Block} from './def'
//import BlockGen from './first-iteration'
//import BlockExt from './second-iteration'
//import PlayerChanges from './third-iteration'
export default function createLevel(width: number, height: number, seed = 'very random seed') {
const prng = alea(seed)
const noise2D = createNoise2D(prng)
const _grid: Block[][] = new Array(height)
const blockGen = createBlockGenerator(noise2D)
// Apply changes, coming from the player (tocktocktock-plopp!)
function change (level: number, column: number, newBlock: Block) {
// TODO
}
function generate(column: number, y: number) {
for (let i = 0; i < height; i++) {
const level = y+i
const row: Block[] = Array(width)
const previousRow = i ? _grid[i-1] : [] as Block[]
blockGen(level, column, row, previousRow)
_grid[i] = row
}
}
function grid(x: number, y: number) {
generate(x, y)
return _grid
}
return { grid, change }
}