add play button
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 {}
|
||||||
|
|||||||
@@ -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 = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user