2025-03-13 16:43:00 +01:00
|
|
|
import {RawLevel} from "./types";
|
|
|
|
|
|
|
|
export function resizeLevel(level: RawLevel, sizeDelta: number) {
|
|
|
|
const {size, bricks} = level
|
|
|
|
const newSize = Math.max(1, size + sizeDelta)
|
2025-03-14 11:59:49 +01:00
|
|
|
const newBricks = []
|
|
|
|
for (let x = 0; x < newSize; x++) {
|
|
|
|
for (let y = 0; y < newSize; y++) {
|
|
|
|
newBricks[y * newSize + x] = brickAt(level, x, y )
|
2025-03-13 16:43:00 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
size: newSize,
|
|
|
|
bricks: newBricks.join('')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-03-14 11:59:49 +01:00
|
|
|
export function brickAt(level:RawLevel, x:number,y:number){
|
|
|
|
return x>=0 && x < level.size && y>= 0 && y< level.size && level.bricks.split('')[y * level.size + x] || '_'
|
|
|
|
}
|
|
|
|
|
2025-03-13 16:43:00 +01:00
|
|
|
export function moveLevel(level: RawLevel, dx: number, dy: number) {
|
2025-03-14 11:59:49 +01:00
|
|
|
const {size} = level
|
2025-03-13 16:43:00 +01:00
|
|
|
const newBricks = new Array(size * size).fill('_')
|
|
|
|
for (let x = 0; x < size; x++) {
|
|
|
|
for (let y = 0; y < size; y++) {
|
2025-03-14 11:59:49 +01:00
|
|
|
newBricks[y * size + x] = brickAt(level, x - dx, y - dy)
|
2025-03-13 16:43:00 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
bricks: newBricks.join('')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function setBrick(level: RawLevel, index: number, colorCode: string) {
|
2025-03-14 11:59:49 +01:00
|
|
|
const {size} = level
|
|
|
|
const newBricks=[]
|
|
|
|
for (let x = 0; x < size; x++) {
|
|
|
|
for (let y = 0; y < size; y++) {
|
|
|
|
const brickIndex=y * size + x
|
|
|
|
newBricks[brickIndex] = (brickIndex === index && colorCode ) || brickAt(level, x , y)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
bricks: newBricks.join('')
|
2025-03-13 16:43:00 +01:00
|
|
|
}
|
|
|
|
}
|