breakout71/src/level_editor/levels_editor_util.ts

56 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-03-16 17:45:29 +01:00
import { RawLevel } from "../types";
2025-03-13 16:43:00 +01:00
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);
2025-03-13 16:43:00 +01:00
}
}
return {
size: newSize,
bricks: newBricks.join(""),
};
2025-03-13 16:43:00 +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-14 11:59:49 +01:00
}
2025-03-13 16:43:00 +01:00
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);
2025-03-13 16:43:00 +01:00
}
}
return {
bricks: newBricks.join(""),
};
2025-03-13 16:43:00 +01:00
}
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);
2025-03-14 11:59:49 +01:00
}
}
return {
bricks: newBricks.join(""),
};
}