From 915b907c70c929565596521f821b30229240aa13 Mon Sep 17 00:00:00 2001 From: Filip Chalupa Date: Fri, 31 Jan 2025 21:57:21 +0100 Subject: [PATCH] Level editor: handle adding and removing columns and rows --- src/Components/LevelEditor.tsx | 74 +++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/src/Components/LevelEditor.tsx b/src/Components/LevelEditor.tsx index 3131640..0f86922 100644 --- a/src/Components/LevelEditor.tsx +++ b/src/Components/LevelEditor.tsx @@ -77,23 +77,75 @@ export const LevelEditor: FunctionComponent = () => {
undefined} - onRemove={() => undefined} + onAdd={() => { + setFoundations((foundations) => [ + foundations.at(0) ?? Array(foundations[0].length).fill('sky'), + ...foundations, + ]) + setElements((elements) => + elements.map((element) => ({ ...element, y: element.y + 1 })), + ) + }} + onRemove={() => { + setFoundations((foundations) => foundations.slice(1)) + setElements((elements) => + elements.map((element) => ({ ...element, y: element.y - 1 })), + ) + // @TODO: remove elements out of bound + }} /> undefined} - onRemove={() => undefined} + onAdd={() => { + setFoundations((foundations) => [ + ...foundations.map((row) => [ + row.at(0) ?? ('sky' as const), + ...row, + ]), + ]) + setElements((elements) => + elements.map((element) => ({ ...element, x: element.x + 1 })), + ) + }} + onRemove={() => { + setFoundations((foundations) => [ + ...foundations.map((row) => row.slice(1)), + ]) + setElements((elements) => + elements.map((element) => ({ ...element, x: element.x - 1 })), + ) + // @TODO: remove elements out of bound + }} /> undefined} - onRemove={() => undefined} + onAdd={() => { + setFoundations((foundations) => [ + ...foundations.map((row) => [ + ...row, + row.at(-1) ?? ('sky' as const), + ]), + ]) + }} + onRemove={() => { + setFoundations((foundations) => [ + ...foundations.map((row) => row.slice(0, -1)), + ]) + // @TODO: remove elements out of bound + }} /> undefined} - onRemove={() => undefined} + onAdd={() => { + setFoundations((foundations) => [ + ...foundations, + foundations.at(-1) ?? Array(foundations[0].length).fill('soil'), + ]) + }} + onRemove={() => { + setFoundations((foundations) => foundations.slice(0, -1)) + // @TODO: remove elements out of bound + }} /> void onRemove: () => void -}> = ({ position }) => { +}> = ({ position, onAdd, onRemove }) => { return (
- + - +