From d7cb2b21459f94340575e8726cfa79e1d49f3a7b Mon Sep 17 00:00:00 2001 From: Ole Morud Date: Thu, 25 Aug 2022 20:45:40 +0200 Subject: [PATCH] add play button --- src/components/Board.tsx | 26 +++++++++++++++++++++++--- src/const.tsx | 1 + src/interpreter.tsx | 2 +- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/components/Board.tsx b/src/components/Board.tsx index 21c0ad9..13ea8e3 100644 --- a/src/components/Board.tsx +++ b/src/components/Board.tsx @@ -11,6 +11,7 @@ import { DEFAULT_TILE_COLOR, SELECTED_TILE_COLOR, SIDEBAR_WIDTH, + STEP_DELAY, TILE_SIZE } from "../const" import { iterate, newProgram, ProgramState, resetProgram } from "../interpreter" @@ -20,20 +21,39 @@ function Board() { const [program, setProgram] = useState(newProgram()) const [playing, setPlaying] = useState(false) + const intervalRef = useRef() + + useEffect(() => { + if (playing) { + intervalRef.current = setInterval(() => { + step() + console.log("a") + }, STEP_DELAY) + } else { + clearInterval(intervalRef.current) + console.log(program) + } + }, [playing]) useEffect(() => { if (program.done) { + console.log("done") const x = structuredClone(program) resetProgram(x) + setPlaying(false) x.done = false setProgram(x) } }, [program]) const step = () => { - const x = structuredClone(program) + //const x = structuredClone(program) + //iterate(x) + setProgram((prog) => { + const x = structuredClone(prog) iterate(x) - setProgram(x) + return x + }) } const handleDrop = ( @@ -94,7 +114,7 @@ function Board() { {/* BOARD */} {program.board.map((row, rowNo): JSX.Element => { return ( - + {row.map((tile, colNo): JSX.Element => { return (
{ })*/ program.direction = Direction.Right - program.done = false + program.done = true program.instructionPointer.x = 0 program.instructionPointer.y = 0 program.output = ""