import { RawLevel } from "../types"; export function resizeLevel(level: RawLevel, sizeDelta: number) { const { size, bricks } = level; const newSize = Math.max(1, size + sizeDelta); const newBricks = []; for (let x = 0; x < newSize; x++) { for (let y = 0; y < newSize; y++) { newBricks[y * newSize + x] = brickAt(level, x, y); } } return { size: newSize, bricks: newBricks.join(""), }; } 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]) || "_" ); } export function moveLevel(level: RawLevel, dx: number, dy: number) { const { size } = level; const newBricks = new Array(size * size).fill("_"); for (let x = 0; x < size; x++) { for (let y = 0; y < size; y++) { newBricks[y * size + x] = brickAt(level, x - dx, y - dy); } } return { bricks: newBricks.join(""), }; } export function setBrick(level: RawLevel, index: number, colorCode: string) { 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(""), }; }