2020-02-11 02:51:09 +01:00
|
|
|
import React, {useState, useContext, useEffect} from "react"
|
|
|
|
|
import { ChallengeContext } from "./challengeContext"
|
2020-02-04 22:38:22 +01:00
|
|
|
// import { KeyTypeContext } from "./keyTypeContext"
|
2020-02-04 04:12:50 +01:00
|
|
|
const GameClockContext = React.createContext()
|
|
|
|
|
|
|
|
|
|
function GameClockContextProvider(props) {
|
2020-02-11 02:51:09 +01:00
|
|
|
|
2020-02-04 04:12:50 +01:00
|
|
|
const [gameClockTime, setGameClockTime] = useState(0)
|
|
|
|
|
const [clockIsRunning, setClockIsRunning] = useState(false)
|
2020-02-04 22:38:22 +01:00
|
|
|
const [intervals, setIntervals] = useState([])
|
2020-02-11 02:51:09 +01:00
|
|
|
const {challengeState, setChallengeState} = useContext(ChallengeContext)
|
2020-02-04 04:12:50 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
function startGameClock() {
|
2020-02-11 02:51:09 +01:00
|
|
|
console.log('before clock');
|
2020-02-04 04:12:50 +01:00
|
|
|
if (!clockIsRunning) {
|
2020-02-11 02:51:09 +01:00
|
|
|
console.log('after clock');
|
2020-02-04 04:12:50 +01:00
|
|
|
setClockIsRunning(true)
|
2020-02-04 22:38:22 +01:00
|
|
|
setIntervals(prev => [...prev, (setInterval(() => {
|
|
|
|
|
if (document.getElementById('gameClock') === null) {
|
|
|
|
|
stopGameClock()
|
|
|
|
|
return
|
|
|
|
|
}
|
2020-02-10 09:26:04 +01:00
|
|
|
setGameClockTime(prev => prev + 1)
|
|
|
|
|
// document.getElementById('gameClock').innerText = Number(gameClockTime) //Number(document.getElementById('gameClock').innerText) + 1
|
2020-02-04 22:38:22 +01:00
|
|
|
}, 1000))
|
|
|
|
|
])
|
2020-02-04 04:12:50 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
function stopGameClock() {
|
|
|
|
|
if (clockIsRunning) {
|
2020-02-04 22:38:22 +01:00
|
|
|
cleanup()
|
2020-02-04 04:12:50 +01:00
|
|
|
setClockIsRunning(false)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function cleanup() {
|
2020-02-04 22:38:22 +01:00
|
|
|
// clearInterval(gameClockTimer)
|
|
|
|
|
// setGameClockTimer(0)
|
|
|
|
|
for (let i = 0; i < intervals.length; i++) {
|
|
|
|
|
clearInterval(intervals[i]);
|
2020-02-04 04:12:50 +01:00
|
|
|
}
|
2020-02-04 22:38:22 +01:00
|
|
|
}
|
2020-02-11 02:51:09 +01:00
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
switch (challengeState) {
|
|
|
|
|
case 'ready':
|
|
|
|
|
setGameClockTime(0)
|
|
|
|
|
cleanup()
|
|
|
|
|
break
|
|
|
|
|
case 'started':
|
|
|
|
|
startGameClock()
|
|
|
|
|
break
|
|
|
|
|
case 'completed':
|
|
|
|
|
stopGameClock()
|
|
|
|
|
break
|
|
|
|
|
case 'cancelled':
|
|
|
|
|
stopGameClock()
|
|
|
|
|
setChallengeState('ready')
|
|
|
|
|
break
|
|
|
|
|
default:
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}, [challengeState])
|
2020-02-04 04:12:50 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<GameClockContext.Provider value={{
|
|
|
|
|
gameClockTime: gameClockTime,
|
|
|
|
|
setGameClockTime: setGameClockTime,
|
|
|
|
|
startGameClock: startGameClock,
|
|
|
|
|
stopGameClock: stopGameClock,
|
2020-02-04 10:04:52 +01:00
|
|
|
cleanup: cleanup,
|
2020-02-04 22:38:22 +01:00
|
|
|
clockIsRunning: clockIsRunning,
|
|
|
|
|
intervals: intervals
|
2020-02-04 04:12:50 +01:00
|
|
|
}}>
|
|
|
|
|
{props.children}
|
|
|
|
|
</GameClockContext.Provider>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export {GameClockContextProvider, GameClockContext}
|