{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../beardman-header/src/images/beardman-walk-5.png","webpack:///../beardman-header/src/images/beardman-climb-3.png","webpack:///../beardman-header/src/images/wall-switch-3.png","webpack:///../beardman-header/src/images/vertical-ladder-rung.png","webpack:///../beardman-header/src/images/3-way-switch-rect.png","webpack:///../beardman-header/src/images/bulging-production-pipe.png","webpack:///./node_modules/@aneutralgiraffe/audio-unlock/audio-unlock.js","webpack:///../beardman-header/src/js/libs/dom.js","webpack:///../beardman-header/src/js/libs/GameLoop.js","webpack:///../beardman-header/src/js/libs/loadImages.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/images.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/Canvas.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/worldView.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/update.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/SceneEvents.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/entities/Player.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/entities/SwitchBox.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/entities/Ladder.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/entities/FloorSwitchBox.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/entities/index.js","webpack:///../beardman-header/src/js/scenes/SwitchScene/index.js","webpack:///../beardman-header/src/js/scenes/PipeScene/images.js","webpack:///../beardman-header/src/js/scenes/PipeScene/Canvas.js","webpack:///../beardman-header/src/js/scenes/PipeScene/worldView.js","webpack:///../beardman-header/src/js/scenes/PipeScene/update.js","webpack:///../beardman-header/src/js/scenes/PipeScene/SceneEvents.js","webpack:///../beardman-header/src/js/scenes/PipeScene/entities/ProductionPipe.js","webpack:///../beardman-header/src/js/scenes/PipeScene/entities/index.js","webpack:///../beardman-header/src/js/index.js","webpack:///./src/js/index.js","webpack:///../beardman-header/src/js/scenes/PipeScene/index.js"],"names":["enumerable","get","getter","value","key","bind","module","Object","prototype","hasOwnProperty","call","object","property","exports","interactedWith","audioContext","callback","AudioContext","window","webkitAudioContext","state","unlockEvents","onFirstInteraction","resume","then","forEach","unlockEvent","document","removeEventListener","addEventListener","each","items","on","els","event","el","off","ready","init","find","selector","queryRoot","querySelectorAll","findOne","findId","getElementById","inArray","array","indexOf","onTap","tapCallback","console","log","type","preventDefault","offTap","fragment","htmlString","aFragment","createDocumentFragment","innerHTML","make","div","createElement","childNodes","css","styles","keys","style","GameLoop","updateFn","this","lastTimestamp","delta","updateLoop","timestamp","deltaSeconds","paused","requestId","requestAnimationFrame","cancelAnimationFrame","loadImages","imagesToLoad","images","name","url","img","Image","src","onload","loadImage","beardman","beardmanBack","switchBox","ladder","floorSwitchBox","MainCanvas","width","height","canvas","context","getContext","imageSmoothingEnabled","scale","translateX","translateY","camera","setTransform","clear","applyCamera","focus","x","y","clearRect","color","fillStyle","fillRect","thing","frame","row","padX","spriteName","sprite","spriteX","spriteY","drawImage","frameWidth","frameHeight","render","scene","views","afterViewsRender","mainCanvas","save","translate","Math","round","view","drawViews","restore","entities","entity","update","loopDelta","reset","mainRender","addSceneEvents","body","target","nodeName","canvasBox","getBoundingClientRect","clientX","right","clientY","top","bottom","inputDisabled","switchOff","left","elActive","querySelector","classList","remove","add","positionScene","setTimeout","Player","props","assign","speed","climbingDown","walkingToSwitch","toggle2Frames","climbingUpEnter","app","pipeScene","pipeEnd","active","edgeBackwards","steppingBack","bottomEnter","climbingDownExit","climbingUp","flipped","frameA","frameB","toggleRate","sin","Date","flipRender","drawThing","SwitchBox","z","framePadX","Ladder","rungs","FloorSwitchBox","addEntities","player","ladderOffset","ladders","Array","fill","map","index","SwitchScene","initializeDom","gameLoop","elContainer","canvasContainer","dom","appendChild","sceneContainer","zIndex","prevBottomEnter","matchMedia","matches","freshStart","lightTextLeft","className","ProductionPipe","loopProgress","rubbishes","rubbishIndex","push","makeRubbish","random","rubbish","drawCenteredRect","startX","startY","PipeEnd","Scene","scenes","PipeScene","canvasHeight","clientHeight","audioUnlock","elGrid","elSelectedGridItem","loadGame","toggle","location","href","touch","changedTouches","pageX","pageY","tagName","abs"],"mappings":"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","file":"assets/app-9fbf229fdfa85df94752.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","module.exports = \"images/beardman-walk-5-0ba072d28078d98a9f7bf858a61ead84.png\";","module.exports = \"images/beardman-climb-3-3364872a5263018a042afa9d5fab9c7e.png\";","module.exports = \"images/wall-switch-3-b51cadd7f1150e3aee6d24ba6c6ae465.png\";","module.exports = \"images/vertical-ladder-rung-de85038fecff06f39f5b6629d22e521f.png\";","module.exports = \"images/3-way-switch-rect-9614cb0fc1aa2faac53d570b5e060954.png\";","module.exports = \"images/bulging-production-pipe-1dd4bec036a06a91ef363939c4f3f948.png\";","let interactedWith = false;\n\nfunction audioUnlock(audioContext, callback) {\n // Instantiate an audioContext if one wasn't passed\n if (!audioContext) {\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n\n audioContext = false;\n\n if (AudioContext) {\n audioContext = new AudioContext();\n }\n }\n\n // Exit early if context is not suspended\n if (audioContext.state !== 'suspended') {\n if (typeof callback === 'function') {\n callback(audioContext);\n }\n\n return;\n }\n\n const unlockEvents = ['touchstart', 'touchend', 'mousedown', 'keydown'];\n\n // Resume audioContext on first user interaction\n // (audioContext is often suspended by default)\n const onFirstInteraction = () => {\n audioContext.resume().then(() => {\n // Early return if 'resume' callback has already run\n if (interactedWith) return;\n\n // Track the first time this runs to avoid a second run\n interactedWith = true;\n\n if (typeof callback === 'function') {\n callback(audioContext);\n }\n\n // Only need to do this once, so remove listeners\n unlockEvents.forEach((unlockEvent) => {\n document.removeEventListener(unlockEvent, onFirstInteraction);\n });\n });\n };\n\n // Listen for first interaction\n unlockEvents.forEach((unlockEvent) => {\n document.addEventListener(unlockEvent, onFirstInteraction);\n });\n\n return audioContext;\n}\n\nexport default audioUnlock;\n","function domReady(init) {\n document.addEventListener('DOMContentLoaded', init);\n}\n\nfunction find(selector, queryRoot) {\n queryRoot = queryRoot || document;\n\n return queryRoot.querySelectorAll(selector);\n}\n\nfunction findOne(selector, queryRoot) {\n queryRoot = queryRoot || document;\n\n return queryRoot.querySelectorAll(selector)[0];\n}\n\nfunction findId(selector) {\n return document.getElementById(selector);\n}\n\nfunction each(items, callback) {\n if (items[0]) {\n [].forEach.call(items, callback);\n } else {\n callback(items);\n }\n}\n\nfunction on(els, event, callback) {\n each(els, (el) => {\n if (el.addEventListener) {\n el.addEventListener(event, callback);\n }\n });\n}\n\nfunction off(els, event, callback) {\n each(els, (el) => {\n if (el.removeEventListener) {\n el.removeEventListener(event, callback);\n }\n });\n}\n\nfunction inArray(value, array) {\n return [].indexOf.call(array, value) > -1;\n}\n\nfunction onTap(els, callback) {\n const tapCallback = handleTap();\n\n on(els, 'click', tapCallback);\n on(els, 'touchstart', tapCallback);\n\n return tapCallback;\n\n function handleTap() {\n return (event) => {\n console.log('handle tap');\n\n // prevent click event event if triggering event was touchstart\n if (event.type === 'touchstart') {\n event.preventDefault();\n }\n\n callback(event);\n };\n }\n}\n\nfunction offTap(els, callback) {\n off(els, 'click', callback);\n off(els, 'touchstart', callback);\n}\n\nfunction fragment(htmlString) {\n const aFragment = document.createDocumentFragment();\n\n if (htmlString) {\n aFragment.innerHTML = htmlString;\n }\n\n return aFragment;\n}\n\nfunction make(htmlString) {\n const div = document.createElement('div');\n\n if (htmlString) {\n div.innerHTML = htmlString;\n }\n\n return div.childNodes[0];\n}\n\nfunction css(els, styles) {\n each(els, (el) => {\n Object.keys(styles).forEach((property) => {\n el.style[property] = styles[property];\n });\n });\n}\n\nexport default {\n ready: domReady,\n find,\n findOne,\n findId,\n each,\n on,\n off,\n inArray,\n onTap,\n offTap,\n fragment,\n make,\n css,\n};\n","class GameLoop {\n constructor(updateFn) {\n this.lastTimestamp = 0;\n this.delta = 0;\n\n this.updateFn = updateFn;\n\n this.updateLoop = this.updateLoop.bind(this);\n\n this.updateLoop(0);\n }\n\n updateLoop(timestamp) {\n this.delta = timestamp - this.lastTimestamp;\n\n this.lastTimestamp = timestamp;\n\n this.deltaSeconds = this.delta / 1000;\n\n if (!this.paused) this.updateFn(this.delta);\n\n this.requestId = requestAnimationFrame(this.updateLoop);\n }\n\n pause(value) {\n this.paused = value || !this.paused;\n }\n\n stop() {\n cancelAnimationFrame(this.requestId);\n }\n}\n\nexport default GameLoop;\n","function loadImages(imagesToLoad) {\n const images = {};\n\n Object.keys(imagesToLoad).forEach((name) => {\n loadImage(imagesToLoad[name], name, images);\n });\n\n return images;\n}\n\nexport function loadImage(url, name, images) {\n const img = new Image();\n\n // for use from jordanjwatkins.bitbucket.io\n img.src = 'assets/' + url;\n\n // for local dev\n //img.src = url;\n\n img.onload = () => {\n images[name] = img;\n };\n}\n\nexport function flipImage(image, w, h) {\n const tmpCanvas = document.createElement('canvas');\n const tmpContext = tmpCanvas.getContext('2d');\n\n tmpCanvas.width = w;\n tmpCanvas.height = h;\n\n tmpContext.translate(tmpCanvas.width, 0);\n tmpContext.scale(-1, 1);\n\n tmpContext.drawImage(image, 0, 0);\n\n return tmpCanvas.toDataURL();\n}\n\nexport default loadImages;\n","import loadImages from '../../libs/loadImages';\n\nimport beardman from '../../../images/beardman-walk-5.png';\nimport beardmanBack from '../../../images/beardman-climb-3.png';\nimport switchBox from '../../../images/wall-switch-3.png';\nimport ladder from '../../../images/vertical-ladder-rung.png';\nimport floorSwitchBox from '../../../images/3-way-switch-rect.png';\n\nconst imagesToLoad = {\n beardman,\n beardmanBack,\n switchBox,\n ladder,\n floorSwitchBox,\n};\n\nconst images = loadImages(imagesToLoad);\n\nexport default images;\n","import images from './images';\n\nclass MainCanvas {\n constructor({ width = 200, height = 200 } = {}) {\n this.canvas = document.createElement('canvas');\n\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.width = width;\n this.height = height;\n\n this.context = this.canvas.getContext('2d');\n\n this.context.imageSmoothingEnabled = false;\n\n this.scale = 1;\n this.translateX = 0;\n this.translateY = 0;\n\n this.images = images;\n }\n\n reset(camera) {\n // reset canvas transform\n this.context.setTransform(1, 0, 0, 1, 0, 0);\n\n this.clear();\n\n this.applyCamera(camera);\n }\n\n applyCamera({ focus }) {\n this.translateX = -focus.x;\n this.translateY = -focus.y;\n }\n\n clear() {\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n\n testRect(color) {\n this.context.fillStyle = color || '#000';\n\n this.context.fillRect(0, 0, 40, 20);\n }\n\n drawRect({ x, y, color, width = 30, height = 60 }) {\n this.context.fillStyle = color || '#000';\n\n this.context.fillRect(x, y, width, height);\n }\n\n drawCenteredRect({ x, y, color, width = 30, height = 60 }) {\n this.context.fillStyle = color || '#000';\n\n this.context.fillRect(\n x - (width / 2),\n y - (height / 2),\n width,\n height,\n );\n }\n\n drawThing(thing, frame = 0, row = 0, padX = 0) {\n if (thing.spriteName) thing.sprite = images[thing.spriteName];\n\n if (!thing.sprite) return;\n\n const spriteX = thing.x - (thing.width / 2);\n const spriteY = thing.y - (thing.height / 2);\n\n this.context.drawImage(\n thing.sprite,\n\n // sprite frame box\n (frame * thing.frameWidth) + (frame * padX),\n row * thing.frameHeight,\n thing.frameWidth,\n thing.frameHeight,\n\n // position in world\n spriteX, spriteY,\n\n // dimensions in world\n thing.width, thing.height,\n );\n }\n}\n\nexport default MainCanvas;\n","function render(scene, views, afterViewsRender) {\n const { mainCanvas } = scene;\n\n beforeWorldRender(mainCanvas);\n\n drawViews(mainCanvas, views);\n\n if (afterViewsRender) afterViewsRender(mainCanvas);\n\n mainCanvas.context.restore();\n}\n\nfunction beforeWorldRender(canvas) {\n const { context, width, height } = canvas;\n\n context.clearRect(0, 0, width, height);\n\n context.save();\n\n // transform origin to center\n context.translate(Math.round(canvas.width / 2), Math.round(canvas.height / 2));\n\n // user scale\n context.scale(canvas.scale, canvas.scale);\n\n // apply scaled user translate\n context.translate(Math.round(canvas.translateX), Math.round(canvas.translateY));\n}\n\nfunction drawViews(canvas, views) {\n views.forEach(view => canvas.context.drawImage(\n view.canvas.canvas,\n 0, 0, view.canvas.width, view.canvas.height,\n 0, 0, view.canvas.width, view.canvas.height,\n ));\n}\n\nexport default render;\n","import mainRender from './worldView';\n\nfunction update(scene, delta) {\n const { mainCanvas, camera } = scene;\n\n scene.loopDelta = delta;\n\n mainCanvas.reset(camera);\n\n const views = [];\n\n mainRender(scene, views, afterViewsRender.bind(scene));\n}\n\nfunction afterViewsRender() {\n this.entities.forEach((entity) => {\n entity.update(this);\n entity.render(this.mainCanvas);\n });\n}\n\nexport default update;\n","function addSceneEvents(scene) {\n document.body.addEventListener('click', (event) => {\n if (event.target.nodeName !== 'CANVAS') return;\n\n const canvasBox = event.target.getBoundingClientRect();\n\n if (canvasBox) {\n // Check for click on wall switch\n if (\n event.clientX < canvasBox.right &&\n event.clientX > canvasBox.right - 25 &&\n event.clientY > canvasBox.top + 25 &&\n event.clientY < canvasBox.bottom - 15\n ) {\n if (!scene.inputDisabled) scene.switchOff();\n }\n\n // Check for click on 3-way switch\n if (\n event.clientX > canvasBox.left &&\n event.clientX < canvasBox.left + 40 &&\n event.clientY > canvasBox.top + 29 &&\n event.clientY < canvasBox.bottom\n ) {\n //console.log('3 way switch click!');\n const { floorSwitchBox } = scene;\n\n if (floorSwitchBox.frame < 2) {\n floorSwitchBox.frame += 1;\n } else {\n floorSwitchBox.frame = 0;\n }\n\n let elActive = document.body.querySelector('.active');\n\n if (elActive) elActive.classList.remove('active', 'masonry');\n\n if (floorSwitchBox.frame === 0) elActive = document.body.querySelector('.game-media-theme-content');\n if (floorSwitchBox.frame === 1) elActive = document.body.querySelector('.half-rounded-theme-content');\n if (floorSwitchBox.frame === 2) elActive = document.body.querySelector('.half-rounded-theme-content');\n\n\n elActive.classList.add('active');\n\n if (floorSwitchBox.frame === 2) elActive.classList.add('masonry');\n }\n }\n });\n\n window.addEventListener('resize', resizeHandler);\n\n function resizeHandler() {\n scene.positionScene();\n\n // Try with some delay so orientation change resize has time to complete\n setTimeout(() => scene.positionScene(), 300);\n }\n}\n\nexport default addSceneEvents;\n","class Player {\n constructor(props) {\n const frameWidth = 8;\n const frameHeight = 13;\n\n const aspectRatio = frameWidth / frameHeight;\n\n const speed = 0.5;\n\n Object.assign(this, {\n x: 0,\n y: 0,\n spriteName: 'beardmanBack',\n frameWidth,\n frameHeight,\n speed,\n }, props);\n\n this.frame = 1;\n\n this.width = this.height * aspectRatio;\n\n this.climbingDown = false;\n }\n\n flipRender(context) {\n // center on entity\n context.translate(this.x, this.y);\n\n // flip X\n context.scale(-1, 1);\n\n // undo center on entity\n context.translate(-this.x, -this.y);\n }\n\n update(scene) {\n if (this.climbingDown) {\n if (this.y + (this.height / 2) > scene.mainCanvas.height / 2) {\n this.climbingDown = false;\n this.frame = 0;\n\n setTimeout(() => {\n this.spriteName = 'beardman';\n\n setTimeout(() => {\n this.walkingToSwitch = true;\n }, 800);\n }, 300);\n\n return;\n }\n\n this.y += this.speed;\n\n this.toggle2Frames(1, 2);\n\n return;\n }\n\n if (this.climbingUpEnter) {\n if (this.y + (this.height / 2) < scene.mainCanvas.height / 2) {\n this.climbingUpEnter = false;\n this.frame = 0;\n\n setTimeout(() => {\n this.spriteName = 'beardman';\n\n setTimeout(() => {\n this.walkingToSwitch = true;\n }, 800);\n }, 300);\n\n return;\n }\n\n this.y -= this.speed;\n\n this.toggle2Frames(1, 2);\n\n return;\n }\n\n if (this.walkingToSwitch) {\n this.toggle2Frames(1, 2);\n\n this.x += this.speed;\n\n // reached switch\n if (this.x + (this.width / 2) > scene.mainCanvas.width / 2) {\n this.walkingToSwitch = false;\n this.frame = 0;\n\n // turn around\n setTimeout(() => {\n this.spriteName = 'beardmanBack';\n\n // hop to flip switch\n setTimeout(() => {\n this.y -= 5;\n\n setTimeout(() => {\n this.y += 5;\n }, 100);\n }, 400);\n\n // flip switch\n setTimeout(() => {\n scene.switchBox.frame = 0;\n\n document.body.classList.add('flicker-text');\n\n if (this.app && this.app.pipeScene) scene.app.pipeScene.pipeEnd.active = true;\n\n // start backing away\n setTimeout(() => {\n this.spriteName = 'beardman';\n\n this.edgeBackwards();\n }, 500);\n }, 500);\n }, 700);\n }\n\n return;\n }\n\n if (this.steppingBack) {\n this.x -= this.speed;\n\n this.toggle2Frames(1, 2);\n\n if (this.x < 0) {\n this.steppingBack = false;\n this.frame = 0;\n\n setTimeout(() => {\n this.spriteName = 'beardmanBack';\n\n if (scene.bottomEnter) {\n this.climbingDownExit = true;\n } else {\n this.climbingUp = true;\n }\n }, 200);\n }\n }\n\n if (this.climbingUp) {\n this.y -= this.speed;\n\n if (this.y + (this.height / 2) < -scene.mainCanvas.height / 2) {\n this.climbingUp = false;\n\n scene.inputDisabled = false;\n }\n\n this.toggle2Frames(1, 2);\n }\n\n if (this.climbingDownExit) {\n this.y += this.speed;\n\n if (this.y - (this.height / 2) > scene.mainCanvas.height / 2) {\n this.climbingDownExit = false;\n\n scene.inputDisabled = false;\n }\n\n this.toggle2Frames(1, 2);\n }\n }\n\n edgeBackwards() {\n setTimeout(() => {\n this.steppingBack = true;\n\n setTimeout(() => {\n this.frame = 0;\n this.steppingBack = false;\n\n setTimeout(() => {\n this.steppingBack = true;\n\n setTimeout(() => {\n this.frame = 0;\n this.steppingBack = false;\n\n setTimeout(() => {\n this.spriteName = 'beardman';\n this.flipped = true;\n this.steppingBack = true;\n }, 600);\n }, 500);\n }, 500);\n }, 500);\n }, 500);\n }\n\n toggle2Frames(frameA, frameB, toggleRate = 1) {\n if (Math.sin(new Date() / (100 * toggleRate)) > 0) {\n this.frame = frameA;\n } else {\n this.frame = frameB;\n }\n }\n\n render(canvas) {\n const { context } = canvas;\n\n context.save();\n\n if (this.flipped || this.spriteName === 'beardmanBack') this.flipRender(context);\n\n canvas.drawThing(this, this.frame);\n\n context.restore();\n }\n}\n\nexport default Player;\n","class SwitchBox {\n constructor({ x = 0, y = 0 }) {\n this.x = x;\n this.y = y;\n this.z = 3;\n\n this.spriteName = 'switchBox';\n\n this.frameHeight = 5;\n this.frameWidth = 6;\n this.framePadX = 1;\n\n this.width = this.frameWidth * 3;\n this.height = this.frameHeight * 3.5;\n\n this.frame = 0;\n }\n\n update() {\n\n }\n\n render(canvas) {\n canvas.drawThing(this, this.frame, 0, this.framePadX);\n }\n}\n\nexport default SwitchBox;\n","class Ladder {\n constructor({ x = 0, y = 0 }) {\n this.x = x;\n this.y = y;\n this.z = 3;\n\n this.spriteName = 'ladder';\n\n this.frameHeight = 3;\n this.frameWidth = 6;\n\n this.width = this.frameWidth * 3;\n this.height = this.frameHeight * 3;\n\n this.frame = 0;\n\n this.rungs = 6;\n }\n\n update() {\n\n }\n\n render(canvas) {\n canvas.drawThing(this, this.frame);\n }\n}\n\nexport default Ladder;\n","class FloorSwitchBox {\n constructor({ x = 0, y = 0 }) {\n this.x = x;\n this.y = y;\n this.z = 3;\n\n this.spriteName = 'floorSwitchBox';\n\n this.frameHeight = 32;\n this.frameWidth = 49;\n this.framePadX = 1;\n\n const scale = 1;\n\n this.width = this.frameWidth * scale;\n this.height = this.frameHeight * scale;\n\n this.frame = 0;\n }\n\n update() {\n\n }\n\n render(canvas) {\n canvas.drawThing(this, this.frame, 0, this.framePadX);\n }\n}\n\nexport default FloorSwitchBox;\n","import Player from './Player';\nimport SwitchBox from './SwitchBox';\nimport Ladder from './Ladder';\nimport FloorSwitchBox from './FloorSwitchBox';\n\nfunction addEntities(scene) {\n scene.player = new Player({\n y: (scene.bottomEnter) ? scene.mainCanvas.height : -scene.mainCanvas.height,\n height: 30,\n scene,\n });\n\n scene.switchBox = new SwitchBox({\n y: 5,\n x: scene.mainCanvas.width / 2.4,\n scene,\n });\n\n scene.ladder = new Ladder({\n y: -scene.mainCanvas.height,\n scene,\n });\n\n scene.floorSwitchBox = new FloorSwitchBox({ x: -50, y: 18, scene });\n\n const ladderOffset = (scene.bottomEnter) ? 45 : 35;\n\n const ladders = new Array(5).fill(0).map((value, index) => (\n new Ladder({\n y: -scene.mainCanvas.height + ladderOffset + (10 * index),\n scene,\n })\n ));\n\n scene.entities = [\n ...ladders,\n scene.switchBox,\n scene.player,\n scene.floorSwitchBox,\n ];\n}\n\nexport default addEntities;\n","import dom from '../../libs/dom';\nimport GameLoop from '../../libs/GameLoop';\nimport MainCanvas from './Canvas';\nimport update from './update';\nimport addSceneEvents from './SceneEvents';\nimport addEntities from './entities';\n\nclass SwitchScene {\n constructor(app) {\n this.app = app;\n\n const canvasWidth = 150;\n const canvasHeight = 60;\n\n this.mainCanvas = new MainCanvas({ width: canvasWidth, height: canvasHeight });\n\n this.initializeDom();\n\n this.positionScene();\n\n addSceneEvents(this);\n\n // start game loop last\n this.gameLoop = new GameLoop((delta) => {\n update(this, delta);\n });\n }\n\n initializeDom() {\n this.elContainer = document.querySelector('.site-header');\n\n this.canvasContainer = dom.make('
');\n this.canvasContainer.appendChild(this.mainCanvas.canvas);\n\n this.sceneContainer = dom.make('
');\n this.sceneContainer.appendChild(this.canvasContainer);\n\n this.elContainer.appendChild(this.sceneContainer);\n\n this.sceneContainer.style.bottom = '-3px';\n this.sceneContainer.style.zIndex = '100';\n\n setTimeout(() => {\n document.body.classList.add('show-scene');\n }, 300);\n }\n\n positionScene() {\n this.prevBottomEnter = this.bottomEnter;\n\n this.bottomEnter = (window.matchMedia('(max-width: 900px)').matches);\n\n if (this.prevBottomEnter !== this.bottomEnter) this.freshStart();\n\n if (window.matchMedia('(max-width: 700px)').matches) {\n this.sceneContainer.style.left = '30%';\n\n document.body.classList.add('ladder-from-bottom');\n } else if (window.matchMedia('(max-width: 900px)').matches) {\n this.sceneContainer.style.left = 0;\n\n document.body.classList.add('ladder-from-bottom');\n } else {\n const lightTextLeft = document.querySelector('.light-text').getBoundingClientRect().left;\n\n this.sceneContainer.style.left = `${lightTextLeft - this.mainCanvas.width - 15}px`;\n }\n }\n\n freshStart() {\n this.entities = null;\n\n addEntities(this);\n\n this.camera = {\n focus: { x: 0, y: 0 },\n };\n\n document.body.className = '';\n\n this.inputDisabled = true;\n\n setTimeout(() => {\n this.switchOff();\n }, 1500);\n }\n\n switchOff() {\n if (this.app.pipeScene) this.app.pipeScene.pipeEnd.active = false;\n this.inputDisabled = true;\n\n document.body.classList.remove('flicker-text-off');\n document.body.classList.remove('flicker-text');\n\n setTimeout(() => {\n document.body.classList.add('flicker-text-off');\n }, 0);\n\n this.switchBox.frame = 1;\n\n setTimeout(() => {\n this.player.flipped = false;\n this.player.climbingUp = false;\n this.player.steppingBack = false;\n this.player.walkingToSwitch = false;\n this.player.climbingDownExit = false;\n this.player.climbingUpEnter = false;\n this.player.climbingDown = false;\n\n if (this.bottomEnter) {\n this.player.climbingUpEnter = true;\n } else {\n this.player.climbingDown = true;\n }\n }, 1000);\n }\n}\n\nexport default SwitchScene;\n","import loadImages from '../../libs/loadImages';\n\nimport pipeEnd from '../../../images/bulging-production-pipe.png';\n\nconst imagesToLoad = {\n pipeEnd,\n};\n\nconst images = loadImages(imagesToLoad);\n\nexport default images;\n","import images from './images';\n\nclass MainCanvas {\n constructor({ width = 200, height = 200 } = {}) {\n this.canvas = document.createElement('canvas');\n\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.width = width;\n this.height = height;\n\n this.context = this.canvas.getContext('2d');\n\n this.context.imageSmoothingEnabled = false;\n\n this.scale = 1;\n this.translateX = 0;\n this.translateY = 0;\n\n this.images = images;\n }\n\n reset(camera) {\n // reset canvas transform\n this.context.setTransform(1, 0, 0, 1, 0, 0);\n\n this.clear();\n\n this.applyCamera(camera);\n }\n\n applyCamera({ focus }) {\n this.translateX = -focus.x;\n this.translateY = -focus.y;\n }\n\n clear() {\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n\n testRect(color) {\n this.context.fillStyle = color || '#000';\n\n this.context.fillRect(0, 0, 40, 20);\n }\n\n drawRect({ x, y, color, width = 30, height = 60 }) {\n this.context.fillStyle = color || '#000';\n\n this.context.fillRect(x, y, width, height);\n }\n\n drawCenteredRect({ x, y, color, width = 30, height = 60 }) {\n this.context.fillStyle = color || '#000';\n\n this.context.fillRect(\n x - (width / 2),\n y - (height / 2),\n width,\n height,\n );\n }\n\n drawThing(thing, frame = 0, row = 0) {\n if (thing.spriteName) thing.sprite = images[thing.spriteName];\n\n if (!thing.sprite) return;\n\n const spriteX = thing.x - (thing.width / 2);\n const spriteY = thing.y - (thing.height / 2);\n\n this.context.drawImage(\n thing.sprite,\n\n // sprite frame box\n frame * thing.frameWidth,\n row * thing.frameHeight,\n thing.frameWidth,\n thing.frameHeight,\n\n // position in world\n spriteX, spriteY,\n\n // dimensions in world\n thing.width, thing.height,\n );\n }\n}\n\nexport default MainCanvas;\n","function render(scene, views, afterViewsRender) {\n const { mainCanvas } = scene;\n\n beforeWorldRender(mainCanvas);\n\n drawViews(mainCanvas, views);\n\n if (afterViewsRender) afterViewsRender(mainCanvas);\n\n mainCanvas.context.restore();\n}\n\nfunction beforeWorldRender(canvas) {\n const { context, width, height } = canvas;\n\n context.clearRect(0, 0, width, height);\n\n context.save();\n\n // transform origin to center\n context.translate(Math.round(canvas.width / 2), Math.round(canvas.height / 2));\n\n // user scale\n context.scale(canvas.scale, canvas.scale);\n\n // apply scaled user translate\n context.translate(Math.round(canvas.translateX), Math.round(canvas.translateY));\n}\n\nfunction drawViews(canvas, views) {\n views.forEach(view => canvas.context.drawImage(\n view.canvas.canvas,\n 0, 0, view.canvas.width, view.canvas.height,\n 0, 0, view.canvas.width, view.canvas.height,\n ));\n}\n\nexport default render;\n","import mainRender from './worldView';\n\nfunction update(scene, delta) {\n const { mainCanvas, camera } = scene;\n\n scene.loopDelta = delta;\n\n mainCanvas.reset(camera);\n\n const views = [];\n\n mainRender(scene, views, afterViewsRender.bind(scene));\n}\n\nfunction afterViewsRender() {\n this.entities.forEach((entity) => {\n entity.update(this);\n entity.render(this.mainCanvas);\n });\n}\n\nexport default update;\n","function addSceneEvents(scene) {\n /*document.body.addEventListener('click', (event) => {\n\n });\n\n window.addEventListener('resize', resizeHandler);\n\n function resizeHandler() {\n scene.positionScene();\n }*/\n}\n\nexport default addSceneEvents;\n","class ProductionPipe {\n constructor({ x = 0, y = 0, scene } = {}) {\n this.x = x;\n this.y = y;\n this.z = 3;\n\n this.spriteName = 'pipeEnd';\n\n this.frameHeight = 5;\n this.frameWidth = 9;\n\n this.width = this.frameWidth * 3;\n this.height = this.frameHeight * 3;\n\n this.x = scene.mainCanvas.width / 2 - this.width;\n this.y = -scene.mainCanvas.height / 2 + this.height / 2;\n\n this.frame = 0;\n\n this.loopProgress = 0;\n\n this.rubbishes = [];\n this.rubbishIndex = 0;\n\n this.active = true;\n }\n\n update(scene) {\n if (this.active) {\n this.loopProgress += 1;\n\n if (this.loopProgress > 10) {\n this.frame += 1;\n\n this.loopProgress = 0;\n\n if (this.frame > 4) {\n this.rubbishes.push(this.makeRubbish());\n\n this.frame = 0;\n }\n }\n } else {\n this.frame = 0;\n }\n }\n\n makeRubbish() {\n return {\n x: this.x - this.width / 4 + this.width / 2 * Math.random(),\n y: this.y,\n width: 5,\n height: 5,\n color: '#fff',\n };\n }\n\n render(canvas) {\n this.rubbishes.forEach((rubbish) => {\n rubbish.y += 0.9;\n\n canvas.drawCenteredRect(rubbish);\n });\n\n canvas.drawThing(this, this.frame);\n }\n}\n\nexport default ProductionPipe;\n","import PipeEnd from './ProductionPipe';\n\nfunction addEntities(scene) {\n scene.pipeEnd = new PipeEnd({\n scene,\n });\n\n scene.entities = [\n scene.pipeEnd,\n ];\n}\n\nexport default addEntities;\n","import SwitchScene from './scenes/SwitchScene';\nimport PipeScene from './scenes/PipeScene';\n\ninit();\n\nfunction init() {\n const scenes = {\n //SwitchScene,\n PipeScene,\n };\n\n const app = {\n Scene: SwitchScene,\n scenes,\n };\n\n app.scene = new app.Scene(app);\n\n // app.pipeScene = new PipeScene(app);\n\n return app;\n}\n","import audioUnlock from '@aneutralgiraffe/audio-unlock';\nimport '../../../beardman-header/src/js';\n\ndocument.addEventListener('DOMContentLoaded', () => audioUnlock());\n\nlet startX;\nlet startY;\n\n// Clear grid item selected classes when returning to the page via the back button\nwindow.addEventListener('pageshow', () => {\n const elGrid = document.querySelector('.grid');\n const elSelectedGridItem = document.querySelector('a.selected');\n\n if (elSelectedGridItem) {\n elSelectedGridItem.classList.remove('selected');\n }\n\n elGrid.classList.remove('game-selected');\n});\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const elGrid = document.querySelector('.grid');\n const elSelectedGridItem = document.querySelector('a.selected');\n\n if (elSelectedGridItem) {\n elSelectedGridItem.classList.remove('selected');\n }\n\n elGrid.classList.remove('game-selected');\n\n function loadGame(event) {\n event.preventDefault();\n\n if (event.target.matches('a')) {\n event.preventDefault();\n event.target.classList.toggle('selected');\n\n elGrid.classList.toggle('game-selected');\n\n setTimeout(() => {\n window.location.href = event.target.href;\n }, 800);\n }\n }\n\n elGrid.addEventListener('click', loadGame);\n\n document.addEventListener('touchstart', (event) => {\n const touch = event.changedTouches[0];\n\n startX = touch.pageX;\n startY = touch.pageY;\n });\n\n document.addEventListener('touchend', (event) => {\n const touch = event.changedTouches[0];\n\n if (\n event.target.tagName === 'A' &&\n (Math.abs(startX - touch.pageX) + Math.abs(startY - touch.pageY)) < 4\n ) {\n loadGame(event);\n }\n });\n});\n","import dom from '../../libs/dom';\nimport GameLoop from '../../libs/GameLoop';\nimport MainCanvas from './Canvas';\nimport update from './update';\nimport addSceneEvents from './SceneEvents';\nimport addEntities from './entities';\n\nclass PipeScene {\n constructor(app) {\n this.app = app;\n\n const canvasWidth = 150;\n const canvasHeight = document.body.clientHeight;\n\n this.mainCanvas = new MainCanvas({ width: canvasWidth, height: canvasHeight });\n\n this.initializeDom();\n\n this.positionScene();\n\n addSceneEvents(this);\n\n // start game loop last\n this.gameLoop = new GameLoop((delta) => {\n update(this, delta);\n });\n }\n\n initializeDom() {\n this.elContainer = document.querySelector('body');\n\n this.canvasContainer = dom.make('
');\n this.canvasContainer.appendChild(this.mainCanvas.canvas);\n\n this.sceneContainer = dom.make('
');\n this.sceneContainer.appendChild(this.canvasContainer);\n\n this.elContainer.appendChild(this.sceneContainer);\n\n this.sceneContainer.style.top = '60px';\n this.sceneContainer.style.zIndex = '100';\n\n setTimeout(() => {\n document.body.classList.add('show-scene');\n }, 300);\n }\n\n positionScene() {\n this.sceneContainer.style.right = 0;\n\n this.freshStart();\n }\n\n freshStart() {\n this.entities = null;\n\n addEntities(this);\n\n this.camera = {\n focus: { x: 0, y: 0 },\n };\n }\n}\n\nexport default PipeScene;\n"],"sourceRoot":""}