add play button

This commit is contained in:
Ole Morud
2022-08-25 20:45:40 +02:00
parent 1bd5085b91
commit d7cb2b2145
3 changed files with 25 additions and 4 deletions

View File

@@ -11,6 +11,7 @@ import {
DEFAULT_TILE_COLOR, DEFAULT_TILE_COLOR,
SELECTED_TILE_COLOR, SELECTED_TILE_COLOR,
SIDEBAR_WIDTH, SIDEBAR_WIDTH,
STEP_DELAY,
TILE_SIZE TILE_SIZE
} from "../const" } from "../const"
import { iterate, newProgram, ProgramState, resetProgram } from "../interpreter" import { iterate, newProgram, ProgramState, resetProgram } from "../interpreter"
@@ -20,20 +21,39 @@ function Board() {
const [program, setProgram] = useState<ProgramState>(newProgram()) const [program, setProgram] = useState<ProgramState>(newProgram())
const [playing, setPlaying] = useState<boolean>(false) const [playing, setPlaying] = useState<boolean>(false)
const intervalRef = useRef<NodeJS.Timer>()
useEffect(() => {
if (playing) {
intervalRef.current = setInterval(() => {
step()
console.log("a")
}, STEP_DELAY)
} else {
clearInterval(intervalRef.current)
console.log(program)
}
}, [playing])
useEffect(() => { useEffect(() => {
if (program.done) { if (program.done) {
console.log("done")
const x = structuredClone(program) const x = structuredClone(program)
resetProgram(x) resetProgram(x)
setPlaying(false)
x.done = false x.done = false
setProgram(x) setProgram(x)
} }
}, [program]) }, [program])
const step = () => { const step = () => {
const x = structuredClone(program) //const x = structuredClone(program)
//iterate(x)
setProgram((prog) => {
const x = structuredClone(prog)
iterate(x) iterate(x)
setProgram(x) return x
})
} }
const handleDrop = ( const handleDrop = (
@@ -94,7 +114,7 @@ function Board() {
{/* BOARD */} {/* BOARD */}
{program.board.map((row, rowNo): JSX.Element => { {program.board.map((row, rowNo): JSX.Element => {
return ( return (
<Grid key={key++} container columns={BOARD_WIDTH} sx={{ width: `${5 * 12}rem` }}> <Grid key={key++} container columns={BOARD_WIDTH} sx={{ width: `${6 * BOARD_WIDTH}rem` }}>
{row.map((tile, colNo): JSX.Element => { {row.map((tile, colNo): JSX.Element => {
return ( return (
<div <div

View File

@@ -4,5 +4,6 @@ export const DEFAULT_TILE_COLOR = "0xFFFFFF"
export const BOARD_WIDTH = 10 export const BOARD_WIDTH = 10
export const BOARD_HEIGHT = 10 export const BOARD_HEIGHT = 10
export const TILE_SIZE = 5 export const TILE_SIZE = 5
export const STEP_DELAY = 300
export default {} export default {}

View File

@@ -57,7 +57,7 @@ export const resetProgram = (program: ProgramState) => {
})*/ })*/
program.direction = Direction.Right program.direction = Direction.Right
program.done = false program.done = true
program.instructionPointer.x = 0 program.instructionPointer.x = 0
program.instructionPointer.y = 0 program.instructionPointer.y = 0
program.output = "" program.output = ""