{"version":3,"sources":["Avatar.js","Monster.js","Tile.js","Row.js","Time.js","Board.js","Tutorial.js","Game.js","levels.js","App.js","serviceWorker.js","index.js"],"names":["Avatar","react_default","a","createElement","className","data-x","this","props","x","data-y","y","Component","Monster","mon","classes","concat","prevDir","dir","data-prevdir","data-id","id","Tile","_this","Object","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","tile","React","createRef","state","touched","children","current","childNodes","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","next","done","value","querySelector","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","target","src_Avatar","key","src_Monster","mtargetx","mtargety","monsters","monster","i","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","rm","push","renderMonster","loc","monsterTarget","touchedA","touchedM","type","avatar","getAvatar","getMonster","data-type","data-loc","ref","Row","mc","src_Tile_0","opacity","row","tiles","rid","parseInt","renderTile","Time","endTime","Date","getTime","time","remaining","Math","ceil","countdown","bind","assertThisInitialized","timer","setInterval","clearInterval","now","endLevel","setState","color","style","Board","targetx","targety","monsterState","tileState","move","monsterRun","updateMonster","updateTouchCount","document","addEventListener","monsterRunID","removeEventListener","count","checkForWin","ugs","updateGameStatus","level","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","currentx","currenty","toString","_this2","querySelectorAll","updated","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_loop","getAttribute","targetLoc","calculateTargetLoc","some","random","find","updateBoardStateM","_iterator5","allMons","stillAlive","lives","filter","e","hasMonster","updateBoardState","paint","unpaint","rows","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","src_Row","src_Time","renderRows","Tutorial","show","showTutorial","onClick","gameName","gameVersion","gameHome","Game","name","version","home","gameOver","buttonMessage","seconds","statusCode","statusMessage","tutorial","handleClick","handleKeyPress","handleUserDidSomething","console","log","il","increaseLevel","min","restart","sm","bm","sc","arguments","length","locs","grid","r","num","potentialTargets","reduce","b","floor","initialTiles","getTileState","initialMonsters","getMonsterState","levelNum","src_Tutorial_0","href","rel","data-statuscode","src_Board","levels","App","newLevel","currentLevelIndex","data","elem","cols","getMonsterNum","processLevelData","src_Game","Boolean","window","location","hostname","match","ReactDOM","render","src_App_0","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.7626e569.chunk.js","sourcesContent":["import React, { Component } from 'react'; \r\n\r\nclass Avatar extends Component {\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t)\r\n\t}\t\r\n}\r\n\r\nexport default Avatar;\r\n","import React, { Component } from 'react'; \r\n\r\nclass Monster extends Component {\r\n\trender() {\r\n\t\tconst mon = this.props.mon;\r\n\t\tconst classes = `monster prevDir${mon.prevDir} dir${mon.dir}`;\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default Monster;\r\n","import React, { Component } from 'react'; \r\nimport Avatar from './Avatar.js';\r\nimport Monster from './Monster.js';\r\n\r\nclass Tile extends Component {\t\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.tile = React.createRef();\r\n\t\tthis.state = {\r\n\t\t\ttouched: false\r\n\t\t};\r\n\t}\r\n\t\r\n\thasAvatar(){\r\n\t\tlet children = this.tile.current.childNodes;\r\n\t\tfor (let child of children) {\r\n\t\t\tlet avatar = child.querySelector('.avatar');\r\n\t\t\t\r\n\t\t\tif (avatar) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\thasMonster(){\r\n\t\tlet children = this.tile.current.childNodes;\r\n\t\tfor (let child of children) {\r\n\t\t\tlet monster = child.querySelector('.monster');\r\n\t\t\t\r\n\t\t\tif (monster) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetAvatar(){\r\n\t\tif (this.props.tile.target) {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\t\r\n\trenderMonster(key, mon){\r\n\t\treturn (\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\t\r\n\tgetMonster(){\r\n\t\tlet monsters = [];\r\n\t\tif (this.props.monster) {\r\n\t\t\tlet i = 0;\r\n\r\n\t\t\tfor (let mon of this.props.rm){\r\n\t\t\t\tmonsters.push(this.renderMonster(i, mon));\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn monsters;\r\n\t\t}\r\n\t}\r\n\t\r\n\trender() {\r\n\t\tconst tile = this.props.tile;\r\n\t\t\r\n\t\tconst loc = tile.x + '-' + tile.y;\r\n\t\tconst target = this.props.target ? 'target' : '';\r\n\t\tconst monsterTarget = this.props.monsterTarget ? 'targetM' : '';\r\n\t\tconst touchedA = tile.touchedA ? 'touchedA' : '';\r\n\t\tconst touchedM = tile.touchedM ? 'touchedM' : '';\r\n\t\tconst type = tile.type;\r\n\t\tconst avatar = this.getAvatar();\r\n\t\tconst monster = this.getMonster();\r\n\t\t\r\n\t\tconst classes = `loc ${type} \r\n\t\t\t\t\t\t\t${target}\r\n\t\t\t\t\t\t\t${monsterTarget}\r\n\t\t\t\t\t\t\t${touchedA} \r\n\t\t\t\t\t\t\t${touchedM} \r\n\t\t\t\t\t\t\t${avatar ? 'avatarT' : ''}\r\n\t\t\t\t\t\t\t${monster ? 'monsterT' : ''}`;\r\n\t\t\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{avatar}\r\n\t\t\t\t{monster}\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default Tile;\r\n","import React, { Component } from 'react'; \r\nimport Tile from './Tile.js';\r\n\r\nclass Row extends Component {\r\n\t// renderTile(key, tile, target, monsterTarget, mtx, mty, mc) {\r\n\trenderTile(key, tile, target, monsterTarget, rm, mc) {\r\n\t\treturn(\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\t\r\n\trender() {\r\n\t\tlet id = 0;\r\n\t\tlet row = [];\r\n\t\tfor (let tile of this.props.tiles) {\r\n\t\t\tlet y = this.props.rid;\r\n\t\t\tif (typeof y !== 'number') {\r\n\t\t\t\ty = parseInt(y);\r\n\t\t\t}\r\n\t\t\tlet x = id;\r\n\t\t\tlet key = x + \"-\" + y;\r\n\t\t\tlet monsters = this.props.monsters;\r\n\t\t\tlet monsterTarget = false;\r\n\t\t\tlet mc = 0;\r\n\t\t\tlet rm = [];\r\n\t\t\t\r\n\t\t\tfor (let monster of monsters) {\r\n\t\t\t\tif (typeof monster.mtargetx !== 'number') {\r\n\t\t\t\t\tmonster.mtargetx = parseInt(monster.mtargetx);\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof monster.mtargety !== 'number') {\r\n\t\t\t\t\tmonster.mtargety = parseInt(monster.mtargety);\r\n\t\t\t\t}\r\n\t\t\t\tif (y === monster.mtargety && x === monster.mtargetx) {\r\n\t\t\t\t\tmonsterTarget = true;\r\n\t\t\t\t\tmc++;\r\n\t\t\t\t\trm.push(monster)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// let locClass = tile.type;\r\n\t\t\trow.push(this.renderTile(key, tile, tile.target, monsterTarget, rm, mc));\r\n\t\t\tid++;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{row}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default Row;\r\n","import React, { Component } from 'react'; \r\n\r\nclass Time extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tendTime: new Date().getTime() + parseInt(this.props.time),\r\n\t\t\tremaining: Math.ceil(parseInt(this.props.time)/1000)\r\n\t\t};\r\n\t\t\r\n\t\tthis.countdown = this.countdown.bind(this)\r\n\t}\r\n\t\r\n\tcomponentDidMount(){\t\r\n\t\tthis.timer = setInterval(this.countdown, 1000)\r\n\t}\r\n\r\n\tcomponentWillUnmount(){\r\n\t\tclearInterval(this.timer);\r\n\t}\r\n\t\r\n\tcountdown() {\r\n\t\tconst now = new Date().getTime();\r\n\t\tconst remaining = Math.ceil( (parseInt(this.state.endTime) - now)/1000 );\r\n\t\tlet endLevel = this.props.endLevel;\r\n\t\t\r\n\t\tthis.setState({\r\n\t\t\tremaining: remaining\r\n\t\t});\r\n\t\t\r\n\t\tif (remaining < 0) {\r\n\t\t\tendLevel();\r\n\t\t}\r\n\t}\r\n\t\r\n\trender(){\r\n\t\tconst classes = 'countdown-timer flasher';\r\n\t\tlet color = '#4d807f';\r\n\t\t\r\n\t\tif (this.state.remaining <= 3) {\r\n\t\t\tcolor = 'red'\r\n\t\t}\r\n\t\t\r\n\t\treturn(\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{this.state.remaining}\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\tseconds\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default Time;","import React, { Component } from 'react'; \r\nimport Row from './Row.js';\r\nimport Time from './Time.js';\r\n\r\nclass Board extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\ttargetx: 0,\r\n\t\t\ttargety: 0,\r\n\t\t\ttouched: 1,\r\n\t\t\tmonsterState: this.props.monsters,\r\n\t\t\ttileState: this.props.tiles\r\n\t\t};\r\n\r\n\t\tthis.move = this.move.bind(this);\r\n\t\tthis.monsterRun = this.monsterRun.bind(this);\r\n\t\tthis.updateMonster = this.updateMonster.bind(this);\r\n\t\tthis.updateTouchCount = this.updateTouchCount.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tdocument.addEventListener(\"keydown\", this.move, false);\r\n\t\tthis.monsterRunID = setInterval(this.monsterRun, 1000);\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tdocument.removeEventListener(\"keydown\", this.move, false);\r\n\t\tclearInterval(this.monsterRunID);\r\n\t}\r\n\t\r\n\tupdateTouchCount(count) {\r\n\t\tthis.setState({\r\n\t\t\ttouched: parseInt(this.state.touched) + count\r\n\t\t});\r\n\t\r\n\t\tthis.checkForWin();\r\n\t}\r\n\t\r\n\tcheckForWin() {\r\n\t\tlet ugs = this.props.updateGameStatus;\r\n\t\tif (this.state.touched === this.props.level.tiles) {\r\n\t\t\tugs(true, \"Level Won\", \"Next Level\", 'next-level')\r\n\t\t} \r\n\t}\r\n\t\r\n\tpaint(targetx, targety) {\r\n\t\tconst tiles = this.state.tileState;\r\n\r\n\t\tfor (let row of tiles) {\r\n\t\t\tfor (let tile of row) {\r\n\t\t\t\tif (tile.x == targetx && tile.y == targety) {\r\n\t\t\t\t\ttile.target = true;\r\n\r\n\t\t\t\t\tif (!tile.touchedA) {\r\n\t\t\t\t\t\t//if (!monster) {\r\n\t\t\t\t\t\t\ttile.touchedA = true;\r\n\t\t\t\t\t\t\ttile.touchedM = false;\r\n\t\t\t\t\t\t\tthis.updateTouchCount(1);\r\n\t\t\t\t\t\t\t//}\r\n\t\t\t\t\t} \r\n\t\t\t\t} else {\r\n\t\t\t\t\ttile.target = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn tiles;\r\n\t}\r\n\t\r\n\tunpaint(targetx, targety) {\r\n\t\tconst tiles = this.state.tileState;\r\n\t\t\r\n\t\tfor (let row of tiles) {\r\n\t\t\tfor (let tile of row) {\r\n\t\t\t\tif (tile.x === targetx && tile.y === targety) {\r\n\t\t\t\t\ttile.touchedM = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (tile.touchedA) {\r\n\t\t\t\t\t\ttile.touchedA = false;\r\n\t\t\t\t\t\tthis.updateTouchCount(-1);\r\n\t\t\t\t\t} \r\n\t\t\t\t} \r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn tiles;\r\n\t}\r\n\t\r\n\tcalculateTargetLoc(dir, currentx, currenty) {\r\n\t\tlet targetx;\r\n\t\tlet targety;\r\n\t\tif (typeof dir !== 'string') {\r\n\t\t\tdir = dir.toString(); // always use string comparisons\r\n\t\t}\r\n\t\tif (dir === '1' || dir === \"ArrowRight\" || dir === 'd' || dir === 'D') {\r\n\t\t\t// moving right\r\n\t\t\ttargetx = parseInt(currentx) + 1;\r\n\t\t\ttargety = parseInt(currenty);\r\n\t\t} else if (dir === '2' || dir === \"ArrowDown\" || dir === 's' || dir === 'S') {\r\n\t\t\t// moving down\r\n\t\t\ttargetx = parseInt(currentx);\r\n\t\t\ttargety = parseInt(currenty) + 1;\r\n\t\t} else if (dir === '3' || dir === \"ArrowLeft\" || dir === 'a' || dir === 'A') {\r\n\t\t\t// moving left\r\n\t\t\ttargetx = parseInt(currentx) - 1;\r\n\t\t\ttargety = parseInt(currenty);\r\n\t\t} else if (dir === '4' || dir === \"ArrowUp\" || dir === 'w' || dir === 'W') {\r\n\t\t\t// moving up\r\n\t\t\ttargetx = parseInt(currentx);\r\n\t\t\ttargety = parseInt(currenty) - 1;\r\n\t\t// } else if (dir === 'n' ||dir === 'N') {\r\n\t\t// \t// Goto next level\r\n\t\t// \tlet ugs = this.props.updateGameStatus;\r\n\t\t// \tugs(\r\n\t\t// \t\ttrue,\r\n\t\t// \t\t\"Super Power Activated: Skip to Next Level!\",\r\n\t\t// \t\t\"Next Level\",\r\n\t\t// \t\t'next-level'\r\n\t\t// \t);\r\n\t\t}\r\n\t\t\t \r\n\t\treturn({targetx: targetx, targety: targety})\r\n\t}\r\n\t\r\n\tmonsterRun() {\r\n\t\tlet monsters = document.querySelectorAll('.monster');\r\n\t\tlet updated = [];\r\n\t\t\r\n\t\tfor (let monster of monsters) {\r\n\t\t\tlet dir = parseInt(monster.getAttribute('data-prevdir'));\r\n\t\t\tlet prevDir = dir;\r\n\t\t\tlet id = monster.getAttribute('data-id');\r\n\t\t\tlet currentx = monster.getAttribute('data-x');\r\n\t\t\tlet currenty = monster.getAttribute('data-y');\r\n\r\n\t\t\tlet targetLoc = this.calculateTargetLoc(dir, currentx, currenty);\r\n\t\t\tlet target = document.querySelector(`.tile[data-loc=\"${targetLoc.targetx}-${targetLoc.targety}\"]`);\r\n\t\t\tlet targetx = targetLoc.targetx;\r\n\t\t\tlet targety = targetLoc.targety;\r\n\t\t\t\r\n\t\t\tif (target != null) { // if target exists\r\n\t\t\t\tif (updated.some(mon => mon.mtargetx === targetx && mon.mtargety === targety)) { // if no other monster is aleady heading to this target\r\n\t\t\t\t\tdir = Math.ceil(Math.random() * 4); // proposed tile isn't valid, pick a random new direction\r\n\t\t\t\t\ttargetx = currentx;\r\n\t\t\t\t\ttargety = currenty;\r\n\t\t\t\t} \r\n\t\t\t} else {\r\n\t\t\t\tdir = Math.ceil(Math.random() * 4); // proposed tile isn't valid, pick a random new direction\r\n\t\t\t\ttargetx = currentx;\r\n\t\t\t\ttargety = currenty;\r\n\t\t\t}\r\n\t\t\t\r\n\r\n\t\t\tlet rm = this.state.monsterState.find(mon => mon.id == id);\r\n\t\t\trm.mtargetx = targetx;\r\n\t\t\trm.mtargety = targety;\r\n\t\t\trm.prevDir = prevDir;\r\n\t\t\trm.dir = dir;\r\n\r\n\t\t\tupdated.push(rm);\r\n\t\t\tthis.updateBoardStateM(targetx, targety);\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tmonsterState: updated\r\n\t\t});\r\n\t}\r\n\t\r\n\tupdateMonster(id) {\r\n\t\tconst allMons = this.state.monsterState;\r\n\t\tlet stillAlive = true;\r\n\t\t\r\n\t\tconst monster = allMons.find(mon => mon.id == id);\r\n\t\tmonster.lives = monster.lives - 1;\r\n\t\t\r\n\t\tif (monster.lives === 0) {\r\n\t\t\tstillAlive = false;\r\n\t\t} \r\n\r\n\t\tthis.setState({\r\n\t\t\tmonsterState: allMons.filter(mon => mon.lives > 0)\r\n\t\t});\r\n\r\n\t\t//console.log('Board: updateMonster: id:' + id + ' lives:' + monster.lives + ' stillAlive:' + stillAlive);\r\n\t\treturn stillAlive;\r\n\t}\r\n\t\r\n\tmove(e) {\r\n\t\tlet monster = false;\r\n\t\tlet avatar = document.querySelector('.avatar');\r\n\t\tlet currentx = avatar.getAttribute('data-x');\r\n\t\tlet currenty = avatar.getAttribute('data-y');\r\n\t\t\r\n\t\t//console.log('Board: move: e.key: ' + e.key + ' x:' + currentx + ' y:' + currenty);\r\n\r\n\t\tlet targetLoc = this.calculateTargetLoc(e.key, currentx, currenty);\r\n\t\tlet target = document.querySelector(`.tile[data-loc=\"${targetLoc.targetx}-${targetLoc.targety}\"]`);\r\n\r\n\t\tif (target != null) {\r\n\t\t\tlet hasMonster = target.querySelector('.monster');\r\n\t\t\tif (hasMonster != null) { // you smooshed the monster!\r\n\t\t\t\tlet id = hasMonster.getAttribute('data-id');\r\n\t\t\t\t//console.log('Board: move: you smooshed the monster! id:' + id + ' x:' + currentx + ' y:' + currenty);\r\n\t\t\t\tmonster = this.updateMonster(id)\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.updateBoardState(targetLoc.targetx, targetLoc.targety, monster);\r\n\t\t}\r\n\t}\r\n\t\r\n\tupdateBoardState(targetx, targety, monster) {\r\n\t\t// avatar moved, updating board\r\n\t\tconst x = parseInt(targetx);\r\n\t\tconst y = parseInt(targety);\r\n\t\t\r\n\t\tthis.setState({\r\n\t\t\ttargetx: x,\r\n\t\t\ttargety: y,\r\n\t\t\ttiles: this.paint(x, y)\r\n\t\t});\r\n\t}\r\n\t\r\n\tupdateBoardStateM(targetx, targety) {\r\n\t\t// monster moved, updating board\r\n\t\tconst x = parseInt(targetx);\r\n\t\tconst y = parseInt(targety);\r\n\t\t\r\n\t\tthis.setState({\r\n\t\t\ttileState: this.unpaint(x, y)\r\n\t\t});\r\n\t}\r\n\r\n\t\r\n\trenderRows() {\r\n\t\tlet rows = [];\r\n\t\tlet id = 0;\r\n\t\tfor (let row of this.state.tileState) {\r\n\t\t\trows.push(\r\n\t\t\t);\r\n\t\t\t\r\n\t\t\tid++;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
{this.props.lives}

lives
\r\n\t\t\t\t\t
{this.state.touched}/{this.props.level.tiles}

tiles
\r\n\t\t\t\t\t
\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.renderRows() }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default Board;\r\n","import React, { Component } from 'react'; \r\n\r\nclass Tutorial extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tshow: false\r\n\t\t};\r\n\t\t\r\n\t\tthis.showTutorial = this.showTutorial.bind(this);\r\n\t}\r\n\t\r\n\tshowTutorial() {\r\n\t\tthis.setState({\r\n\t\t\tshow: !this.state.show\r\n\t\t});\r\n\t}\r\n\t\r\n\trender() {\r\n\t\treturn(\r\n\t\t\t
\r\n\t\t\t\t
See tutorial
\r\n\t\t\t\t{ !this.state.show \r\n\t\t\t\t ?\t''\r\n\t\t\t\t :
\r\n\t\t\t\t\t\t

Objective

\r\n\t\t\t\t\t\t

Turn all the tiles blue before the timer runs out.

\r\n\t\t\t\t\t\t

Movement

\r\n\t\t\t\t\t\t

You're the blue dot, on the blue tile in the top left corner. Move with your arrow keys - every tile you touch will turn blue.

\r\n\t\t\t\t\t\t

Watch Out

\r\n\t\t\t\t\t\t

Opposing forces are turning tiles gold. Undo their work by moving over them. If you touch your rivals three times, they disappear.

\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
\r\n\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default Tutorial;","import React, { Component } from 'react';\r\nimport Board from './Board.js';\r\nimport Time from './Time.js';\r\nimport Tutorial from './Tutorial.js';\r\n\r\nconst gameName = 'Paint Run';\r\nconst gameVersion = '1.0.4';\r\nconst gameHome = 'https://github.com/ahl389/paint-run2';\r\n\r\nclass Game extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tname: gameName,\r\n\t\t\tversion: gameVersion,\r\n\t\t\thome: gameHome,\r\n\t\t\tlives: 3,\r\n\t\t\tgameOver: true,\r\n\t\t\tbuttonMessage: \"Begin Game!\",\r\n\t\t\tseconds: this.props.level.time,\r\n\t\t\tstatusCode: 'new-game',\r\n\t\t\tstatusMessage: 'Paint Run',\r\n\t\t\ttutorial: false\r\n\t\t};\r\n\t\t\r\n\t\t\r\n\t\t//this.monsters = this.getInitialMonsterState(this.props.tiles)\r\n\t\tthis.endLevel = this.endLevel.bind(this);\r\n\t\tthis.handleClick = this.handleClick.bind(this);\r\n\t\tthis.handleKeyPress = this.handleKeyPress.bind(this);\r\n\t}\r\n\t\r\n\tcomponentDidMount() {\r\n\t\tdocument.addEventListener(\"keydown\", this.handleKeyPress);\r\n }\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tdocument.removeEventListener(\"keydown\", this.handleKeyPress);\r\n\t}\r\n\r\n\thandleClick(e) {\r\n\t\tconst statusCode = this.state.statusCode;\r\n\t\t//console.log('Game: handleClick: ' + statusCode);\r\n\t\tthis.handleUserDidSomething(statusCode);\r\n\t}\r\n\r\n\thandleKeyPress(e) {\r\n\t\tconst statusCode = this.state.statusCode;\r\n\t\t//console.log('Game: handleKeyPress: e.key: ' + e.key + ' statusCode: ' + statusCode);\r\n\t\tswitch (e.key) {\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t\tcase ' ': // Spacebar\r\n\t\t\tcase 'Enter': // Enter/Return key\r\n\t\t\t\tthis.handleUserDidSomething(statusCode);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\thandleUserDidSomething(statusCode) {\r\n\t\tconsole.log('Game: handleUserDidSomething: ' + statusCode);\r\n\t\tif (statusCode === 'new-game') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tgameOver: false\r\n\t\t\t});\r\n\t\t} else if (statusCode === 'same-level') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tgameOver: false,\r\n\t\t\t\ttouched: 1\r\n\t\t\t});\r\n\t\t} else if (statusCode === 'next-level') {\r\n\t\t\tlet il = this.props.increaseLevel;\r\n\t\t\til();\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tlives: Math.min(this.state.lives + 2, 4),\r\n\t\t\t\tgameOver: false,\r\n\t\t\t\ttouched: 1\r\n\t\t\t});\r\n\t\t} else if (statusCode === 'restart') {\r\n\t\t\tthis.setState({\r\n\t\t\t\tlives: 3,\r\n\t\t\t\tgameOver: false,\r\n\t\t\t\ttouched: 1\r\n\t\t\t});\r\n\r\n\t\t\tlet restart = this.props.restart;\r\n\t\t\trestart();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateGameStatus(gameOver, sm, bm, sc, lives=this.state.lives) {\r\n\t\tthis.setState({\r\n\t\t\tgameOver: gameOver,\r\n\t\t\tstatusMessage: sm,\r\n\t\t\tbuttonMessage: bm,\r\n\t\t\tlives: lives,\r\n\t\t\tstatusCode: sc\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tendLevel() {\r\n\t\tconst lives = this.state.lives - 1;\r\n\t\tconst gameOver = true;\r\n\r\n\t\tlet sm = '';\r\n\t\tlet bm ='';\r\n\t\tlet sc = '';\r\n\t\tif (lives > 0) {\r\n\t\t\tsm = `Out of time, you have ${lives} lives remaining!`;\r\n\t\t\tbm = 'Try again.';\r\n\t\t\tsc = 'same-level';\r\n\t\t} else {\r\n\t\t\tsm = `Game Over`;\r\n\t\t\tbm = 'Play again';\r\n\t\t\tsc = 'restart';\r\n\t\t}\r\n\t\t\r\n\t\tthis.updateGameStatus(gameOver, sm, bm, sc, lives)\r\n\t}\r\n\t\r\n\tgetTileState(locs) {\r\n\t\tconst grid = this.props.level.grid;\r\n\t\tlet tileState = [];\r\n\r\n\t\tfor (let y = 0; y < grid.length; y++) {\r\n\t\t\tlet row = grid[y];\r\n\t\t\tlet r = [];\r\n\r\n\t\t\tfor (let x = 0; x < row.length; x++) {\r\n\t\t\t\tlet type = row[x] ? 'tile' : 'space';\r\n\t\t\t\tlet target = (x == 0 && y == 0) ? true: false;\r\n\t\t\t\tlet touchedA = (x == 0 && y == 0) ? true: false;\r\n\t\t\t\tlet touchedM = false;\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t// for (let loc of locs) {\r\n// \t\t\t\t\tif (loc.x === x && loc.y === y) {\r\n// \t\t\t\t\t\tif (loc.t === 'a') {\r\n// \t\t\t\t\t\t\ttouchedA = true;\r\n// \t\t\t\t\t\t\ttarget = true;\r\n// \t\t\t\t\t\t} else {\r\n// \t\t\t\t\t\t\ttouchedM = true;\r\n// \t\t\t\t\t\t}\r\n// \t\t\t\t\t}\r\n// \t\t\t\t}\r\n\r\n\t\t\t\tr.push({\tx: x,\r\n\t\t\t\t\t\t\ty: y,\r\n\t\t\t\t\t\t\ttype: type,\r\n\t\t\t\t\t\t\ttarget: target,\r\n\t\t\t\t\t\t\ttouchedA: touchedA,\r\n\t\t\t\t\t\t\ttouchedM: touchedM\r\n\t\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\ttileState.push(r)\r\n\t\t}\r\n\r\n\t\treturn tileState;\r\n\t}\r\n\r\n\tgetMonsterState(tiles) {\r\n\t\tconst num = this.props.level.monsters;\r\n\t\t\r\n\t\tlet monsters = [];\r\n\t\tlet flat = tiles.reduce(function(a,b) { return a.concat(b); });\r\n\t\tlet potentialTargets = flat.filter(loc => loc.type == 'tile')\r\n\r\n\t\tfor (let i = 0; i < num; i++) {\r\n\t\t\tconst target = potentialTargets[\r\n\t\t\t\tMath.floor(Math.random() * this.props.level.tiles/2)\r\n\t\t\t\t+ Math.floor(this.props.level.tiles/2)\r\n\t\t\t];\r\n\t\t\t\r\n\t\t\tmonsters.push({\r\n\t\t\t\tmtargetx: target.x,\r\n\t\t\t\tmtargety: target.y,\r\n\t\t\t\tdir: 4,\r\n\t\t\t\tprevDir: 4,\r\n\t\t\t\tlives: 3,\r\n\t\t\t\tid: i\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn monsters;\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst initialTiles = this.getTileState(this.props.level.grid);\r\n\t\tconst initialMonsters = this.getMonsterState(initialTiles);\r\n\r\n\t\tconst ugs = this.updateGameStatus;\r\n\t\tconst endLevel = this.endLevel;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

Level {this.props.level.levelNum}

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.name} v{this.state.version}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{ ! this.state.gameOver \r\n\t\t\t\t ? \r\n\t\t \t\t :
\r\n\t\t\t\t\t\t

{this.state.statusMessage}

\r\n\t\t\t\t\t\t\r\n\t\t\t\t \t{this.state.buttonMessage}\r\n\t\t\t\t \t\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\t\r\n}\r\n\r\nexport default Game;\r\n","// Paint Run - Level Maps\r\n// 1 = tile\r\n// 0 = empty\r\n\r\nvar levels = [{\r\n\t// 4x4\r\n\ttiles: [\r\n\t\t[1,1,1,0],\r\n\t\t[1,0,1,1],\r\n\t\t[1,0,1,0],\r\n\t\t[1,1,1,1],\r\n\t]\r\n},{\r\n\t// 5x5\r\n\ttiles: [\r\n\t\t[1,1,1,1,0],\r\n\t\t[1,0,0,1,1],\r\n\t\t[1,0,1,1,1],\r\n\t\t[1,0,1,0,0],\r\n\t\t[1,1,1,1,0],\r\n\t]\r\n},{\r\n\t// 6x6\r\n\ttiles: [\r\n\t\t[1,1,1,1,0,1],\r\n\t\t[0,0,0,1,1,1],\r\n\t\t[0,0,1,1,1,1],\r\n\t\t[1,0,1,1,0,1],\r\n\t\t[1,1,1,1,0,1],\r\n\t\t[0,1,0,1,1,1]\r\n\t]\r\n},{\r\n\t// 6x7\r\n\ttiles: [\r\n\t\t[1,1,1,1,1,1],\r\n\t\t[0,0,0,1,1,1],\r\n\t\t[0,0,1,1,0,1],\r\n\t\t[1,0,0,1,0,1],\r\n\t\t[1,1,1,1,0,1],\r\n\t\t[0,1,1,1,1,1],\r\n\t\t[1,1,1,0,1,1]\r\n\t]\r\n},{\r\n\t// 7x9\r\n\ttiles: [\r\n\t\t[1,0,1,1,0,1,0],\r\n\t\t[1,0,0,1,1,1,1],\r\n\t\t[1,0,1,1,0,1,1],\r\n\t\t[1,0,1,1,0,1,0],\r\n\t\t[1,1,1,0,0,1,0],\r\n\t\t[0,1,1,0,1,1,1],\r\n\t\t[0,1,0,1,1,1,0],\r\n\t\t[0,1,0,1,0,1,0],\r\n\t\t[0,1,1,1,1,1,1]\r\n\t]\r\n},{\r\n\t// 8x8\r\n\ttiles: [\r\n\t\t[1,0,1,1,1,0,1,0],\r\n\t\t[1,0,0,0,1,1,1,1],\r\n\t\t[1,0,1,1,1,0,1,1],\r\n\t\t[1,0,1,1,1,1,0,1],\r\n\t\t[1,1,1,0,0,0,1,1],\r\n\t\t[0,1,1,0,0,0,1,1],\r\n\t\t[0,1,1,1,0,0,0,0],\r\n\t\t[0,1,0,1,1,1,1,1],\r\n\t]\r\n},{\r\n\t// 10x4\r\n\ttiles: [\r\n\t\t[1,1,1,1,1,1,0,1,0,1],\r\n\t\t[0,1,0,0,1,0,1,1,1,1],\r\n\t\t[1,1,1,1,1,1,1,0,1,0],\r\n\t\t[0,0,1,0,0,1,1,1,1,1],\r\n\t]\r\n},{\r\n\t// 9x9\r\n\ttiles: [\r\n\t\t[1,1,1,1,1,1,1,1,1],\r\n\t\t[1,1,0,0,1,0,0,1,1],\r\n\t\t[1,0,0,0,1,0,0,0,1],\r\n\t\t[1,0,0,1,1,1,0,0,1],\r\n\t\t[1,1,1,1,1,1,1,1,1],\r\n\t\t[1,0,0,1,1,1,0,0,1],\r\n\t\t[1,0,0,0,1,0,0,0,1],\r\n\t\t[1,1,0,0,1,0,0,1,1],\r\n\t\t[1,1,1,1,1,1,1,1,1],\r\n\t]\r\n},{\r\n\t// 5x12\r\n\ttiles: [\r\n\t\t[1,1,1,1,1],\r\n\t\t[1,1,1,1,1],\r\n\t\t[1,1,1,0,1],\r\n\t\t[1,1,0,0,1],\r\n\t\t[1,0,0,0,1],\r\n\t\t[1,0,0,0,1],\r\n\t\t[1,0,0,0,1],\r\n\t\t[1,0,0,0,1],\r\n\t\t[1,0,0,1,1],\r\n\t\t[1,0,1,1,1],\r\n\t\t[1,1,1,1,1],\r\n\t\t[1,1,1,1,1],\r\n\t]\r\n}];\r\n\r\nexport default levels\r\n","import React, { Component } from 'react';\r\n\r\nimport './App.css';\r\nimport './Tile.css';\r\nimport './button.css';\r\nimport './Tutorial.css';\r\nimport Game from './Game.js';\r\nimport levels from './levels.js'\r\n\r\nclass App extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tlevel: 1,\r\n\t\t\tnewLevel: true\r\n\t\t};\r\n\t}\r\n\t\r\n\trestart() {\r\n\t\tthis.setState({\r\n\t\t\tlevel: 1\r\n\t\t});\r\n\t}\r\n\t\r\n\tprocessLevelData() {\r\n\t\tlet currentLevelIndex = this.state.level - 1;\r\n\t\tif (currentLevelIndex >= levels.length) {\r\n\t\t\t// @TODO - no more levels, tell user they won!\r\n\t\t\tthis.restart();\r\n\t\t\tcurrentLevelIndex = 0;\r\n\t\t}\r\n\r\n\t\tlet data = levels[currentLevelIndex].tiles;\r\n\t\tlet tiles = data.reduce(function(a,b) { return a.concat(b); })\r\n \t \t\t\t\t.filter(function(elem) { return elem })\r\n\t\t\t\t\t.length;\r\n\r\n\t\treturn {\r\n\t\t\tlevelNum: this.state.level,\r\n\t\t\tgrid: data,\r\n\t\t\trows: data.length,\r\n\t\t\tcols: data[0].length,\r\n\t\t\ttiles: tiles,\r\n\t\t\ttime: tiles * 750,\r\n\t\t\tmonsters: this.getMonsterNum()\r\n\t\t};\r\n\t}\r\n\t\r\n\tgetMonsterNum() {\r\n\t\tif (this.state.level > 4) {\r\n\t\t\treturn Math.floor(this.state.level/5 + 5)\r\n\t\t} else if (this.state.level > 3) {\r\n\t\t\treturn this.state.level - 1;\r\n\t\t} else {\r\n\t\t\treturn this.state.level;\r\n\t\t}\r\n\t}\r\n\r\n\tincreaseLevel() {\r\n\t\tthis.setState({\r\n\t\t\tlevel: this.state.level+1\r\n\t\t});\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet increaseLevel = this.increaseLevel;\r\n\t\tlet level = this.processLevelData();\r\n\t\tlet restart = this.restart;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}