diff --git a/src/level/index.ts b/src/level/index.ts index 250dd72..9575e37 100644 --- a/src/level/index.ts +++ b/src/level/index.ts @@ -32,27 +32,27 @@ export default function createLevel(width: number, height: number, seed = 'extre // stores the limit to where light still shines, // for each column currently visible on the screen const _lightBarrier: number[] = [...new Array(width)].map(() => MAX_LIGHT) - const _changes: Change[] = [] + const _changes: Change[][] = [] const blockGen = createBlockGenerator(rand) const blockExt = createBlockExtender(rand) // Apply changes, coming from the player (tocktocktock-plopp!) function change(change: Change) { - _changes.push(change) - console.log(_changes) + const x = change.x + if (!_changes[x]) _changes[x] = [change] + else _changes[x].push(change) } function applyPlayerChanges(columnOffset: number, levelOffset: number) { - for (const change of _changes) { - // ignore all changes outside of the current view - if (change.x < columnOffset || change.x > columnOffset + width) continue - if (change.y < levelOffset || change.y > levelOffset + height) continue - - if (change.type === 'exchange') { - _grid[change.y - levelOffset][change.x - columnOffset] = blockTypes[change.newType] - } else if (change.type === 'damage') { - console.warn('damaging blocks not yet supported') + for (let col = columnOffset; col < columnOffset + width; col++) { + const changes = _changes[col] + if (changes) { + const maxLevel = levelOffset + height + changes.forEach(c => { + if (c.type !== 'exchange' || c.y < levelOffset || c.y > maxLevel) return + _grid[c.y - levelOffset][c.x - columnOffset] = blockTypes[c.newType] + }) } } } @@ -68,10 +68,11 @@ export default function createLevel(width: number, height: number, seed = 'extre let block = blockGen.generateBlock(level, col + columnOffset) block = blockExt.extendBlock(level, col, columnOffset, block, previousBlock) - const change = _changes.find(change => { - return change.x === columnOffset + col && change.y === level - }) - if (change && change.type === 'exchange') block = blockTypes[change.newType] + const changes = _changes[columnOffset + col] + if (changes) { + const change = changes.find(c => c.y === level) + if (change && change.type === 'exchange') block = blockTypes[change.newType] + } previousBlock = block