store changes more efficiently
This commit is contained in:
parent
b2a4d2e547
commit
3a9d2044e1
1 changed files with 17 additions and 16 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue