{"version":3,"sources":["assets sync /^/.*/.json$","libs/BackgroundProvider.tsx","libs/GameStateReducer.ts","libs/GameDifficultyReducer.ts","reducers/SampleReducer.ts","libs/GameProvider.tsx","libs/audio-provider.tsx","components/ui/SvgButton.tsx","components/game-compass/GameCompassCover.tsx","components/game-compass/GameCompassFail.tsx","components/game-common/CountDown.tsx","components/ui/Modal.tsx","components/game-compass/GameCompassHintsAndDescriptionModal.tsx","components/game-compass/GameCompassPreGame.tsx","components/game-compass/GameCompassGame.tsx","components/game-compass/GameCompassSuccess.tsx","components/game-compass/GameCompass.tsx","components/game-gunpowder/GameGunpowderCover.tsx","components/game-gunpowder/GameGunpowderFail.tsx","components/game-gunpowder/GameGunpowderGameLane.tsx","components/game-gunpowder/GameGunpowderHintsAndDescriptionModal.tsx","components/game-gunpowder/GameGunpowderPreGame.tsx","components/game-gunpowder/GameGunpowderGame.tsx","components/game-gunpowder/GameGunpowderSuccess.tsx","components/game-gunpowder/GameGunpowder.tsx","components/game-paper-making/GamePaperMakingCover.tsx","components/game-paper-making/GamePaperMakingFail.tsx","components/ui/LottieDiv.tsx","components/game-paper-making/GamePaperMakingHintsAndDescriptionModal.tsx","components/game-paper-making/GamePaperMakingPreGame.tsx","components/game-paper-making/GamePaperMakingGame.tsx","components/game-paper-making/GamePaperMakingSuccess.tsx","components/game-paper-making/GamePaperMaking.tsx","components/game-printing/GamePrintingCover.tsx","components/game-printing/GamePrintingFail.tsx","components/game-printing/MovableTypePrintingProvider.tsx","components/game-printing/GamePrintingControlConfirm.tsx","components/game-printing/GamePrintingMovableTypePreview.tsx","components/game-printing/GamePrintingMovableType.tsx","components/game-printing/GamePrintingMovableTypes.tsx","components/game-printing/GamePrintingPrintResult.tsx","components/game-printing/GamePrintingPrintSample.tsx","components/game-printing/GamePrintingSquare.tsx","components/game-printing/GamePrintingSquares.tsx","components/game-printing/GamePrintingControl.tsx","components/game-printing/GamePrintingHintsAndDescriptionModal.tsx","components/game-printing/GamePrintingPreGame.tsx","components/game-printing/GamePrintingGame.tsx","components/game-printing/GamePrintingSuccess.tsx","components/game-printing/GamePrinting.tsx","components/GameCover.tsx","components/ui/DevPanel.tsx","components/Main.tsx","App.tsx","libs/ImagePreloader.ts","reportWebVitals.ts","index.tsx"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","DEFAULTCONTEXT","json","imgFolder","setBg","_json","_imgFolder","_segment","setSegment","BackgroundContext","createContext","BackgroundProvider","props","useState","value","setValue","useEffect","newImgFolder","segment","Provider","children","INITIAL_STATE","status","GameStateReducer","state","action","type","data","difficulty","GameDifficultyReducer","InitState","sample","Reducer","assign","text","ContextStore","React","SampleInitState","game","State_Initial","gameDifficulty","Difficulty_Initial","dispatch","obj","useGameContext","useContext","GameProvider","dispatchs","useReducer","SampleReducer","sampleState","sampleDispatch","gameState","gameStateDispatch","gameDifficultyDispatch","i","length","bg","Audio","process","click","failed","scoreBoard","success","playClick","console","log","play","then","warn","playFailed","playScoreBoard","playSuccess","AudioContext","started","AudioProvider","loop","tryStartBgMusic","document","addEventListener","SvgButton","prefix","src1","src","setSrc","className","style","alt","onMouseEnter","src2","onMouseLeave","GameCompassCover","_props","onClick","GameCompassFail","CountDown","stopped","duration","timesout","time","setTime","setInterval","clearInterval","Math","floor","toString","padStart","defaultProps","memo","Modal","parent","el","useMemo","createElement","target","appendChild","querySelector","classList","split","forEach","item","push","add","removeChild","ReactDOM","createPortal","GameCompassHintsAndDescriptionModal","modalShow","setModalShow","GameCompassPreGame","setStatus","ShowMessage","onFinish","ShowMessage1","ShowMessage2","NAUTICALCHARTS","1","pos","dir","3","DirectionOrder","DirectionCheckMapGenerator","Array","fill","_x","rowIndex","_y","colIndex","flat","DirectionCheckMap","GameCompassGame","setStarted","random","nauticalChart","currentPos","setCurrentPos","currentDir","setCurrentDir","shipState","setShipState","shipMoveState","setShipMoveState","controlsDisabled","onControlClick","direction","nextPos","indexOf","setTimeout","clss","x","join","GameCompassSuccess","GameCompass","GameGunpowderCover","GameGunpowderFail","GameGunpowderGameLane","targetStatus","setTargetStatus","cursorStatus","setCursorStatus","cannonStatus","setCannonStatus","cannonballStatus","setCannonballStatus","interval","lane","onSuccess","onFail","GameGunpowderHintsAndDescriptionModal","lives","StatusMap","message","next","GameGunpowderDescription","ShowModal","dangerouslySetInnerHTML","__html","GameGunpowderGame","setLives","successCount","useRef","onLaneSuccess","laneIndex","current","onLaneFail","l","GameGunpowderPreGame","GameGunpowderSuccess","GameGunpowder","GamePaperMakingCover","GamePaperMakingFail","forwardRef","lottieDiv","animationData","jsonName","imgFolderName","require","assets","a","u","requireAnimationData","defaultOptions","autoplay","rendererSettings","preserveAspectRatio","options","speed","ref","anim","playSegments","setSpeed","GamePaperMakingHintsAndDescriptionModal","GamePaperMakingDescription","ShowIntro","GamePaperMakingGame","sort","stepRandomPosition","setStepRandomPosition","barItemsState","setBarItemsState","paperIndex","setPaperIndex","currentStep","setCurrentStep","n","stepIndex","LottieDiv","GamePaperMakingPreGame","GamePaperMakingSuccess","GamePaperMaking","GamePrintingCover","GamePrintingFail","ItemTypes","theText","total","answers","answersUpdated","Date","now","_v","setAnswer","_index","_answer","MovableTypePrintingContext","MovableTypePrintingProvider","index","answer","newAnswers","slice","showBtn","setShowBtn","filter","ans","onConfirm","usePreview","GamePrintingMovableTypePreview","display","progressIndex","imgIndex","match","GamePrintingMovableType","useDrag","collect","monitor","body","userSelect","isDragging","end","_item","_monitor","undefined","squareIndex","drag","isDropped","setIsDropped","some","data-text","data-index","posAlias","opacity","movableTypePos","setMovableTypePos","ceil","_","t","GamePrintingPrintResult","onEnd","squaresByColumn","setSquaresByColumn","fliped","setFliped","brushUsed","setBrushUsed","tools","setTools","theAnswer","slideIn","flipIn","clearTimeout","squares","columnIndex","GamePrintingPrintSampleResult","printResult","useDrop","accept","drop","isOver","canDrop","child","temp","GamePrintingSquares","GamePrintingSquare","THE_TEXTS_EASY","THE_TEXTS_HARD","GamePrintingControl","theTexts","setTheTexts","setTheText","showPrintResult","setShowPrintResult","ansCorrect","setAnsCorrect","DndProvider","backend","TouchBackend","enableMouseEvents","correct","GamePrintingDescription","GamePrintingGame","setStopped","GamePrintingHintsAndDescriptionModal","GamePrintingPreGame","GamePrintingSuccess","GamePrinting","GameCover","right","top","width","height","backgroundImage","bottom","left","DevPanel","Background","Main","position","App","picture","Image","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.90e86dc8.chunk.js","sourcesContent":["var map = {\n\t\"./1-game-cover/cover-background.bak.json\": 132,\n\t\"./1-game-cover/cover-background.json\": 133,\n\t\"./game-compass/game2-cover-background.json\": 134,\n\t\"./game-compass/game2-fail-background.json\": 135,\n\t\"./game-compass/game2-success-background.json\": 136,\n\t\"./game-gunpowder/game4-cover-background.json\": 137,\n\t\"./game-gunpowder/game4-fail-background.json\": 138,\n\t\"./game-gunpowder/game4-success-background.json\": 139,\n\t\"./game-paper-making/game1-cover-background.json\": 140,\n\t\"./game-paper-making/game1-fail-background.json\": 141,\n\t\"./game-paper-making/game1-step1.json\": 142,\n\t\"./game-paper-making/game1-step2.json\": 143,\n\t\"./game-paper-making/game1-step3.json\": 144,\n\t\"./game-paper-making/game1-step4.json\": 145,\n\t\"./game-paper-making/game1-step5.json\": 146,\n\t\"./game-paper-making/game1-step6.json\": 147,\n\t\"./game-paper-making/game1-success-background.json\": 148,\n\t\"./game-printing/game3-cover-background.json\": 149,\n\t\"./game-printing/game3-fail-background.json\": 150,\n\t\"./game-printing/game3-success-background.json\": 151\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 131;","import { createContext, ReactNode, useEffect, useState } from 'react';\r\n\r\ninterface Props {\r\n children: ReactNode,\r\n}\r\n\r\ninterface Context {\r\n json: null | string,\r\n imgFolder: null | string,\r\n segment?: [number, number],\r\n setBg: (json: null | string, imgFolder?: string, segment?: [number, number]) => void,\r\n setSegment: (segment: [number, number]) => void,\r\n}\r\n\r\nconst DEFAULTCONTEXT: Context = {\r\n json: '1-game-cover/cover-background',\r\n imgFolder: '1-game-cover/background',\r\n setBg: (_json: null | string, _imgFolder?: string, _segment?: [number, number]) => { },\r\n setSegment: (_segment: [number, number]) => { },\r\n};\r\n\r\nexport const BackgroundContext = createContext(DEFAULTCONTEXT);\r\n\r\nexport default function BackgroundProvider(props: Props) {\r\n const [value, setValue] = useState(DEFAULTCONTEXT);\r\n\r\n useEffect(() => {\r\n setValue(o => ({\r\n ...o,\r\n setBg: (json: null | string, newImgFolder?: string, segment?: [number, number]) => {\r\n // console.log('setBg', json, newImgFolder);\r\n setValue(o => ({ ...o, segment, json, imgFolder: newImgFolder ?? json }))\r\n },\r\n setSegment: (segment: [number, number]) => setValue(o => ({ ...o, segment })),\r\n }))\r\n }, []);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","export const DevStateComMap = {\r\n 'game-cover': 'GameCover',\r\n 'game-index': 'GameIndex',\r\n //\r\n 'game-hunting': 'GameHunting',\r\n 'game-paper-making': 'GamePaperMaking',\r\n 'game-compass': 'GameCampus',\r\n 'game-printing': 'GamePrinting',\r\n 'game-gunpowder': 'GameGunpowder',\r\n //\r\n}\r\n\r\nexport type GameState = \"cover\" | \"intro\" | \"description\" | \"messages\" | \"hints\" | \"success\" | \"fail\";\r\n\r\nexport type State =\r\n | { status: 'game-cover', data?: any }\r\n | { status: 'game-paper-making', state: GameState, data?: any }\r\n | { status: 'game-compass', state: GameState, data?: any }\r\n | { status: 'game-printing', state: GameState, data?: any }\r\n | { status: 'game-gunpowder', state: GameState, data?: any }\r\n\r\nexport type Action =\r\n | { type: 'game-cover', data?: any }\r\n | { type: 'game-paper-making', state: GameState, data?: any }\r\n | { type: 'game-compass', state: GameState, data?: any }\r\n | { type: 'game-printing', state: GameState, data?: any }\r\n | { type: 'game-gunpowder', state: GameState, data?: any }\r\n\r\nexport const INITIAL_STATE: State = { status: 'game-cover' };\r\n\r\nexport const GameStateReducer = (state: State, action: Action): State => {\r\n switch (action.type) {\r\n case \"game-cover\":\r\n return { ...state, status: action.type };\r\n case \"game-paper-making\":\r\n return { ...state, status: action.type, state: action.state, data: action.data };\r\n case \"game-compass\":\r\n return { ...state, status: action.type, state: action.state, data: action.data };\r\n case \"game-printing\":\r\n return { ...state, status: action.type, state: action.state, data: action.data };\r\n case \"game-gunpowder\":\r\n return { ...state, status: action.type, state: action.state, data: action.data };\r\n }\r\n return state;\r\n};\r\n","export type State =\r\n | { difficulty: 1 }\r\n // | { difficulty: 2 }\r\n | { difficulty: 3 }\r\n\r\nexport type Action =\r\n | \"difficulty-1\"\r\n // | \"difficulty-2\"\r\n | \"difficulty-3\"\r\n\r\nexport const INITIAL_STATE: State = { difficulty: 1 };\r\n\r\nexport function GameDifficultyReducer(state: State, action: Action): State {\r\n switch (action) {\r\n case \"difficulty-1\": return { difficulty: 1 };\r\n // case \"difficulty-2\": return { difficulty: 2 };\r\n case \"difficulty-3\": return { difficulty: 3 };\r\n }\r\n return state;\r\n}\r\n","\r\nexport type State =\r\n | { sample: string }\r\n\r\nexport type Action =\r\n | { action: \"sample\", text: string }\r\n\r\nexport const InitState: State = { sample: 'sample' };\r\n\r\nexport function Reducer(state: State, action: Action): State {\r\n switch (action.action) {\r\n case \"sample\": return Object.assign({}, state, { sample: action.text });\r\n }\r\n return state;\r\n}\r\n","import React, { useContext, useReducer } from 'react';\r\nimport { Action as StateAction, GameStateReducer, INITIAL_STATE as State_Initial } from './GameStateReducer';\r\nimport { Action as DifficultyAction, GameDifficultyReducer, INITIAL_STATE as Difficulty_Initial } from './GameDifficultyReducer';\r\nimport { Action as SampleAction, InitState as SampleInitState, Reducer as SampleReducer } from '../reducers/SampleReducer';\r\n\r\ntype DispatchAction = SampleAction | StateAction | DifficultyAction;\r\n\r\nconst ContextStore = React.createContext({\r\n sample: SampleInitState,\r\n game: State_Initial,\r\n gameDifficulty: Difficulty_Initial,\r\n dispatch: (obj: DispatchAction) => { },\r\n});\r\n\r\nfunction combineDispatchs(dispatchs: Array) {\r\n return function(obj: DispatchAction) {\r\n for (let i = 0; i < dispatchs.length; i++) {\r\n dispatchs[i](obj);\r\n }\r\n };\r\n}\r\n\r\nexport const useGameContext = () => {\r\n const contextStore = useContext(ContextStore)\r\n return contextStore\r\n}\r\n\r\nexport default function GameProvider({ children }: any) {\r\n const [sampleState, sampleDispatch] = useReducer(SampleReducer, SampleInitState);\r\n const [gameState, gameStateDispatch] = useReducer(GameStateReducer, State_Initial);\r\n const [gameDifficulty, gameDifficultyDispatch] = useReducer(GameDifficultyReducer, Difficulty_Initial);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import { createContext, ReactNode, useEffect, useState } from 'react';\r\n\r\ninterface Props {\r\n children: ReactNode,\r\n}\r\n\r\ninterface Context {\r\n bg: HTMLAudioElement,\r\n click: HTMLAudioElement,\r\n failed: HTMLAudioElement,\r\n scoreBoard: HTMLAudioElement,\r\n success: HTMLAudioElement,\r\n\r\n playClick: () => void,\r\n playFailed: () => void,\r\n playScoreBoard: () => void,\r\n playSuccess: () => void,\r\n}\r\n\r\nconst DEFAULTCONTEXT: Context = {\r\n bg: new Audio(process.env.PUBLIC_URL + '/assets/media/bgm.mp3'),\r\n click: new Audio(process.env.PUBLIC_URL + '/assets/media/click.mp3'),\r\n failed: new Audio(process.env.PUBLIC_URL + '/assets/media/failed.mp3'),\r\n scoreBoard: new Audio(process.env.PUBLIC_URL + '/assets/media/score-board.mp3'),\r\n success: new Audio(process.env.PUBLIC_URL + '/assets/media/success.mp3'),\r\n\r\n playClick: function() { console.log('playClick'); try { (DEFAULTCONTEXT.click).play().then(() => { }); } catch (e) { console.warn(e) } },\r\n playFailed: function() { console.log('playFailed'); try { (DEFAULTCONTEXT.failed).play().then(() => { }); } catch (e) { console.warn(e) } },\r\n playScoreBoard: function() { console.log('playScoreBoard'); try { (DEFAULTCONTEXT.scoreBoard).play().then(() => { }); } catch (e) { console.warn(e) } },\r\n playSuccess: function() { console.log('playSuccess'); try { (DEFAULTCONTEXT.success).play().then(() => { }); } catch (e) { console.warn(e) } },\r\n};\r\n\r\nexport const AudioContext = createContext(DEFAULTCONTEXT);\r\n\r\nlet started = false;\r\n\r\nexport default function AudioProvider(props: Props) {\r\n const [value] = useState(DEFAULTCONTEXT);\r\n\r\n useEffect(() => {\r\n // console.log(`AudioProvider`, value);\r\n value.bg.loop = true;\r\n value.bg.play().then(() => { })\r\n\r\n const tryStartBgMusic = () => {\r\n if (!started) {\r\n value.bg.play().then(() => { started = true });\r\n }\r\n }\r\n document.addEventListener('touchstart', tryStartBgMusic)\r\n document.addEventListener('mousedown', tryStartBgMusic)\r\n document.addEventListener('click', tryStartBgMusic)\r\n document.addEventListener('keydown', tryStartBgMusic)\r\n\r\n return () => {\r\n\r\n }\r\n }, [value.bg]);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import { CSSProperties, useState } from 'react';\r\n\r\nfunction SvgButton(props: { className?: string, style?: CSSProperties, prefix: string, src1: string, src2: string, alt: string }) {\r\n const [src, setSrc] = useState(props.prefix + props.src1);\r\n\r\n return (\r\n {props.alt}\r\n setSrc(props.prefix + props.src2)}\r\n onMouseLeave={() => setSrc(props.prefix + props.src1)}\r\n />\r\n )\r\n}\r\n\r\nexport default (SvgButton);\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameCompassCoverProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameCompassCover(_props: GameCompassCoverProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { gameDifficulty, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-compass/game2-cover-background', 'game-compass/game2-cover-background/images');\r\n }, [setBg]);\r\n\r\n return (\r\n
\r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameCompassCover;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameCompassFailProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameCompassFail(_props: GameCompassFailProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-compass/game2-fail-background', 'game-compass/game2-fail-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameCompassFail;\r\n","import { memo, useEffect, useState } from 'react';\r\nimport \"./CountDown.scss\";\r\n\r\ninterface CountDownProp {\r\n started?: boolean,\r\n stopped?: boolean,\r\n duration: number,\r\n timesout: () => void,\r\n}\r\nfunction CountDown(props: CountDownProp) {\r\n const { started, stopped, duration, timesout } = props;\r\n const [time, setTime] = useState(duration);\r\n\r\n // console.log('CountDown');\r\n useEffect(() => {\r\n if (started && !stopped) {\r\n // console.log('CountDown useEffect', time);\r\n let i: NodeJS.Timeout = setInterval(() => {\r\n if (0 >= time) {\r\n i && clearInterval(i);\r\n timesout();\r\n } else {\r\n setTime((o) => o - 1);\r\n }\r\n }, 1000);\r\n return () => {\r\n // console.log('CountDown useEffect return');\r\n clearInterval(i);\r\n }\r\n }\r\n }, [started, stopped, time, timesout]);\r\n\r\n useEffect(() => {\r\n setTime(duration);\r\n }, [started, duration]);\r\n\r\n return (\r\n
\r\n
\r\n
{Math.floor(time / 60).toString().padStart(2, \"0\")}
\r\n
:
\r\n
{(time % 60).toString().padStart(2, \"0\")}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nCountDown.defaultProps = {\r\n started: true,\r\n stopped: false,\r\n duration: 60,\r\n} as CountDownProp;\r\n\r\nexport default memo(CountDown);\r\n","// imports\r\nimport React, {ReactNode} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\n// export function\r\n// get parent and className props as well as the children\r\nexport default function Modal({ children, parent, className }: {\r\n children?: ReactNode,\r\n parent?: HTMLElement | null,\r\n className?: string,\r\n}) {\r\n // Create div to contain everything\r\n const el = React.useMemo(() => document.createElement(\"div\"), []);\r\n // On mount function\r\n React.useEffect(() => {\r\n // work out target in the DOM based on parent prop\r\n const target = parent && parent.appendChild ? parent : document.querySelector('.App') as HTMLDivElement;\r\n // Default classes\r\n const classList = [\"modal-container\"];\r\n // If className prop is present add each class the classList\r\n if (className) className.split(\" \").forEach((item) => classList.push(item));\r\n classList.forEach((item) => el.classList.add(item));\r\n // Append element to dom\r\n target.appendChild(el);\r\n // On unmount function\r\n return () => {\r\n // Remove element from dom\r\n target.removeChild(el);\r\n };\r\n }, [el, parent, className]);\r\n // return the createPortal function\r\n return ReactDOM.createPortal(children, el);\r\n}\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameCompassHintsAndDescriptionModalProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nfunction GameCompassHintsAndDescriptionModal(_props: GameCompassHintsAndDescriptionModalProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [modalShow, setModalShow] = useState(false);\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {modalShow\r\n ? \r\n
\r\n \r\n
\r\n

進入遊戲畫面後,會顯示船隻及羅盤指針‧
同學需要控制羅盤,點擊東南西北‧
找出正確的航海方位‧

\r\n
\r\n
\r\n
\r\n : null}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default GameCompassHintsAndDescriptionModal;\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameCompassPreGameProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish: () => void;\r\n}\r\n\r\nfunction GameCompassPreGame(props: GameCompassPreGameProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [status, setStatus] = useState<'message' | 'message-1' | 'message-2' | ''>('message');\r\n\r\n const ShowMessage = () => {\r\n return
\r\n \r\n
\r\n

\r\n 早於中國的戰國時期,\r\n
已經有人利用磁石製成司南,\r\n
即是羅盤的前身。\r\n
宋代時,宋人將磁石技術改進,\r\n
把磁性鐵片改為磁鋼針,製造出指南針。後來人們將指南針定在方位盤裏,製成羅盤。\r\n
羅盤有助辨別方向,是海上航行最重要的儀器。\r\n

\r\n
\r\n \r\n
\r\n }\r\n const ShowMessage1 = () => {\r\n return
\r\n \r\n
\r\n

\r\n 原來這麽有用,快點教我如何使用。\r\n

\r\n
\r\n \r\n
\r\n }\r\n const ShowMessage2 = () => {\r\n return
\r\n \r\n
\r\n

\r\n 好的,你現在就嘗試利用羅盤控制船隻到碼頭吧!\r\n

\r\n
\r\n
\r\n }\r\n\r\n return (\r\n <>\r\n {'' !== status\r\n ? \r\n {'message' === status\r\n ? \r\n : 'message-1' === status\r\n ? \r\n : }\r\n \r\n : null}\r\n \r\n )\r\n}\r\n\r\nexport default GameCompassPreGame;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport CountDown from '../game-common/CountDown';\r\nimport SvgButton from '../ui/SvgButton';\r\nimport GameCompassHintsAndDescriptionModal from './GameCompassHintsAndDescriptionModal';\r\nimport GameCompassPreGame from './GameCompassPreGame';\r\nimport MazeBuilder from './MazeBuilder';\r\n\r\ninterface GameCompassGameProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\ntype TileType = \"dock_v\" | \"dock_v_b\" | \"dock\"\r\n | \"wave\"\r\n | \"dest\"\r\n // | \"dest_up\" | \"dest_right\" | \"dest_bottom\" | \"dest_left\"\r\n // | \"start\"\r\n | \"land\"\r\n // | \"_random_\"\r\n // | \"tile_land\" | \"island-nw\" | \"island-n\" | \"island-ne\" | \"island-w\" | \"island-e\" | \"island-sw\" | \"island-s\" | \"island-se\"\r\n ;\r\n\r\ninterface NauticalCharts { pos: number, dir: 'n' | 'w' | 's' | 'e', map: Array> }\r\nconst NAUTICALCHARTS: { [key: number]: Array } = {\r\n 1: [\r\n {\r\n pos: 6, dir: 'n', map: [\r\n [\"land\"], [\"land\"], [\"dock_v\", \"dest\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], [\"land\"], [\"land\"],\r\n ]\r\n },\r\n {\r\n pos: 6, dir: 'n', map: [\r\n [\"land\"], [\"dock_v\", \"dest\"], [\"land\"],\r\n [\"wave\"], [\"wave\"], [\"land\"],\r\n [\"wave\"], [\"land\"], [\"wave\"],\r\n ]\r\n },\r\n {\r\n pos: 2, dir: 'w', map: [\r\n [\"land\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], [\"wave\"], [\"land\"],\r\n [\"wave\"], [\"dock_v\", \"dest\"], [\"land\"],\r\n ]\r\n },\r\n {\r\n pos: 0, dir: 'e', map: [\r\n [\"wave\"], [\"wave\"], [\"land\"],\r\n [\"land\"], [\"wave\"], [\"wave\"],\r\n [\"dock\", \"dest\"], ['wave'], [\"land\"],\r\n ]\r\n },\r\n {\r\n pos: 0, dir: 'e', map: [\r\n [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"land\"], [\"land\"], [\"wave\"],\r\n [\"dock\", \"dest\"], ['wave'], [\"wave\"],\r\n ]\r\n },\r\n {\r\n pos: 0, dir: 's', map: [\r\n [\"wave\"], [\"land\"], [\"dock_v\", \"dest\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], [\"wave\"],\r\n ]\r\n },\r\n ],\r\n 3: [\r\n {\r\n pos: 0, dir: 's', map: [\r\n [\"wave\"], [\"land\"], [\"land\"], [\"land\"], [\"land\"], [\"dock_v\", \"dest\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n ]\r\n },\r\n {\r\n pos: 3, dir: 's', map: [\r\n [\"wave\"], [\"land\"], [\"land\"], [\"wave\"], [\"land\"], [\"land\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], [\"dock_v_b\", \"dest\"], [\"wave\"],\r\n ]\r\n },\r\n {\r\n pos: 12, dir: 's', map: [\r\n [\"wave\"], [\"land\"], [\"land\"], [\"wave\"], [\"land\"], [\"land\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"land\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], [\"dock_v_b\", \"dest\"], [\"wave\"],\r\n ]\r\n },\r\n {\r\n pos: 6, dir: 's', map: [\r\n [\"wave\"], [\"land\"], [\"land\"], [\"wave\"], [\"land\"], [\"land\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"land\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['wave'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], ['land'], ['wave'], ['wave'], ['wave'], [\"wave\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"land\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], [\"dock_v_b\", \"dest\"], [\"wave\"],\r\n ]\r\n },\r\n {\r\n pos: 11, dir: 's', map: [\r\n [\"land\"], [\"dock_v\", \"dest\"], [\"land\"], [\"wave\"], [\"land\"], [\"land\"],\r\n [\"wave\"], [\"wave\"], [\"wave\"], [\"land\"], [\"land\"], [\"wave\"],\r\n [\"wave\"], ['land'], ['wave'], ['land'], ['land'], [\"wave\"],\r\n [\"wave\"], ['land'], ['land'], ['land'], ['wave'], [\"wave\"],\r\n [\"wave\"], [\"wave\"], [\"land\"], [\"wave\"], [\"wave\"], [\"wave\"],\r\n [\"wave\"], ['wave'], ['wave'], ['wave'], [\"land\"], [\"wave\"],\r\n ]\r\n },\r\n ]\r\n};\r\n//\r\n// const NauticalChartsGenerator: (i: number) => any = (i: number) => {\r\n// let maze = new MazeBuilder(i, i);\r\n// let map: Array> = [];\r\n// maze.maze.slice(1, -1).forEach(x => x.slice(1, -1).forEach(y => map.push(-1 === y.indexOf('wall') ? ['wave'] : ['land'])));\r\n// let pos = 0;\r\n//\r\n// maze.maze.forEach((row, rowIndex) => {\r\n// row.forEach((col, colIndex) => {\r\n// if (-1 !== col.indexOf('entrance')) {\r\n// if (0 === rowIndex) {\r\n// console.log('pos case a');\r\n// pos = colIndex - 1;\r\n// } else if (i * 2 === rowIndex) {\r\n// console.log('pos case b', rowIndex, i, colIndex);\r\n// pos = (rowIndex - 2) * i * 2 + colIndex - 1;\r\n// } else if (0 === colIndex) {\r\n// console.log('pos case c');\r\n// pos = (rowIndex - 1) * i * 2;\r\n// } else if (i * 2 === colIndex) {\r\n// console.log('pos case d');\r\n// pos = (rowIndex - 1) * i * 2 + colIndex - 1;\r\n// }\r\n// } else if (-1 !== col.indexOf('exit')) {\r\n//\r\n// }\r\n// })\r\n// });\r\n//\r\n// console.log(maze.maze, map, pos);\r\n//\r\n// return {\r\n// pos,\r\n// dir: 's',\r\n// map,\r\n// }\r\n// }\r\n\r\n// 0, 1, 2\r\n// 3, 4, 5\r\n// 6, 7, 8\r\nconst DirectionOrder = ['n', 'e', 's', 'w',];\r\nconst DirectionCheckMapGenerator = (i: number) => Array(i).fill(null).map((_x, rowIndex) => Array(i).fill(null).map((_y, colIndex) => ([\r\n 0 === rowIndex ? null : (rowIndex - 1) * i + colIndex,\r\n (i - 1) === colIndex ? null : (rowIndex * i + colIndex + 1),\r\n (i - 1) === rowIndex ? null : ((rowIndex + 1) * i + colIndex),\r\n 0 === colIndex ? null : (rowIndex * i + colIndex - 1),\r\n]))).flat()\r\nconst DirectionCheckMap: { [key: number]: Array> } = {\r\n // 1: [\r\n // [null, 1, 3, null], [null, 2, 4, 0], [null, null, 5, 1],\r\n // [0, 4, 6, null], [1, 5, 7, 3], [2, null, 8, 4,],\r\n // [3, 7, null, null], [4, 8, null, 6], [5, null, null, 7],\r\n // ],\r\n 1: DirectionCheckMapGenerator(3),\r\n 3: DirectionCheckMapGenerator(6),\r\n};\r\n\r\nfunction GameCompassGame(_props: GameCompassGameProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, gameDifficulty, dispatch } = useGameContext();\r\n const [started, setStarted] = useState(false);\r\n // const [stopped, setStopped] = useState(false);\r\n const [nauticalChart] = useState(NAUTICALCHARTS[gameDifficulty.difficulty][Math.floor(Math.random() * NAUTICALCHARTS[gameDifficulty.difficulty].length)]);\r\n // const [nauticalChart] = useState(NauticalChartsGenerator(1 === gameDifficulty.difficulty ? 2 : 3));\r\n const [currentPos, setCurrentPos] = useState(nauticalChart.pos);\r\n const [currentDir, setCurrentDir] = useState(nauticalChart.dir);\r\n const [pinDir, setPinDir] = useState<'' | 'n' | 'e' | 's' | 'w'>('');\r\n const [shipState, setShipState] = useState<'' | 'failed'>('');\r\n const [shipMoveState, setShipMoveState] = useState<'' | 'n' | 'e' | 's' | 'w' | 'n-success' | 'e-success' | 's-success' | 'w-success'>('');\r\n const [controlsDisabled, setControlsDisabled] = useState>(['', '', '', '']);\r\n\r\n useEffect(() => {\r\n if ('game-compass' === game.status) {\r\n setBg(null);\r\n }\r\n // console.log(\"NauticalChartsGenerator\", NauticalChartsGenerator);\r\n console.log(\"nauticalChart\", nauticalChart);\r\n }, [game, setBg]);\r\n\r\n // useEffect(() => {\r\n // if (3 === gameDifficulty.difficulty) {\r\n // setControlsDisabled(DirectionCheckMap[currentPos].map((board) => (null === board) ? 'disabled' : ''));\r\n // } else if (1 === gameDifficulty.difficulty) {\r\n // setControlsDisabled(DirectionCheckMap[currentPos].map((board) => (null === board\r\n // || (-1 === nauticalChart.map[board].indexOf('wave') && -1 === nauticalChart.map[board].indexOf('dest'))\r\n // ) ? 'disabled' : ''));\r\n // }\r\n // }, [currentPos, gameDifficulty.difficulty]);\r\n\r\n const timesout = () => {\r\n dispatch({ type: 'game-compass', state: 'fail' })\r\n }\r\n\r\n const onControlClick = (direction: 'n' | 'e' | 's' | 'w') => () => {\r\n\r\n\r\n\r\n let nextPos = DirectionCheckMap[gameDifficulty.difficulty][currentPos][DirectionOrder.indexOf(direction)];\r\n console.log(DirectionCheckMap[gameDifficulty.difficulty][currentPos], DirectionCheckMap);\r\n\r\n setCurrentDir(direction);\r\n playClick();\r\n // console.log('onControlClick', nextPos, DirectionCheckMap[currentPos], DirectionOrder.indexOf(direction), DirectionCheckMap[currentPos][DirectionOrder.indexOf(direction)]);\r\n if (null === nextPos) {\r\n console.log('failed 1');\r\n setShipState('failed');\r\n setTimeout(() => setShipState(''), 1000);\r\n } else {\r\n if (-1 !== nauticalChart.map[nextPos].indexOf('dest')) {\r\n console.log('success!');\r\n setCurrentDir(direction);\r\n setShipMoveState(direction + \"-success\" as any);\r\n setTimeout(() => {\r\n dispatch({ type: 'game-compass', state: 'success' })\r\n }, 1500);\r\n } else if (-1 === nauticalChart.map[nextPos].indexOf('wave')) {\r\n console.log('failed 2');\r\n setShipState('failed');\r\n setTimeout(() => setShipState(''), 1000);\r\n } else {\r\n console.log(nextPos);\r\n setShipMoveState(direction);\r\n setTimeout(() => {\r\n setCurrentPos(nextPos as number)\r\n setShipMoveState('');\r\n }, 1000);\r\n ;\r\n }\r\n }\r\n }\r\n\r\n const onIntroFinish = () => {\r\n setStarted(true);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n {nauticalChart.map.map(clss =>\r\n
`tile_${x}`).join(' ')}`}>
\r\n )}\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameCompassGame;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameCompassSuccessProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameCompassSuccess(_props: GameCompassSuccessProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-compass/game2-success-background', 'game-compass/game2-success-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameCompassSuccess;\r\n","import { useGameContext } from '../../libs/GameProvider';\r\nimport './GameCompass.scss';\r\nimport GameCompassCover from './GameCompassCover';\r\nimport GameCompassFail from './GameCompassFail';\r\nimport GameCompassGame from './GameCompassGame';\r\nimport GameCompassSuccess from './GameCompassSuccess';\r\n\r\ninterface GameCompassProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n // stage: 0 | 1 | 2;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameCompass(_props: GameCompassProps) {\r\n const { game, gameDifficulty } = useGameContext();\r\n\r\n return (\r\n
\r\n {'game-compass' === game.status ? <>\r\n {'cover' === game.state\r\n ? \r\n : 'fail' === game.state\r\n ? \r\n : 'success' === game.state\r\n ? \r\n : \r\n }\r\n : null}\r\n
\r\n )\r\n}\r\n\r\nexport default GameCompass;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameGunpowderCoverProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameGunpowderCover(_props: GameGunpowderCoverProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { gameDifficulty, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-gunpowder/game4-cover-background', 'game-gunpowder/game4-cover-background/images');\r\n }, [setBg]);\r\n\r\n return (\r\n
\r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameGunpowderCover;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameGunpowderFailProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameGunpowderFail(_props: GameGunpowderFailProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-gunpowder/game4-fail-background', 'game-gunpowder/game4-fail-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameGunpowderFail;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\n\r\ninterface GameGunpowderGameLaneProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n lane: number;\r\n onSuccess: () => void,\r\n onFail: () => void,\r\n}\r\n\r\nfunction GameGunpowderGameLane(props: GameGunpowderGameLaneProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { gameDifficulty } = useGameContext();\r\n const [targetStatus, setTargetStatus] = useState<'' | 'shot' | 'down' | 'disabled'>('');\r\n const [cursorStatus, setCursorStatus] = useState<'' | 'ignite'>('');\r\n const [cannonStatus, setCannonStatus] = useState<'' | 'failed'>('');\r\n const [cannonballStatus, setCannonballStatus] = useState<'' | 'shoot'>('');\r\n\r\n useEffect(() => {\r\n if (3 === gameDifficulty.difficulty) {\r\n const interval = setInterval(() => {\r\n if ('' === targetStatus) {\r\n if (Math.random() > .3) {\r\n setTargetStatus('disabled');\r\n }\r\n } else if ('disabled' === targetStatus) {\r\n setTargetStatus('');\r\n }\r\n }, 1000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [gameDifficulty.difficulty, targetStatus]);\r\n\r\n const onCannonClick = () => {\r\n playClick();\r\n if ('' === targetStatus) {\r\n setCursorStatus('ignite');\r\n setTargetStatus('shot');\r\n setTimeout(() => {\r\n setCannonballStatus('shoot');\r\n\r\n setTimeout(() => {\r\n setTargetStatus('down');\r\n setCursorStatus('');\r\n props.onSuccess();\r\n }, 800);\r\n }, 100);\r\n } else {\r\n setCannonStatus('failed');\r\n setTimeout(() => {\r\n setCursorStatus('');\r\n setCannonStatus('');\r\n }, 300);\r\n props.onFail();\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameGunpowderGameLane;\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameGunpowderHintsAndDescriptionModalProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n lives: number,\r\n}\r\n\r\nfunction GameGunpowderHintsAndDescriptionModal(props: GameGunpowderHintsAndDescriptionModalProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [modalShow, setModalShow] = useState(false);\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
2 ? '' : ' lives-and-hints-counter-used'}`}>
\r\n
1 ? '' : ' lives-and-hints-counter-used'}`}>
\r\n
0 ? '' : ' lives-and-hints-counter-used'}`}>
\r\n
\r\n\r\n \r\n {modalShow\r\n ? \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n : null}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default GameGunpowderHintsAndDescriptionModal;\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameGunpowderDescriptionProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish: () => void;\r\n}\r\n\r\nconst StatusMap = {\r\n '': { className: '', message: null, next: '' },\r\n 'message-1': { className: 'message', message: '火藥是中國古代道士煉丹時,無意中配製出來的易燃爆炸物。
最早出現於唐末,當時士兵以弓箭或拋石機將火孳包投射攻城。
宋代製造「火槍」、「突火槍」、「震天雷」等武器以抵禦外敵。
元代時則發明了火統,它是一種以鐵或銅製造的管型射擊武器,
是世界最早出現的火炮。', next: 'message-2' },\r\n 'message-2': { className: 'message-western', message: '原來火藥威力這麽強大,我長知識了!', next: 'message-3' },\r\n 'message-3': { className: 'message', message: '現在就讓你試試吧!', next: '' },\r\n}\r\n\r\nfunction GameGunpowderDescription(props: GameGunpowderDescriptionProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [status, setStatus] = useState<'message-1' | 'message-2' | 'message-3' | ''>('message-1');\r\n\r\n const ShowModal = () => {\r\n return
\r\n \r\n
\r\n {null !== StatusMap[status].message ?

: null}\r\n
\r\n \r\n
\r\n }\r\n\r\n return (\r\n <>\r\n {'' !== status\r\n ? \r\n \r\n \r\n : null}\r\n \r\n )\r\n}\r\n\r\nexport default GameGunpowderDescription;\r\n","import React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport CountDown from '../game-common/CountDown';\r\nimport GameGunpowderGameLane from './GameGunpowderGameLane';\r\nimport GameGunpowderHintsAndDescriptionModal from './GameGunpowderHintsAndDescriptionModal';\r\nimport GameGunpowderPreGame from './GameGunpowderPreGame';\r\n\r\ninterface GameGunpowderGameProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameGunpowderGame(props: GameGunpowderGameProps) {\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n const [started, setStarted] = useState(false);\r\n const [lives, setLives] = useState(3);\r\n // const [stepRandomPosition, setStepRandomPosition] = useState([1, 2, 3, 4, 5, 6].sort(() => .5 - Math.random()));\r\n // const [barItemsState, setBarItemsState] = useState>(['ready', 'ready', 'ready', 'ready', 'ready', 'ready',]);\r\n const successCount = useRef(0);\r\n // const currentStep = useRef(1);\r\n\r\n useEffect(() => {\r\n console.log(game);\r\n if ('game-gunpowder' === game.status) {\r\n setBg(null);\r\n }\r\n }, [game, setBg]);\r\n\r\n const onLaneSuccess = (laneIndex: number) => () => {\r\n successCount.current += 1;\r\n if (3 === successCount.current) {\r\n setTimeout(() => {\r\n dispatch({ type: 'game-gunpowder', state: 'success' });\r\n }, 300);\r\n }\r\n }\r\n\r\n const onLaneFail = (laneIndex: number) => () => {\r\n if (1 === lives) {\r\n dispatch({ type: 'game-gunpowder', state: 'fail' })\r\n } else {\r\n setLives(l => l - 1);\r\n }\r\n }\r\n\r\n const timesout = () => {\r\n dispatch({ type: 'game-gunpowder', state: 'fail' })\r\n }\r\n\r\n const onIntroFinish = () => {\r\n setStarted(true);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameGunpowderGame;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameGunpowderSuccessProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameGunpowderSuccess(_props: GameGunpowderSuccessProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-gunpowder/game4-success-background', 'game-gunpowder/game4-success-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GameGunpowderSuccess;\r\n","import { useGameContext } from '../../libs/GameProvider';\r\nimport './GameGunpowder.scss';\r\nimport GameGunpowderCover from './GameGunpowderCover';\r\nimport GameGunpowderFail from './GameGunpowderFail';\r\nimport GameGunpowderGame from './GameGunpowderGame';\r\nimport GameGunpowderSuccess from './GameGunpowderSuccess';\r\n\r\ninterface GameGunpowderProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n // stage: 0 | 1 | 2;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GameGunpowder(_props: GameGunpowderProps) {\r\n const { game, gameDifficulty } = useGameContext();\r\n\r\n return (\r\n
\r\n {'game-gunpowder' === game.status ? <>\r\n {'cover' === game.state\r\n ? \r\n : 'fail' === game.state\r\n ? \r\n : 'success' === game.state\r\n ? \r\n : \r\n }\r\n : null}\r\n
\r\n )\r\n}\r\n\r\nexport default GameGunpowder;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePaperMakingCoverProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePaperMakingCover(_props: GamePaperMakingCoverProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { gameDifficulty, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-paper-making/game1-cover-background', 'game-paper-making/game1-cover-background/images');\r\n }, [setBg]);\r\n\r\n return (\r\n
\r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePaperMakingCover;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePaperMakingFailProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePaperMakingFail(_props: GamePaperMakingFailProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-paper-making/game1-fail-background', 'game-paper-making/game1-fail/game1-fail-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePaperMakingFail;\r\n","import { useRef, forwardRef } from 'react';\r\nimport Lottie, { Options } from 'react-lottie';\r\n\r\ninterface LottieDivProps {\r\n json: string,\r\n imgFolder?: string,\r\n segment?: [number, number],\r\n speed?: number,\r\n defaultOptions?: Omit,\r\n}\r\n\r\nexport function requireAnimationData(jsonName: string, imgFolderName: string) {\r\n let animationData = require(`../../assets/${jsonName}.json`)\r\n animationData.assets = animationData.assets.map((a: any) => ({ ...a, u: `${process.env.PUBLIC_URL}/assets/${imgFolderName}/` }));\r\n return animationData;\r\n}\r\n\r\nexport default forwardRef((props: LottieDivProps) => {\r\n const { json, imgFolder, segment } = props;\r\n const lottieDiv = useRef(null)\r\n const animationData = requireAnimationData(json, imgFolder ?? json);\r\n const defaultOptions = {\r\n loop: true,\r\n autoplay: true,\r\n animationData: animationData,\r\n rendererSettings: {\r\n preserveAspectRatio: 'xMidYMid slice'\r\n },\r\n ...props.defaultOptions\r\n }\r\n\r\n // if (segment && null !== lottieDiv) {\r\n // console.log('segment null', lottieDiv);\r\n // setTimeout(() => {\r\n // console.log('segment', segment, lottieDiv);\r\n // // @ts-ignore\r\n // (lottieDiv.current as LottieDiv).anim.playSegments(segment, true);\r\n // }, 300);\r\n // }\r\n\r\n return ( {\r\n if (null !== l) {\r\n lottieDiv.current = l;\r\n // console.log('lottie speed', props.speed, lottieDiv.current);\r\n if (segment) {\r\n (lottieDiv.current as any).anim.playSegments(segment, true);\r\n }\r\n if (props.speed) {\r\n (lottieDiv.current as any).anim.setSpeed(props.speed);\r\n }\r\n }\r\n }} />);\r\n})\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePaperMakingHintsAndDescriptionModalProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n lives: number,\r\n}\r\n\r\nfunction GamePaperMakingHintsAndDescriptionModal(props: GamePaperMakingHintsAndDescriptionModalProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [modalShow, setModalShow] = useState(false);\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
2 ? '' : ' lives-and-hints-counter-used'}`}>
\r\n
1 ? '' : ' lives-and-hints-counter-used'}`}>
\r\n
0 ? '' : ' lives-and-hints-counter-used'}`}>
\r\n
\r\n\r\n \r\n {modalShow\r\n ? \r\n
\r\n \r\n
\r\n
1.顯示一次造紙術次序後進入遊戲
\r\n
2.畫面顯示六個動作
\r\n
3.玩家依正確次序選擇動作
\r\n
4.挑戰一分鐘內完成張數
\r\n
\r\n
\r\n
\r\n : null}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default GamePaperMakingHintsAndDescriptionModal;\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePaperMakingDescriptionProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish: () => void;\r\n}\r\n\r\nfunction GamePaperMakingDescription(props: GamePaperMakingDescriptionProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [status, setStatus] = useState<'message' | 'intro' | ''>('message');\r\n\r\n const ShowMessage = () => {\r\n return
\r\n \r\n
\r\n

使用竹簡紀載書寫實在太麻煩了,
我要研究方法去製作一種簡單方便的材料紀載書寫才行!

\r\n
\r\n \r\n
\r\n }\r\n const ShowIntro = () => {\r\n return
\r\n \r\n
\r\n
\r\n \r\n
\r\n }\r\n\r\n return (\r\n <>\r\n {'' !== status\r\n ? \r\n {'message' === status\r\n ? \r\n : }\r\n \r\n : null}\r\n \r\n )\r\n}\r\n\r\nexport default GamePaperMakingDescription;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport CountDown from '../game-common/CountDown';\r\nimport LottieDiv from '../ui/LottieDiv';\r\nimport GamePaperMakingHintsAndDescriptionModal from './GamePaperMakingHintsAndDescriptionModal';\r\nimport GamePaperMakingPreGame from './GamePaperMakingPreGame';\r\n\r\ninterface GamePaperMakingGameProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePaperMakingGame(props: GamePaperMakingGameProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n const [started, setStarted] = useState(false);\r\n // const [stopped, setStopped] = useState(false);\r\n const [lives, setLives] = useState(3);\r\n const [stepRandomPosition, setStepRandomPosition] = useState([1, 2, 3, 4, 5, 6].sort(() => .5 - Math.random()));\r\n const [barItemsState, setBarItemsState] = useState>(['ready', 'ready', 'ready', 'ready', 'ready', 'ready',]);\r\n const [paperIndex, setPaperIndex] = useState(0);\r\n const [currentStep, setCurrentStep] = useState(0);\r\n\r\n useEffect(() => {\r\n console.log(game);\r\n if ('game-paper-making' === game.status) {\r\n setBg(null);\r\n }\r\n }, [game, setBg]);\r\n\r\n useEffect(() => {\r\n console.log(\"next paper\", paperIndex);\r\n setTimeout(() => {\r\n setCurrentStep(0);\r\n setStepRandomPosition([1, 2, 3, 4, 5, 6].sort(() => .5 - Math.random()));\r\n setBarItemsState(['ready', 'ready', 'ready', 'ready', 'ready', 'ready',]);\r\n }, 500);\r\n }, [paperIndex]);\r\n\r\n useEffect(() => {\r\n if (6 === currentStep) {\r\n setPaperIndex(o => o += 1);\r\n }\r\n }, [barItemsState]);\r\n\r\n useEffect(() => {\r\n console.log('currentStep', currentStep);\r\n if (0 !== currentStep) {\r\n setBarItemsState(o => {\r\n let n = [...o];\r\n n[currentStep - 1] = 'success';\r\n console.log(o, n, currentStep);\r\n return n;\r\n });\r\n }\r\n }, [currentStep]);\r\n\r\n const onStepClick = (stepIndex: number) => {\r\n playClick();\r\n // console.log(stepIndex, currentStep);\r\n if (stepIndex === 1 + currentStep) {\r\n setCurrentStep(o => 1 + o);\r\n } else {\r\n if (1 === lives) {\r\n // dispatch({ type: 'game-paper-making', state: 'fail' })\r\n } else {\r\n // setLives(l => l - 1);\r\n setBarItemsState(o => { let n = [...o]; n[currentStep] = 'fail'; console.log(o, n); return n; });\r\n }\r\n }\r\n // console.log(stepIndex, currentStep.current);\r\n }\r\n\r\n const timesout = () => {\r\n if (0 === paperIndex) {\r\n dispatch({ type: 'game-paper-making', state: 'fail', })\r\n } else {\r\n dispatch({ type: 'game-paper-making', state: 'success', data: paperIndex })\r\n }\r\n }\r\n\r\n const onIntroFinish = () => {\r\n setStarted(true);\r\n }\r\n\r\n console.log('paperIndex: ', paperIndex);\r\n return (\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n
\r\n {[1, 2, 3, 4, 5, 6].map(i =>\r\n
onStepClick(i)}>\r\n \r\n
)}\r\n
\r\n\r\n
\r\n {[1, 2, 3, 4, 5, 6].map(i =>
)}\r\n
\r\n\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePaperMakingGame;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePaperMakingSuccessProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePaperMakingSuccess(_props: GamePaperMakingSuccessProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-paper-making/game1-success-background', 'game-paper-making/game1-success/game1-success-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n

感謝你為我們造了 {game.data} 張紙!

\r\n

促使造紙術廣泛流傳,

\r\n

促進發展。

\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePaperMakingSuccess;\r\n","import { useGameContext } from '../../libs/GameProvider';\r\nimport './GamePaperMaking.scss';\r\nimport GamePaperMakingCover from './GamePaperMakingCover';\r\nimport GamePaperMakingFail from './GamePaperMakingFail';\r\nimport GamePaperMakingGame from './GamePaperMakingGame';\r\nimport GamePaperMakingSuccess from './GamePaperMakingSuccess';\r\n\r\ninterface GamePaperMakingProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n // stage: 0 | 1 | 2;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePaperMaking(_props: GamePaperMakingProps) {\r\n const { game, gameDifficulty } = useGameContext();\r\n\r\n return (\r\n
\r\n {'game-paper-making' === game.status ? <>\r\n {'cover' === game.state\r\n ? \r\n : 'fail' === game.state\r\n ? \r\n : 'success' === game.state\r\n ? \r\n : \r\n }\r\n : null}\r\n
\r\n )\r\n}\r\n\r\nexport default GamePaperMaking;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\nfunction GamePrintingCover() {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { gameDifficulty, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-printing/game3-cover-background', 'game-printing/game3-cover-background/images');\r\n }, [setBg]);\r\n\r\n return (\r\n
\r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePrintingCover;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\nfunction GamePrintingFail() {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-printing/game3-fail-background', 'game-printing/game3-fail-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePrintingFail;\r\n","import React, { createContext, ReactNode, useEffect, useState } from 'react';\r\n\r\nexport const ItemTypes = {\r\n CHARACTER: 'character',\r\n}\r\n\r\nexport interface Item {\r\n // progressIndex: number,\r\n imgIndex: number,\r\n text: string,\r\n posAlias: string,\r\n}\r\n\r\ninterface Props {\r\n children: ReactNode,\r\n // total: number,\r\n theText: string,\r\n}\r\n\r\ninterface Context {\r\n theText: string,\r\n total: number,\r\n answers: Array,\r\n answersUpdated: number,\r\n setValue: (v: Context) => void,\r\n setAnswer: (index: number, answer: null | Item) => void,\r\n}\r\n\r\nconst DEFAULTCONTEXT: Context = {\r\n theText: '',\r\n total: 0,\r\n answers: [],\r\n answersUpdated: Date.now(),\r\n setValue: (_v: Context) => { },\r\n setAnswer: (_index: number, _answer: null | Item) => { },\r\n};\r\n\r\nexport const MovableTypePrintingContext = createContext(DEFAULTCONTEXT);\r\n\r\nexport default function MovableTypePrintingProvider(props: Props) {\r\n const [value, setValue] = useState(DEFAULTCONTEXT);\r\n\r\n useEffect(() => {\r\n console.log('MovableTypePrintingProvider', 'theText', 'useEffect');\r\n setValue(o => ({\r\n ...o,\r\n theText: props.theText,\r\n total: props.theText.length,\r\n answers: Array(props.theText.length).fill(null),\r\n setValue,\r\n setAnswer: (index: number, answer: null | Item) => {\r\n setValue(o => {\r\n let newAnswers = o.answers.slice(0);\r\n newAnswers.forEach((x, i) => { if (answer === x) { newAnswers[i] = null } })\r\n newAnswers[index] = answer;\r\n console.log(o.answers, newAnswers, Date.now());\r\n return {\r\n ...o,\r\n answers: newAnswers,\r\n answersUpdated: Date.now(),\r\n }\r\n })\r\n }\r\n }))\r\n }, [props.theText]);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import { memo, useContext, useEffect, useState } from 'react';\r\nimport { MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePrintingControlConfirmProps {\r\n onConfirm: (correct: boolean) => void,\r\n}\r\n\r\nexport default memo(function GamePrintingControlConfirm(props: GamePrintingControlConfirmProps) {\r\n const { answers, answersUpdated, theText } = useContext(MovableTypePrintingContext);\r\n const [showBtn, setShowBtn] = useState(false);\r\n\r\n useEffect(() => {\r\n console.log('GamePrintingControlConfirm 2', answers.filter(ans => ans).length === theText.length);\r\n setShowBtn(answers.filter(ans => ans).length === theText.length);\r\n }, [answers, answersUpdated, theText.length]);\r\n\r\n const onConfirm = () => {\r\n // console.log(theText, answers.map(a => a ?.text).join(''), theText === answers.map(a => a ?.text).join(''));\r\n props.onConfirm(theText === answers.map(a => a ?.text).join(''));\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n})\r\n","const { usePreview } = require('react-dnd-preview');\r\n\r\nexport default function GamePrintingMovableTypePreview() {\r\n const { display, style, item } = usePreview()\r\n if (!display) {\r\n return null\r\n }\r\n\r\n return
\r\n
\r\n
\r\n
{item.text}
{item.text}
{item.text}
\r\n
\r\n
\r\n
\r\n}\r\n","import { useContext, useEffect, useState } from 'react';\r\nimport { useDrag } from 'react-dnd';\r\nimport { Item, ItemTypes, MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\n\r\ninterface GamePrintingMovableTypeProps extends Item {\r\n squareIndex?: number,\r\n}\r\n\r\nexport default function GamePrintingMovableType(props: GamePrintingMovableTypeProps) {\r\n const { answers, setAnswer } = useContext(MovableTypePrintingContext);\r\n const [{ isDragging }, drag] = useDrag(() => ({\r\n type: ItemTypes.CHARACTER,\r\n item: props,\r\n collect: (monitor) => {\r\n // console.log('abc');\r\n document.body.style.userSelect = 'none';\r\n return ({\r\n isDragging: !!monitor.isDragging()\r\n })\r\n },\r\n end: (_item, _monitor) => {\r\n document.body.style.userSelect = 'auto';\r\n // console.log('end', item, monitor, monitor.didDrop(), props.squareIndex);\r\n\r\n if (undefined !== props.squareIndex) {\r\n // const didDrop = monitor.didDrop()\r\n // if (!didDrop) {\r\n setAnswer(props.squareIndex, null);\r\n // console.log('setAnswer', monitor);\r\n // }\r\n }\r\n },\r\n }))\r\n const [isDropped, setIsDropped] = useState(false);\r\n\r\n useEffect(() => {\r\n setIsDropped(answers.some((ans) => null !== ans && ans.imgIndex === props.imgIndex));\r\n }, [answers, props.imgIndex]);\r\n\r\n return (\r\n
\r\n
\r\n
{props.text}
{props.text}
{props.text}
\r\n
\r\n
\r\n )\r\n}\r\n","import { memo, useContext, useEffect, useState } from 'react';\r\nimport { MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\nimport GamePrintingMovableType from './GamePrintingMovableType';\r\n\r\ninterface GamePrintingMovableTypesProps {\r\n}\r\n\r\nexport default memo(function GamePrintingMovableTypes(props: GamePrintingMovableTypesProps) {\r\n const { theText } = useContext(MovableTypePrintingContext);\r\n const [movableTypePos, setMovableTypePos] = useState>([]);\r\n\r\n useEffect(() => {\r\n // setTheText(PRGRESS_TYPE[props.progressIndex].text);\r\n setMovableTypePos(\r\n ['left', 'right']\r\n .map((dir) => Array(theText.length / 2).fill(0).sort(() => .5 - Math.random()).slice(0, Math.ceil(theText.length / 2)).map((_, i) => `${dir}-${i}`))\r\n .flat()\r\n .sort(() => .5 - Math.random())\r\n );\r\n }, [theText]);\r\n\r\n return (\r\n
\r\n {theText.split('').map((t, i) => )}\r\n
\r\n )\r\n})\r\n","import { useContext, useEffect, useState } from 'react';\r\nimport { MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\n\r\ninterface GamePrintingPrintResultProps {\r\n onEnd: ()=> void,\r\n}\r\nexport default function GamePrintingPrintResult(props: GamePrintingPrintResultProps) {\r\n const { onEnd } = props;\r\n const { answers, total } = useContext(MovableTypePrintingContext);\r\n const [squaresByColumn, setSquaresByColumn] = useState([[]]);\r\n const [fliped, setFliped] = useState<'' | 'hide' | 'slide-in' | 'flip-in'>('');\r\n const [brushUsed, setBrushUsed] = useState<'' | 'used'>('');\r\n const [tools, setTools] = useState<'' | 'used'>('');\r\n const theAnswer = answers.map(a => a?.text).join('');\r\n\r\n useEffect(() => {\r\n // console.log(total);\r\n setSquaresByColumn(Array(2).fill(Array(Math.ceil(total / 2)).fill(null)));\r\n\r\n let brushUsed = setTimeout(() => setBrushUsed('used'), 1000);\r\n let slideIn = setTimeout(() => setFliped('slide-in'), 2000);\r\n let tools = setTimeout(() => setTools('used'), 3000);\r\n let flipIn = setTimeout(() => setFliped('flip-in'), 4000);\r\n let end = setTimeout(() => {\r\n // console.log(1234);\r\n onEnd()\r\n }, 4800);\r\n\r\n return () => {\r\n clearTimeout(brushUsed);\r\n clearTimeout(slideIn);\r\n clearTimeout(tools);\r\n clearTimeout(flipIn);\r\n clearTimeout(end);\r\n }\r\n }, [total, onEnd]);\r\n\r\n return (\r\n <>\r\n
\r\n {/* {theText.split('').map(x =>
{x}
)} */}\r\n {squaresByColumn.map((squares, columnIndex) =>
\r\n {squares.map((_, i) =>
{theAnswer[(1 - columnIndex) * Math.ceil(total / 2) + i]}
)}\r\n
)}\r\n
玩家答案:
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n )\r\n};\r\n","import { useContext, useEffect, useState } from 'react';\r\nimport { MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\n\r\ninterface GamePrintingPrintSampleResultProps {\r\n printResult: boolean,\r\n}\r\n\r\nexport default function GamePrintingPrintSampleResult(props: GamePrintingPrintSampleResultProps) {\r\n const { theText, total } = useContext(MovableTypePrintingContext);\r\n const [squaresByColumn, setSquaresByColumn] = useState>>(null);\r\n\r\n useEffect(() => {\r\n setSquaresByColumn(Array(2).fill(Array(Math.ceil(total / 2)).fill(null)));\r\n }, [total]);\r\n\r\n if (null === squaresByColumn) {\r\n return <>;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n {/* {theText.split('').map(x =>
{x}
)} */}\r\n {squaresByColumn.map((squares, columnIndex) =>
\r\n {squares.map((_, i) =>
{theText[(1 - columnIndex) * Math.ceil(total / 2) + i]}
)}\r\n
)}\r\n
正確答案:
\r\n
\r\n \r\n )\r\n};\r\n","import { memo, useContext } from 'react';\r\nimport { useDrop } from 'react-dnd';\r\nimport { Item, ItemTypes, MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\nimport GamePrintingMovableType from './GamePrintingMovableType';\r\n\r\nexport default memo(function Square(props: { index: number }) {\r\n const { answers, setAnswer } = useContext(MovableTypePrintingContext);\r\n const [{ isOver }, drop] = useDrop(() => ({\r\n accept: ItemTypes.CHARACTER,\r\n drop: (item: Item) => {\r\n setAnswer(props.index, item);\r\n },\r\n collect: monitor => ({\r\n isOver: !!monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n }), [props.index])\r\n\r\n let child = null;\r\n if (answers[props.index]) {\r\n let temp = answers[props.index] as Item;\r\n child = (\r\n \r\n //
\r\n // {temp.imgIndex}\r\n //
\r\n )\r\n }\r\n\r\n return
\r\n {child}\r\n
\r\n}\r\n)\r\n","import { memo, useContext, useEffect, useState } from 'react';\r\nimport { MovableTypePrintingContext } from './MovableTypePrintingProvider';\r\nimport GamePrintingSquare from './GamePrintingSquare';\r\n\r\ninterface GamePrintingSquaresProps {\r\n}\r\n\r\nexport default function GamePrintingSquares(props: GamePrintingSquaresProps) {\r\n const { total } = useContext(MovableTypePrintingContext);\r\n const [squaresByColumn, setSquaresByColumn] = useState([[]]);\r\n\r\n useEffect(() => {\r\n // console.log(total);\r\n setSquaresByColumn(Array(2).fill(Array(Math.ceil(total / 2)).fill(null)));\r\n }, [total]);\r\n\r\n return (
\r\n
\r\n
\r\n {squaresByColumn.map((squares, columnIndex) =>
\r\n {squares.map((_, i) => )}\r\n
)}\r\n
\r\n
\r\n
)\r\n}\r\n","import { useEffect, useState } from 'react';\r\nimport { DndProvider } from 'react-dnd';\r\n// import { HTML5Backend } from 'react-dnd-html5-backend';\r\nimport { TouchBackend } from 'react-dnd-touch-backend';\r\nimport GamePrintingControlConfirm from './GamePrintingControlConfirm';\r\nimport GamePrintingMovableTypePreview from './GamePrintingMovableTypePreview';\r\nimport GamePrintingMovableTypes from './GamePrintingMovableTypes';\r\nimport GamePrintingPrintResult from './GamePrintingPrintResult';\r\nimport GamePrintingPrintSample from './GamePrintingPrintSample';\r\nimport GamePrintingSquares from './GamePrintingSquares';\r\nimport MovableTypePrintingProvider from './MovableTypePrintingProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\n\r\ninterface GamePrintingControlProps {\r\n onConfirm: (correct: boolean) => void,\r\n started: boolean,\r\n // progressIndex: number,\r\n}\r\n\r\nexport const THE_TEXTS = [\r\n { text: '一二三四' },\r\n];\r\n\r\nexport const THE_TEXTS_EASY = [\r\n { text: '一二三四' },\r\n { text: '沙公 ' },\r\n { text: 'STEM' },\r\n { text: 'ABCD' },\r\n { text: 'SPS ' },\r\n { text: '香港 ' },\r\n];\r\nexport const THE_TEXTS_HARD = [\r\n { text: '沙田公立' },\r\n { text: '樂育菁莪' },\r\n { text: '有教無類' },\r\n { text: '身體健康' },\r\n { text: '學業進步' },\r\n];\r\n\r\nexport default function GamePrintingControl(props: GamePrintingControlProps) {\r\n const { gameDifficulty } = useGameContext();\r\n const [theTexts, setTheTexts] = useState((1 === gameDifficulty.difficulty) ? THE_TEXTS_EASY : THE_TEXTS_HARD);\r\n const [theText, setTheText] = useState(theTexts[Math.floor(Math.random() * theTexts.length)].text);\r\n const [showPrintResult, setShowPrintResult] = useState(false);\r\n const [ansCorrect, setAnsCorrect] = useState(false);\r\n\r\n // const { setSegment } = useContext(BackgroundContext);\r\n // const [movableTypePos, setMovableTypePos] = useState(['left', 'right'].map((dir) => [1, 2, 3, 4, 5, 6, 7].sort(() => .5 - Math.random()).slice(0, Math.ceil(theText.length / 2)).map((i) => `${dir}-${i}`)).flat().sort(() => .5 - Math.random()));\r\n\r\n useEffect(() => {\r\n let temp = (1 === gameDifficulty.difficulty) ? THE_TEXTS_EASY : THE_TEXTS_HARD;\r\n setTheTexts(temp);\r\n console.log(temp, temp[Math.floor(Math.random() * theTexts.length)].text);\r\n setTheText(temp[Math.floor(Math.random() * theTexts.length)].text);\r\n setShowPrintResult(false);\r\n // setSegment([0, 120]);\r\n // setMovableTypePos(['left', 'right'].map((dir) => [1, 2, 3, 4, 5, 6, 7].sort(() => .5 - Math.random()).slice(0, Math.ceil(theText.length / 2)).map((i) => `${dir}-${i}`)).flat().sort(() => .5 - Math.random()));\r\n }, [theTexts, gameDifficulty]);\r\n\r\n const onPrintResultEnd = () => {\r\n props.onConfirm(ansCorrect);\r\n }\r\n\r\n const onConfirm = (correct: boolean) => {\r\n setAnsCorrect(correct);\r\n setShowPrintResult(true);\r\n }\r\n console.log('setShowPrintResult', setShowPrintResult);\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n {props.started ? : null}\r\n {showPrintResult ? : }\r\n
\r\n \r\n
\r\n \r\n )\r\n};\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GameCompassHintsAndDescriptionModalProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nfunction GameCompassHintsAndDescriptionModal(props: GameCompassHintsAndDescriptionModalProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [modalShow, setModalShow] = useState(false);\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {modalShow\r\n ? \r\n
\r\n \r\n
\r\n

進入遊戲畫面後,會顯示字粒、掃、墨。
同學需要排好正確字句。

\r\n
\r\n
\r\n
\r\n : null}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default GameCompassHintsAndDescriptionModal;\r\n","import React, { useContext, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport Modal from '../ui/Modal';\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\ninterface GamePrintingDescriptionProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish: () => void;\r\n}\r\n\r\nconst StatusMap = {\r\n '': { className: '', message: null, next: '' },\r\n 'message-1': { className: 'message', message: '印刷術始於隋唐時期,
起初人們利用摹拓原理的雕版印刷。
但由於雕版印刷是一頁一塊木板,
刻錯了便需要重刻新一塊木板,成本高昂。
後來宋代畢昇發明了活字印刷術,
以膠泥取代木板,一泥一字,用火燒成。
印刷時文字可自由調動,靈活及便宜。
', next: 'message-2' },\r\n 'message-2': { className: 'message-western', message: '這種印刷術真的很方便,我長知識了!', next: 'message-3' },\r\n 'message-3': { className: 'message', message: '現在就讓你試試吧!', next: '' },\r\n}\r\n\r\nfunction GamePrintingDescription(props: GamePrintingDescriptionProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const [status, setStatus] = useState<'message-1' | 'message-2' | 'message-3'| ''>('message-1');\r\n\r\n const ShowModal = () => {\r\n return
\r\n \r\n
\r\n {null !== StatusMap[status].message ?

: null}\r\n
\r\n \r\n
\r\n }\r\n\r\n return (\r\n <>\r\n {'' !== status\r\n ? \r\n \r\n \r\n : null}\r\n \r\n )\r\n}\r\n\r\nexport default GamePrintingDescription;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport CountDown from '../game-common/CountDown';\r\nimport GamePrintingControl from './GamePrintingControl';\r\nimport GamePrintingHintsAndDescriptionModal from './GamePrintingHintsAndDescriptionModal';\r\nimport GamePrintingPreGame from './GamePrintingPreGame';\r\n\r\ninterface GamePrintingGameProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePrintingGame(props: GamePrintingGameProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n const [started, setStarted] = useState(false);\r\n const [stopped, setStopped] = useState(false);\r\n // const [lives, setLives] = useState(3);\r\n\r\n useEffect(() => {\r\n console.log(game);\r\n if ('game-printing' === game.status) {\r\n setBg(null);\r\n }\r\n }, [game, setBg]);\r\n\r\n const timesout = () => {\r\n // dispatch({ type: 'game-printing', state: 'fail' })\r\n }\r\n\r\n const onConfirm = (correct: boolean) => {\r\n // playClick();\r\n setStopped(true);\r\n setTimeout(() => {\r\n if (correct) {\r\n dispatch({ type: 'game-printing', state: 'success' });\r\n } else {\r\n dispatch({ type: 'game-printing', state: 'fail' });\r\n }\r\n }, 3000);\r\n }\r\n\r\n const onIntroFinish = () => {\r\n setStarted(true);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePrintingGame;\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AudioContext } from '../../libs/audio-provider';\r\nimport { BackgroundContext } from '../../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport SvgButton from '../ui/SvgButton';\r\n\r\nfunction GamePrintingSuccess() {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { game, dispatch } = useGameContext();\r\n\r\n useEffect(() => {\r\n setBg('game-printing/game3-success-background', 'game-printing/game3-success-background/images');\r\n }, [game, setBg]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default GamePrintingSuccess;\r\n","import { useGameContext } from '../../libs/GameProvider';\r\nimport './GamePrinting.scss';\r\nimport GamePrintingCover from './GamePrintingCover';\r\nimport GamePrintingFail from './GamePrintingFail';\r\nimport GamePrintingGame from './GamePrintingGame';\r\nimport GamePrintingSuccess from './GamePrintingSuccess';\r\n\r\ninterface GamePrintingProps {\r\n children?: React.ReactNode;\r\n style?: React.CSSProperties;\r\n // stage: 0 | 1 | 2;\r\n onFinish?: () => void;\r\n}\r\n\r\nfunction GamePrinting(_props: GamePrintingProps) {\r\n const { game } = useGameContext();\r\n\r\n return (\r\n
\r\n {'game-printing' === game.status ? <>\r\n {'cover' === game.state\r\n ? \r\n : 'fail' === game.state\r\n ? \r\n : 'success' === game.state\r\n ? \r\n : \r\n }\r\n : null}\r\n
\r\n )\r\n}\r\n\r\nexport default GamePrinting;\r\n","import { useContext, useEffect, useState } from 'react';\r\nimport { AudioContext } from '../libs/audio-provider';\r\nimport { BackgroundContext } from '../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../libs/GameProvider\";\r\nimport Modal from './ui/Modal';\r\nimport SvgButton from './ui/SvgButton';\r\n\r\ninterface GameCoverProps {\r\n onClick?: () => void,\r\n}\r\n\r\nexport default function GameCover(props: GameCoverProps) {\r\n const { playClick } = useContext(AudioContext);\r\n const { setBg } = useContext(BackgroundContext);\r\n const { gameDifficulty, dispatch } = useGameContext();\r\n const [modalShow, setModalShow] = useState(false);\r\n\r\n useEffect(() => {\r\n setBg('1-game-cover/cover-background', '1-game-cover/background');\r\n }, [setBg]);\r\n\r\n return (\r\n
\r\n
\r\n {/* */}\r\n \r\n {modalShow\r\n ? \r\n
\r\n \r\n
\r\n

\r\n 四大發明是關於中國科學技術史的一種觀點,
\r\n 是指古代中國的四種發明,
\r\n 一般是指造紙術、指南針、火藥及印刷術。
\r\n 希望透過四款小遊戲幫助學生掌握四大發明的步驟及如何改變日後世界。

\r\n
\r\n
\r\n
\r\n : null}\r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n","import React, { memo } from 'react';\r\nimport { useGameContext } from \"../../libs/GameProvider\";\r\nimport { DevStateComMap } from '../../libs/GameStateReducer';\r\n\r\nfunction DevPanel() {\r\n const { game, dispatch } = useGameContext();\r\n\r\n if ('development' !== process.env.NODE_ENV) {\r\n return <>;\r\n }\r\n\r\n return (\r\n
\r\n {DevStateComMap[game.status]}.tsx [X]\r\n
{JSON.stringify(game, null, 2)}
\r\n \r\n \r\n \r\n {/* */}\r\n
\r\n {['game-paper-making', 'game-compass', 'game-printing', 'game-gunpowder'].map((type: any) =>\r\n
\r\n {type}\r\n {['cover', 'fail'].map((state: any) => )}\r\n \r\n
\r\n )}\r\n
\r\n {/*
\r\n Hints\r\n \r\n \r\n
*/}\r\n
\r\n {/*
\r\n \r\n \r\n
*/}\r\n
\r\n )\r\n}\r\n\r\nexport default memo(DevPanel);\r\n","import React, { useContext } from 'react';\r\nimport { BackgroundContext } from '../libs/BackgroundProvider';\r\nimport { useGameContext } from \"../libs/GameProvider\";\r\nimport GameCompass from \"./game-compass/GameCompass\";\r\nimport GameGunpowder from \"./game-gunpowder/GameGunpowder\";\r\nimport GamePaperMaking from \"./game-paper-making/GamePaperMaking\";\r\nimport GamePrinting from \"./game-printing/GamePrinting\";\r\nimport GameCover from \"./GameCover\";\r\nimport DevPanel from './ui/DevPanel';\r\nimport LottieDiv from './ui/LottieDiv';\r\n\r\nconst Background = () => {\r\n const { json, imgFolder, segment } = useContext(BackgroundContext);\r\n console.log(json);\r\n if (undefined === json || null === json || null === imgFolder) {\r\n return <>;\r\n } else {\r\n return ;\r\n }\r\n}\r\n\r\nexport default function Main() {\r\n const { game } = useGameContext();\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n\r\n {'game-cover' === game.status\r\n ? \r\n : 'game-paper-making' === game.status\r\n ? \r\n : 'game-compass' === game.status\r\n ? \r\n : 'game-printing' === game.status\r\n ? \r\n : 'game-gunpowder' === game.status\r\n ? \r\n :
Wrong Status
\r\n }\r\n\r\n \r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport './App.scss';\r\nimport Main from './components/Main';\r\nimport GameProvider from \"./libs/GameProvider\";\r\nimport AudioProvider from './libs/audio-provider';\r\nimport BackgroundProvider from './libs/BackgroundProvider';\r\nimport ImagePreloader from './libs/ImagePreloader';\r\nimport preval from 'preval.macro'\r\n\r\nconst dateTimeStamp = preval`module.exports = new Date().toISOString();`\r\n\r\nfunction App() {\r\n ImagePreloader();\r\n\r\n console.log('Build date: ', dateTimeStamp, ' @ ', process.env.NODE_ENV);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","export default function ImagePreloader() {\r\n [\r\n process.env.PUBLIC_URL + '',\r\n ].forEach((picture) => {\r\n // console.log(picture);\r\n const img = new Image();\r\n img.src = picture;\r\n });\r\n}\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}