Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mamayaya1
GitHub Repository: mamayaya1/game
Path: blob/main/js/dl-d.js
4626 views
1
// This file is important!!!
2
3
function _isIpad(){var t=-1!==navigator.userAgent.toLowerCase().indexOf("ipad");return!!(!t&&navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2)||t}function Runner(t,i){if(Runner.instance_)return Runner.instance_;Runner.instance_=this,this.outethis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},rContainerEl=documethis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},nt.querySelector(t),this.containerEl=null,this.snackbarEl=null,this.touchController=null,this.detailsButton=this.outerContainerEl.querySelector("#details-button"),this.config=i||Runner.config,this.dimensions=Runner.defaultDimethis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},nsions,this.canvas=null,this.canvasCtx=null,this.tRex=null,this.distanceMeter=null,this.distanceRan=0,this.highestScore=window.localStorage.getItem("chrome-dino"),this.time=0,this.runningTime=0,this.msPerFrame=1e3/FPS,this.currentSpeed=this.config.SPEED,this.obstacles=[],this.activated=!1,this.playing=!1,this.crashed=!1,this.paused=!1,this.inverted=!1,this.invertTimer=0,this.resizeTimerId_=null,this.playCount=0,this.audioBuffer=null,this.soundFx={},this.audioContext=null,this.images={},this.imagesLoaded=0,this.pollingGamepads=!1,this.gamepadIndex=void 0,this.previousGamepad=null,this.isDisabled()?this.setupDisabledRunner():this.loadImages()}$(document).ready(function(){var t=!1,i=$(".box__row"),e=$(".box__row-cell"),s=$(".box__content"),n=$(".box__close");i.on("click",".box__row-cell",function(){if(!t){t=!0;var i=$(this).data("cell"),e=$(".box__content[data-content="+i+"]");$(this).addClass("active"),e.addClass("show-content"),n.addClass("box-close-active")}setTimeout(function(){t=!1},1e3)}),n.on("click",function(){t=!0,e.removeClass("active"),s.removeClass("show-content"),$(this).removeClass("box-close-active"),setTimeout(function(){t=!1},1e3)}),e.on({mouseenter:function(){e.addClass("hover-cell"),$(this).removeClass("hover-cell")},mouseleave:function(){e.removeClass("hover-cell")}})});var DEFAULT_WIDTH=600,FPS=60,IS_HIDPI=window.devicePixelRatio>1,IS_IOS=!!window.navigator.userAgent.match(/iP(hone|ad|od)/i)&&!!window.navigator.userAgent.match(/Safari/i)||_isIpad()||/CriOS/.test(window.navigator.userAgent)||/FxiOS/.test(window.navigator.userAgent),IS_MOBILE=/Android/.test(window.navigator.userAgent)||IS_IOS;function getRandomNum(t,i){return Math.floor(Math.random()*(i-t+1))+t}function vibrate(t){IS_MOBILE&&window.navigator.vibrate&&window.navigator.vibrate(t)}function createCanvas(t,i,e,s){var n=document.createElement("canvas");return n.className=s?Runner.classes.CANVAS+" "+s:Runner.classes.CANVAS,n.width=i,n.height=e,t.appendChild(n),n}function decodeBase64ToArrayBuffer(t){for(var i=t.length/4*3,e=atob(t),s=new ArrayBuffer(i),n=new Uint8Array(s),o=0;o<i;o++)n[o]=e.charCodeAt(o);return n.buffer}function getTimeStamp(){return IS_IOS?(new Date).getTime():performance.now()}function GameOverPanel(t,i,e,s){this.canvas=t,this.this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},canvasCtx=t.getContext("2d"),this.canvasDimensions=s,this.textImgPos=i,this.restartImgPos=e,this.draw()}function checkForCollision(t,i,e){Runner.defaultDimensions.WIDTH,t.xPos;var s=new CollisionBox(i.xPos+1,i.yPos+1,i.config.WIDTH-2,i.config.HEIGHT-2),n=new CollisionBox(t.xPos+1,t.yPos+1,t.typeConfig.width*t.size-2,t.typeConfig.height-2);if(e&&drawCollisionBoxes(e,s,n),boxCompare(s,n))for(var o=t.collisionBoxes,a=i.ducking?Trex.collisionBoxes.DUCKING:Trex.collisionBoxes.RUNNING,h=0;h<a.length;h++)for(var r=0;r<o.length;r++){var c=createAdjustedCollisionBox(a[h],s),d=createAdjustedCollisionBox(o[r],n),u=boxCompare(c,d);if(e&&drawCollisionBoxes(e,c,d),u)return[c,d]}return!1}function createAdjustedCollisionBox(t,i){return new CollisionBox(t.x+i.x,t.y+i.y,t.width,t.height)}function drawCollisionBoxes(t,i,e){t.save(),t.strokeStyle="#f00",t.strokeRect(i.x,i.y,i.width,i.height),t.strokeStyle="#0f0",t.strokeRect(e.x,e.y,e.width,e.height),t.restore()}function boxCompare(t,i){var e=!1,s=(t.x,t.y,i.x);i.y;return t.x<s+i.width&&t.x+t.width>s&&t.y<i.y+i.height&&t.height+t.y>i.y&&(e=!0),e}function CollisionBox(t,i,e,s){this.x=t,this.y=i,this.width=e,this.height=s}function Obstacle(t,i,e,s,n,o,a){thithis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},s.canvasCtx=t,this.spritePos=e,this.typeConfig=i,this.gapCoefficient=n,this.size=getRandomNum(1,Obstacle.MAX_OBSTACLE_LENGTH),this.dimensions=s,this.remove=!1,this.xPos=s.WIDTH+(a||0),this.yPos=0,this.width=0,this.collisionBoxes=[],this.gap=0,this.speedOffset=0,this.currentFrame=0,this.timer=0,this.init(o)}function Trex(t,i){this.canvas=t,this.canvasCtx=t.getContext("2d"),this.spritePos=i,this.xPos=0,this.yPos=0,this.xInitialPos=0,this.groundYPos=0,this.currentFrame=0,this.currentAnimFrames=[],this.blinkDelay=0,this.blinkCount=0,this.animStartTime=0,this.timer=0,this.msPerFrame=1e3/FPS,this.config=Trex.config,this.status=Trex.status.WAITING,this.jumping=!1,this.ducking=!1,this.jumpVelocity=0,this.reachedMinHeight=!1,this.speedDrop=!1,this.jumpCount=0,this.jumpspotX=0,this.init()}function DistanceMeter(t,i,e){this.canvas=t,this.canvasCtxthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},=t.getContext("2d"),this.image=Runner.imageSprite,this.spritePos=i,this.x=0,this.y=5,this.currentDistance=0,this.maxScore=0,this.highScore=0,this.container=null,this.digits=[],this.achievement=!1,this.defaultString="",this.flashTimer=0,this.flashIterations=0,this.invertTrigger=!1,this.config=DistanceMeter.config,this.maxScoreUnits=this.config.MAX_DISTANCE_UNITS,this.init(e)}function Cloud(t,i,e){this.canvas=t,this.canvasCtx=this.canvas.getContext("2d"),this.spritePos=i,this.containerWidth=e,this.xPos=e,this.yPos=0,this.remove=!1,this.cloudGap=getRandomNum(Cloud.config.MIN_CLOUD_GAP,Cloud.config.MAX_CLOUD_GAP),this.init()}function NightMode(t,i,e){this.spritePos=i,this.canvas=t,this.canvasCtx=t.getContext("2d"),this.xPos=e-50,this.yPos=30,this.currentPhase=0,this.opacity=0,this.containerWidth=e,this.stars=[],this.drawStars=!1,this.placeStars()}function HorizonLine(t,i){this.spritePos=i,this.canvas=t,this.canvasCtx=t.getContext("2d"),this.sourceDimensions={},this.dimensions=HorizonLine.dimensions,this.sourceXPos=[this.spritePos.x,this.spritePos.x+this.dimensions.WIDTH],this.xPos=[],this.yPos=0,this.bumpThreshold=.5,this.setSourceDimensions(),this.draw()}function Horizon(t,i,e,s){this.canvas=t,this.canvasCtx=this.canvas.getContext("2d"),this.config=Horizon.config,this.dimensions=e,this.gapCoefficient=s,this.obstacles=[],this.obstacleHistory=[],this.horizonOffsets=[0,0],this.cloudFrequency=this.config.CLOUD_FREQUENCY,this.spritePos=i,this.nightMode=null,this.clouds=[],this.cloudSpeed=this.config.BG_CLOUD_SPEED,this.horizonLine=null,this.init()}function onDocumentLoad(){new Runner(".interstitial-wrapper")}Runner.config={ACCELERATION:.001,BG_CLOUD_SPEED:.2,BOTTOM_PAD:10,CLEAR_TIME:3e3,CLOUD_FREQUENCY:.5,GAMEOVER_CLEAR_TIME:1200,GAP_COEFFICIENT:.6,GRAVITY:.6,INITIAL_JUMP_VELOCITY:12,INVERT_FADE_DURATION:12e3,INVERT_DISTANCE:700,MAX_BLINK_COUNT:3,MAX_CLOUDS:6,MAX_OBSTACLE_LENGTH:3,MAX_OBSTACLE_DUPLICATION:2,MAX_SPEED:13,MIN_JUMP_HEIGHT:35,MOBILE_SPEED_COEFFICIENT:1.2,RESOURCE_TEMPLATE_ID:"audio-resources",SPEED:6,SPEED_DROP_COEFFICIENT:3,ARCADE_MODE_INITIAL_TOP_POSITION:35,ARCADE_MODE_TOP_POSITION_PERCENT:.1},Runner.defaultDimensions={WIDTH:DEFAULT_WIDTH,HEIGHT:150},Runner.classes={ARCADE_MODE:"arcade-mode",CANVAS:"runner-canvas",CONTAINER:"runner-container",CRASHED:"crashed",ICON:"icon-offline",INVERTED:"inverted",SNACKBAR:"snackbar",SNACKBAR_SHOW:"snackbar-show",TOUCH_CONTROLLER:"controller"},Runner.spriteDefinition={LDPI:{CACTUS_LARGE:{x:332,y:2},CACTUS_SMALL:{x:228,y:2},CLOUD:{x:86,y:2},HORIZON:{x:2,y:54},MOON:{x:484,y:2},PTERODACTYL:{x:134,y:2},RESTART:{x:2,y:2},TEXT_SPRITE:{x:655,y:2},TREX:{x:848,y:2},STAR:{x:645,y:2}},HDPI:{CACTUS_LARGE:{x:652,y:2},CACTUS_SMALL:{x:446,y:2},CLOUD:{x:166,y:2},HORIZON:{x:2,y:104},MOON:{x:954,y:2},PTERODACTYL:{x:260,y:2},RESTART:{x:2,y:2},TEXT_SPRITE:{x:1294,y:2},TREX:{x:1678,y:2},STAR:{x:1276,y:2}}},Runner.sounds={BUTTON_PRESS:"offline-sound-press",HIT:"offline-sound-hit",SCORE:"offline-sound-reached"},Runner.keycodes={JUMP:{38:1,32:1},DUCK:{40:1},RESTART:{13:1}},Runner.events={ANIM_END:"webkitAnimationEnd",CLICK:"click",KEYDOWN:"keydown",KEYUP:"keyup",POINTERDOWN:"pointerdown",POINTERUP:"pointerup",RESIZE:"resize",TOUCHEND:"touchend",TOUCHSTART:"touchstart",VISIBILITY:"visibilitychange",BLUR:"blur",FOCUS:"focus",LOAD:"load",GAMEPADCONNECTED:"gamepadconnected"},Runner.prototype={isDisabled:function(){return!1},setupDisabledRunner:function(){this.containerEl=document.createElement("div"),this.containerEl.className=Runner.classes.SNACKBAR,this.containerEl.textContent=loadTimeData.getValue("disabledEasterEgg"),this.outerContainerEl.appendChild(this.containerEl),document.addEventListener(Runner.events.KEYDOWN,function(t){Runner.keycodes.JUMP[t.keyCode]&&(this.containerEl.classList.add(Runner.classes.SNACKBAR_SHOW),document.querySelector(".icon").classList.add("icon-disabled"))}.bind(this))},updateConfigSetting:function(t,i){if(t in this.config&&null!=i)switch(this.config[t]=i,t){case"GRAVITY":case"MIN_JUMP_HEIGHT":case"SPEED_DROP_COEFFICIENT":this.tRex.config[t]=i;break;case"INITIAL_JUMP_VELOCITY":this.tRex.setJumpVelocity(i);break;case"SPEED":this.setSpeed(i)}},loadImages:function(){IS_HIDPI?(Runner.imageSprite=document.getElementById("offline-resources-2x"),this.spriteDef=Runner.spriteDefinition.HDPI):(Runner.imageSprite=document.getElementById("offline-resources-1x"),this.spriteDef=Runner.spriteDefinition.LDPI),Runner.imageSprite.complete?this.init():Runner.imageSprite.addEventListener(Runner.events.LOAD,this.init.bind(this))},loadSounds:function(){if(!IS_IOS){this.audioContext=new AudioContext;var t=document.getElementById(this.config.RESOURCE_TEMPLATE_ID).content;for(var i in Runner.sounds){var e=t.getElementById(Runner.sounds[i]).src,s=decodeBase64ToArrayBuffer(e=e.substr(e.indexOf(",")+1));this.audioContext.decodeAudioData(s,function(t,i){this.soundFx[t]=i}.bind(this,i))}}},setSpeed:function(t){var i=t||this.currentSpeed;if(this.dimensions.WIDTH<DEFAULT_WIDTH){var e=i*this.dimensions.WIDTH/DEFAULT_WIDTH*this.config.MOBILE_SPEED_COEFFICIENT;this.currentSpeed=e>i?i:e}else t&&(this.currentSpeed=t)},init:function(){document.querySelector("."+Runner.classes.ICON).style.visibility="hidden",this.adjustDimensions(),this.setSpeed(),this.containerEl=document.createElement("div"),this.containerEl.className=Runner.classes.CONTAINER,this.canvas=createCanvas(this.containerEl,this.dimensions.WIDTH,this.dimensions.HEIGHT,Runner.classes.PLAYER),this.canvasCtx=this.canvas.getContext("2d"),this.canvasCtx.fillStyle="#f7f7f7",this.canvasCtx.fill(),Runner.updateCanvasScaling(this.canvas),this.horizon=new Horizon(this.canvas,this.spriteDef,this.dimensions,this.config.GAP_COEFFICIENT),this.distanceMeter=new DistanceMeter(this.canvas,this.spriteDef.TEXT_SPRITE,this.dimensions.WIDTH),this.tRex=new Trex(this.canvas,this.spriteDef.TREX),this.outerContainerEl.appendChild(this.containerEl),IS_MOBILE&&this.createTouchController(),this.startListening(),this.update(),window.addEventListener(Runner.events.RESIZE,this.debounceResize.bind(this));const t=window.matchMedia("(prefers-color-scheme: dark)");this.isDarkMode=t&&t.matches,t.addListener(t=>{this.isDarkMode=t.matches})},createTouchController:function(){this.touchController=document.createElement("div"),this.touchController.className=Runner.classes.TOUCH_CONTROLLER,this.touchController.addEventListener(Runner.events.TOUCHSTART,this),this.touchController.addEventListener(Runner.events.TOUCHEND,this),this.outerContainerEl.appendChild(this.touchController)},debounceResize:function(){this.resizeTimerId_||(this.resizeTimerId_=setInterval(this.adjustDimensions.bind(this),250))},adjustDimensions:function(){clearInterval(this.resizeTimerId_),this.resizeTimerId_=null;var t=window.getComputedStyle(this.outerContainerEl),i=Number(t.paddingLeft.substr(0,t.paddingLeft.length-2));this.dimensions.WIDTH=this.outerContainerEl.offsetWidth-2*i,this.activated&&(this.dimensions.WIDTH=Math.min(DEFAULT_WIDTH,this.dimensions.WIDTH),this.setArcadeModeContainerScale()),this.canvas&&(this.canvas.width=this.dimensions.WIDTH,this.canvas.height=this.dimensions.HEIGHT,Runner.updateCanvasScaling(this.canvas),this.distanceMeter.calcXPos(this.dimensions.WIDTH),this.clearCanvas(),this.horizon.update(0,0,!0),this.tRex.update(0),this.playing||this.crashed||this.paused?(this.containerEl.style.width=this.dimensions.WIDTH+"px",this.containerEl.style.height=this.dimensions.HEIGHT+"px",this.distanceMeter.update(0,Math.ceil(this.distanceRan)),this.stop()):this.tRex.draw(0,0),this.crashed&&this.gameOverPanel&&(this.gameOverPanel.updateDimensions(this.dimensions.WIDTH),this.gameOverPanel.draw()))},playIntro:function(){if(this.activated||this.crashed)this.crashed&&this.restart();else{this.playingIntro=!0,this.tRex.playingIntro=!0,this.distanceMeter.setHighScore(window.localStorage.getItem("chrome-dino"));var t="@-webkit-keyframes intro { from { width:"+Trex.config.WIDTH+"px }to { width: "+this.dimensions.WIDTH+"px }}",i=document.createElement("style");i.innerHTML=t,document.head.appendChild(i),this.containerEl.addEventListener(Runner.events.ANIM_END,this.startGame.bind(this)),this.containerEl.style.webkitAnimation="intro .4s ease-out 1 both",this.containerEl.style.width=this.dimensions.WIDTH+"px",this.playing=!0,this.activated=!0}},startGame:function(){this.setArcadeMode(),this.runningTime=0,this.playingIntro=!1,this.tRex.playingIntro=!1,this.containerEl.style.webkitAnimation="",this.playCount++,document.addEventListener(Runner.events.VISIBILITY,this.onVisibilityChange.bind(this)),window.addEventListener(Runner.events.BLUR,this.onVisibilityChange.bind(this)),window.addEventListener(Runner.events.FOCUS,this.onVisibilityChange.bind(this))},clearCanvas:function(){this.canvasCtx.clearRect(0,0,this.dimensions.WIDTH,this.dimensions.HEIGHT)},update:function(){this.updatePending=!1;var t=getTimeStamp(),i=t-(this.time||t);if(this.time=t,this.playing){this.clearCanvas(),this.tRex.jumping&&this.tRex.updateJump(i),this.runningTime+=i;var e=this.runningTime>this.config.CLEAR_TIME;if(1!=this.tRex.jumpCount||this.playingIntro||this.playIntro(),this.playingIntro)this.horizon.update(0,this.currentSpeed,e);else if(!this.crashed){const t=this.isDarkMode^this.inverted;i=this.activated?i:0,this.horizon.update(i,this.currentSpeed,e,t)}if(e&&checkForCollision(this.horizon.obstacles[0],this.tRex)?this.gameOver():(this.distanceRan+=this.currentSpeed*i/this.msPerFrame,this.currentSpeed<this.config.MAX_SPEED&&(this.currentSpeed+=this.config.ACCELERATION)),this.distanceMeter.update(i,Math.ceil(this.distanceRan))&&this.playSound(this.soundFx.SCORE),this.invertTimer>this.config.INVERT_FADE_DURATION)this.invertTimer=0,this.invertTrigger=!1,this.invert();else if(this.invertTimer)this.invertTimer+=i;else{var s=this.distanceMeter.getActualDistance(Math.ceil(this.distanceRan));s>0&&(this.invertTrigger=!(s%this.config.INVERT_DISTANCE),this.invertTrigger&&0===this.invertTimer&&(this.invertTimer+=i,this.invert()))}}(this.playing||!this.activated&&this.tRex.blinkCount<Runner.config.MAX_BLINK_COUNT)&&(this.tRex.update(i),this.scheduleNextUpdate())},handleEvent:function(t){return function(i,e){switch(i){case e.KEYDOWN:case e.TOUCHSTART:case e.POINTERDOWN:this.onKeyDown(t);break;case e.KEYUP:case e.TOUCHEND:case e.POINTERUP:this.onKeyUp(t);break;case e.GAMEPADCONNECTED:this.onGamepadConnected(t)}}.bind(this)(t.type,Runner.events)},startListening:function(){document.addEventListener(Runner.events.KEYDOWN,this),document.addEventListener(Runner.events.KEYUP,this),window.addEventListener(Runner.events.GAMEPADCONNECTED,this),this.containerEl.addEventListener(Runner.events.TOUCHSTART,this),document.addEventListener(Runner.events.POINTERDOWN,this),document.addEventListener(Runner.events.POINTERUP,this)},stopListening:function(){document.removeEventListener(Runner.events.KEYDOWN,this),document.removeEventListener(Runner.events.KEYUP,this),window.removeEventListener(Runner.events.GAMEPADCONNECTED,this),this.touchController&&(this.touchController.removeEventListener(Runner.events.TOUCHSTART,this),this.touchController.removeEventListener(Runner.events.TOUCHEND,this)),this.containerEl.removeEventListener(Runner.events.TOUCHSTART,this),document.removeEventListener(Runner.events.POINTERDOWN,this),document.removeEventListener(Runner.events.POINTERUP,this)},onKeyDown:function(t){IS_MOBILE&&this.playing&&t.preventDefault(),t.target!=this.detailsButton&&(this.crashed||!Runner.keycodes.JUMP[t.keyCode]&&t.type!=Runner.events.TOUCHSTART||(this.playing||(this.loadSounds(),this.playing=!0,this.update(),window.errorPageController&&errorPageController.trackEasterEgg()),this.tRex.jumping||this.tRex.ducking||(this.playSound(this.soundFx.BUTTON_PRESS),this.tRex.startJump(this.currentSpeed))),this.crashed&&t.type==Runner.events.TOUCHSTART&&t.currentTarget==this.containerEl&&this.restart()),this.playing&&!this.crashed&&Runner.keycodes.DUCK[t.keyCode]&&(t.preventDefault(),this.tRex.jumping?this.tRex.setSpeedDrop():this.tRex.jumping||this.tRex.ducking||this.tRex.setDuck(!0))},onKeyUp:function(t){var i=String(t.keyCode),e=Runner.keycodes.JUMP[i]||t.type==Runner.events.TOUCHEND||t.type==Runner.events.POINTERUP;if(this.isRunning()&&e)this.tRex.endJump();else if(Runner.keycodes.DUCK[i])this.tRex.speedDrop=!1,this.tRex.setDuck(!1);else if(this.crashed){var s=getTimeStamp()-this.time;(Runner.keycodes.RESTART[i]||this.isLeftClickOnCanvas(t)||s>=this.config.GAMEOVER_CLEAthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},R_TIME&&Runner.keycodes.JUMP[i])&&this.restart()}else this.paused&&e&&(this.tRex.reset(),this.play())},onGamepadConnected:function(t){this.pollingGamepads||this.pollGamepadState()},pollGamepadState:function(){var t=navigator.getGamepads();this.pollActiveGamepad(t),this.pollingGamepads=!0,requestAnimationFrame(this.pollGamepadState.bind(this))},pollForActiveGamepad:function(t){for(var i=0;i<t.length;++i)if(t[i]&&t[i].buttons.length>0&&t[i].buttons[0].pressed)return this.gamepadIndex=i,void this.pollActiveGamepad(t)},pollActiveGamepad:function(t){if(void 0!==this.gamepadIndex){var i=t[this.gamepadIndex];if(!i)return this.gamepadIndex=void 0,void this.pollForActiveGamepad(t);this.pollGamepadButton(i,0,38),i.buttons.length>=2&&this.pollGamepadButton(i,1,40),i.buttons.length>=10&&this.pollGamepadButton(i,9,13),this.previousGamepad=i}else this.pollForActiveGamepad(t)},pollGamepadButton:function(t,i,e){var s=t.buttons[i].pressed,n=!1;if(this.previousGamepad&&(n=this.previousGamepad.buttonsthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=thithis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},s.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},[i].pressed),s!=n){var o=new KeyboardEvent(s?Runner.events.KEYDOWN:Runner.events.KEYUP,{keyCode:e});document.dispatchEvent(o)}},isLeftClickOnCanvas:function(t){return null!=t.button&&t.button<2&&t.type==Runner.events.POINTERUP&&t.target==this.canvas},scheduleNextUpdate:function(){this.updatePending||(this.updatePending=!0,this.raqId=requestAnimationFrame(this.update.bind(this)))},isRunning:function(){return!!this.raqId},gameOver:function(){this.playSound(this.soundFx.HIT),vibrate(200),this.stop(),this.crashed=!0,this.distanceMeter.achievement=!1,this.tRex.update(100,Trex.status.CRASHED),this.gameOverPanel?this.gameOverPanel.draw():this.gameOverPanel=new GameOverPanel(this.canvas,this.spriteDef.TEXT_SPRITE,this.spriteDef.RESTART,this.dimensions),thisthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},.distanceRan>this.highestScore&&(this.highestScore=Math.ceil(this.distanceRan),this.distanceMeter.setHighScore(this.highestScore),window.localStorage.setItem("chrome-dino",this.highestScore)),this.time=getTimeStamp()},stop:function(){this.playing=!1,this.paused=!0,cancthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,sthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},elAnimationFrame(this.raqId),this.raqId=0},play:function(){this.crashed||(this.playing=!0,this.paused=!1,this.tRex.update(0,Trex.status.RUNNING),this.time=getTimeStamp(),this.update())},restart:function(){this.raqId||(this.playCount++,this.runningTime=0,this.playing=!0,this.crashed=!1,this.distanceRan=0,this.setSpeed(this.config.SPEED),this.time=getTimeStamp(),this.containerEl.classList.remove(Runner.classes.CRASHED),this.clearCanvas(),this.distanceMeter.reset(),this.horizon.reset(),this.tRex.reset(),this.playSound(this.soundFx.BUTTON_PRESS),this.invert(!0),this.update())},setArcadeMode(){document.body.classList.add(Runner.classes.ARCADE_MODE),this.setArcadeModeContainerScale()},setArcadeModeContainerScale(){const t=window.innerHeight,i=t/this.dimensions.HEIGHT,e=window.innerWidth/this.dimensions.WIDTH,s=Math.max(1,Math.min(i,e)),n=this.dimensions.HEIGHT*s,o=Math.ceil(Math.max(0,(t-n-Runner.config.this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},ARCADE_MODE_INITIAL_TOP_POSITION)*Runner.config.ARCADE_MODE_TOP_POSITION_PERCENT))*window.devicePixelRatio;this.containerEl.style.transform="scale("+s+") translateY("+o+"px)"},onVisibilityChange:function(t){document.hidden||document.webkitHidden||"blur"==t.type||"visible"!=document.visibilityState?this.stop():this.crashed||(this.tRex.reset(),this.play())},playSound:function(t){if(t){var i=this.audioContext.createBufferSource();i.buffer=t,i.connect(this.audioContext.destination),i.start(0)}},invert:function(t){t?(document.body.classList.toggle(Runner.classes.INVERTED,!1),this.invertTimer=0,this.inverted=!1):this.inverted=document.body.classList.toggle(Runner.classes.INVERTED,this.invertTrigger)}},Runner.updateCanvasScaling=function(t,i,e){var s=t.getContext("2d"),n=Math.floor(window.devicePixelRatio)||1,o=Math.floor(s.webkitBackingStorePixelRatio)||1,a=n/o;if(n!==o){var h=i||t.width,r=e||t.height;return t.width=h*a,t.height=r*a,t.style.width=h+"px",t.style.height=r+"px",s.scale(a,a),!0}return 1==n&&(t.style.width=t.width+"px",t.style.height=t.height+"px"),!1},GameOverPanel.dimensions={TEXT_X:0,TEXT_Y:13,TEXT_WIDTH:191,TEXT_HEIGHT:11,RESTART_WIDTH:36,RESTART_HEIGHT:32},GameOverPanel.prototype={updateDimensions:function(t,i){this.canvasDimensions.WIDTH=t,i&&(this.canvasDimensions.HEIGHT=i)},draw:function(){var t=GameOverPanel.dimensions,i=tthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},his.canvasDimensions.WIDTH/2,e=t.TEXT_X,s=t.TEXT_Y,n=t.TEXT_WIDTH,o=t.TEXT_HEIGHT,a=Math.round(i-t.TEXT_WIDTH/2),h=Math.round((this.canvasDimensions.HEIGHT-25)/3),r=t.TEXT_WIDTH,c=t.TEXT_HEIGHT,d=t.RESTART_WIDTH,u=t.RESTART_HEIGHT,l=i-t.RESTART_WIDTH/2,m=tthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},his.canvasDimensions.HEIGHT/2;IS_HIDPI&&(s*=2,e*=2,n*=2,o*=2,d*=2,u*=2),e+=this.textImgPos.x,s+=this.textImgPos.y,this.canvasCtx.drawImage(Runner.imageSprite,e,s,n,o,a,h,r,c),this.canvasCtx.drawImage(Runner.imageSprite,this.restartImgPos.x,this.restartImgPos.y,d,u,l,m,t.RESTART_WIDTH,t.RESTART_HEIGHT)}},Obstacle.MAX_GAP_COEFFICIENT=1.5,Obstacle.MAX_OBSTACLE_LENGTH=3,Obstacle.prototype={init:function(t){if(this.cloneCollisionBoxes(),this.size>1&&this.typeConfig.multipleSpeed>t&&(this.size=1),this.width=this.typeConfig.width*this.size,Array.isArray(this.typeConfig.yPos)){var i=IS_MOBILE?this.typeConfig.yPosMobile:this.typeConfig.yPos;this.yPos=i[getRandomNum(0,i.length-1)]}else this.yPos=this.typeConfig.yPos;this.draw(),this.size>1&&(this.collisionBoxes[1].width=this.width-this.collisionBoxes[0].width-this.collisionBoxes[2].width,this.collisionBoxes[2].x=this.width-this.collisionBoxes[2].width),this.typeConfig.speedOffset&&(this.speedOffset=Math.random()>.5?this.typeConfig.speedOffset:-this.typeConfig.speedOffset),this.gap=this.getGap(this.gapCoefficient,t)},draw:function(){var t=this.typeConfig.width,i=this.typeConfig.height;IS_HIDPI&&(t*=2,i*=2);var e=t*this.size*(.5*(this.size-1))+this.spritePos.x;this.currentFrame>0&&(e+=t*this.currentFrame),this.canvasCtx.drawImage(Runner.imageSprite,e,this.spritePos.y,t*this.size,i,this.xPos,this.yPos,this.typeConfig.width*this.size,this.typeConfig.height)},update:function(t,i){this.remove||(this.typeConfig.speedOffset&&(i+=this.speedOffset),this.xPos-=Math.floor(i*FPS/1e3*t),this.typeConfig.numFrames&&(this.timer+=t,this.timer>=this.typeConfig.frameRate&&(this.currentFrame=this.currentFrame==this.typeConfig.numFrames-1?0:this.currentFrame+1,this.timer=0)),this.draw(),this.isVisible()||(this.remove=!0))},getGap:function(t,i){var e=Math.round(this.width*i+this.typeConfig.minGap*t);return getRandomNum(e,Math.round(e*Obstacle.MAX_GAP_COEFFICIENT))},isVisible:function(){return this.xPos+this.width>0},cloneCollisionBoxes:function(){for(var t=this.typeConfig.collisionBoxes,i=t.length-1;i>=0;i--)this.collisionBoxes[i]=new CollisionBox(t[i].x,t[i].y,t[i].width,t[i].height)}},Obstacle.types=[{type:"CACTUS_SMALL",width:17,height:35,yPos:105,multipleSpeed:4,minGap:120,minSpeed:0,collisionBoxes:[new CollisionBox(0,7,5,27),new CollisionBox(4,0,6,34),new CollisionBox(10,4,7,14)]},{type:"CACTUS_LARGE",width:25,height:50,yPos:90,multipleSpeed:7,minGap:120,minSpeed:0,collisionBoxes:[new CollisionBox(0,12,7,38),new CollisionBox(8,0,7,49),new CollisionBox(13,10,10,38)]},{type:"PTERODACTYL",width:46,height:40,yPos:[100,75,50],yPosMobile:[100,50],multipleSpeed:999,minSpeed:8.5,minGap:150,collisionBoxes:[new CollisionBox(15,15,16,5),new CollisionBox(18,21,24,6),new CollisionBox(2,14,4,3),new CollisionBox(6,10,4,7),new CollisionBox(10,8,6,9)],numFrames:2,frameRate:1e3/6,speedOffset:.8}],Trex.config={DROP_VELOCITY:-5,GRAVITY:.6,HEIGHT:47,HEIGHT_DUCK:25,INITIAL_JUMP_VELOCITY:-10,INTRO_DURATION:1500,MAX_JUMP_HEIGHT:30,MIN_JUMP_HEIGHT:30,SPEED_DROP_COEFFICIENT:3,SPRITE_WIDTH:262,START_X_POS:50,WIDTH:44,WIDTH_DUCK:59},Trex.collisionBoxes={DUCKING:[new CollisionBox(1,18,55,25)],RUNNING:[new CollisionBox(22,0,17,16),new CollisionBox(1,18,30,9),new CollisionBox(10,35,14,8),new CollisionBox(1,24,29,5),new CollisionBox(5,30,21,4),new CollisionBox(9,34,15,4)]},Trex.status={CRASHED:"CRASHED",DUCKING:"DUCKING",JUMPING:"JUMPING",RUNNING:"RUNNING",WAITING:"WAITING"},Trex.BLINK_TIMING=7e3,Trex.animFrames={WAITING:{frames:[44,0],msPerFrame:1e3/3},RUNNING:{frames:[88,132],msPerFrame:1e3/12},CRASHED:{frames:[220],msPerFrame:1e3/60},JUMPING:{frames:[0],msPerFrame:1e3/60},DUCKING:{frames:[264,323],msPerFrame:125}},Trex.prototype={init:function(){this.groundYPos=Runner.defaultDimensions.HEIGHT-this.config.HEIGHT-Runner.config.BOTTOM_PAD,this.yPos=this.groundYPos,this.minJumpHeight=this.groundYPos-this.config.MIN_JUMP_HEIGHT,this.draw(0,0),this.update(0,Trex.status.WAITING)},setJumpVelocity:function(t){this.config.INITIAL_JUMP_VELOCITY=-t,this.config.DROP_VELOCITY=-t/2},update:function(t,i){this.timer+=t,i&&(this.status=i,this.currentFrame=0,this.msPerFrame=Trex.animFrames[i].msPerFrame,this.currentAnimFrames=Trex.animFrames[i].frames,i==Trex.status.WAITING&&(this.animStartTime=getTimeStamp(),this.setBlinkDelay())),this.playingIntro&&this.xPos<this.config.START_X_POS&&(this.xPos+=Math.round(this.config.START_X_POS/this.config.INTRO_DURATION*t),this.xInitialPos=this.xPos),this.status==Trex.status.WAITING?this.blink(getTimeStamp()):this.draw(this.currentAnimFrames[this.currentFrame],0),this.timer>=this.msPerFrame&&(this.currentFrame=this.currentFrame==this.currentAnimFrames.length-1?0:this.currentFrame+1,this.timer=0),this.speedDrop&&this.yPos==this.groundYPos&&(this.speedDrop=!1,this.setDuck(!0))},draw:function(t,i){var e=t,s=i,n=this.ducking&&this.status!=Trex.status.CRASHED?this.config.WIDTH_DUCK:this.config.WIDTH,o=this.config.HEIGHT;IS_HIDPI&&(e*=2,s*=2,n*=2,o*=2),e+=this.spritePos.x,s+=this.spritePos.y,this.ducking&&this.status!=Trex.status.CRASHED?this.canvasCtx.drawImage(Runner.imageSprite,e,s,n,o,this.xPos,this.yPos,this.config.WIDTH_DUCK,this.config.HEIGHT):(this.ducking&&this.statuthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},s==Trex.status.CRASHED&&this.xPos++,this.canvasCtx.drawImage(Runner.imageSprite,e,s,n,o,this.xPos,this.yPos,this.config.WIDTH,this.config.HEIGHT))},setBlinkDelay:function(){this.blinkDelay=Math.ceil(Math.random()*Trex.BLINK_TIMING)},blink:function(t){t-this.animStartTime>=this.blinkDelay&&(this.draw(this.currentAnimFrames[this.currentFramthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},e],0),1==this.currentFrame&&(this.setBlinkDelay(),this.animStartTime=t,this.blinkCount++))},startJump:function(t){this.jumping||(this.update(0,Trex.status.JUMPING),this.jumpVelocity=thisthis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},.config.INITIAL_JUMP_VELOCITY-t/10,this.jumping=!0,this.reachedMinHeight=!1,this.speedDrop=!1)},endJump:function(){this.reachedMinHeight&&this.jumpVelocity<this.config.DROP_VELOCITY&&(this.jumpVelocity=this.config.DROP_VELOCITY)},updateJump:function(t,i){var e=t/Trex.animFrames[this.status].msPerFrame;this.speedDrop?this.yPos+=Math.round(this.jumpVelocity*this.config.SPEED_DROP_COEFFICIENT*e):this.yPos+=Math.round(this.jumpVelocity*e),this.jumpVelocity+=this.config.GRAVITY*e,(this.yPos<this.minJumpHeight||this.speedDrop)&&(this.reachedMinHeight=!0),(this.yPos<this.config.MAX_JUMP_HEIGHT||this.speedDrop)&&this.endJump(),this.yPos>this.groundYPos&&(this.reset(),this.jumpCount++),this.update(t)},setSpeedDrop:function(){this.speedDrop=!0,this.jumpVelocity=1},setDuck:function(t){t&&this.status!=Trex.status.DUCKING?(this.update(0,Trex.status.DUCKING),this.ducking=!0):this.status==Trex.status.DUCKING&&(this.update(0,Trex.status.RUNNING),this.ducking=!1)},reset:function(){this.xPos=this.xInitialPos,this.yPos=this.groundYPos,this.jumpVelocity=0,this.jumping=!1,ththis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},is.ducking=!1,this.update(0,Trex.status.RUNNING),this.midair=!1,this.speedDrop=!1,this.jumpCount=0}},DistanceMeter.dimensions={WIDTH:10,HEIGHT:13,DEST_WIDTH:11},DistanceMeter.yPos=[0,13,27,40,53,67,80,93,107,120],DistanceMethis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},ter.config={MAX_DISTANCE_UNITS:5,ACHIEVEMENT_DISTANCE:100,COEFFICIENT:.025,FLASH_DURATION:250,FLASH_ITERATIONS:3},DistanceMeter.prototype={init:function(t){var i="";this.calcXPos(t),this.maxScore=this.maxScoreUnits;for(var e=0;e<this.maxScoreUnits;e++)this.draw(e,0),this.defaultString+="0",i+="9";this.maxScore=parseInt(i)},calcXPos:function(t){this.x=t-DistanceMeter.dimensions.DEST_WIDTH*(this.maxScoreUnits+1)},draw:function(t,i,e){var s=DistanceMeter.dimensiothis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},ns.WIDTH,n=DistanceMeter.dimensions.HEIGHT,o=DistanceMeter.dimensions.WIDTH*i,a=0,h=t*DistanceMeter.dimensions.DEST_WIDTH,r=this.y,c=DistanceMeter.dimensions.WIDTH,d=DistanceMeter.dimensions.HEIGHT;if(IS_HIDPI&&(s*=2,n*=2,o*=2),o+=this.spritePos.x,a+=this.spritePos.y,this.canvasCtx.save(),e){var u=this.x-2*this.maxScoreUnits*DistanceMeter.dimensions.WIDTH;this.canvasCtx.translate(u,this.y)}else this.canvasCtx.translate(this.x,this.y);this.canvasCtx.drawImage(this.image,o,a,s,n,h,r,c,d),this.canvasCtx.restore()},getActualDistance:function(t){return t?Math.round(t*this.config.COEFFICIENT):0},update:function(t,i){var e=!0,s=!1;if(this.achievement)this.flashIterations<=this.config.FLASH_ITERATIONS?(this.flashTimer+=t,this.flashTimer<this.config.FLASH_DURATION?e=!1:this.flashTimer>2*this.config.FLASH_DURATION&&(this.flashTimer=0,this.flashIterations++)):(this.achievement=!1,this.flashIterations=0,this.flashTimer=0);else if((i=this.getActualDistance(i))>this.maxScore&&this.maxScoreUnits==this.config.MAX_DISTANCE_UNITS?(this.maxScoreUnits++,this.maxScore=parseInt(this.maxScore+"9")):this.distance=0,i>0){i%this.config.ACHIEVEMENT_DISTANCE==0&&(this.achievement=!0,this.flashTimer=0,s=!0);var n=(this.defaultString+i).substr(-this.maxScoreUnits);this.digits=n.split("")}else this.digits=this.defaultString.split("");if(e)for(var o=this.digits.length-1;o>=0;o--)this.draw(o,parseInt(this.digits[o]));return this.drawHighScore(),s},drawHighScore:function(){this.canvasCtx.save(),this.canvasCtx.globalAlpha=.8;for(var t=this.highScore.length-1;t>=0;t--)this.draw(t,parseInt(this.highScore[t],10),!0);this.canvasCtx.restore()},setHighScore:function(t){t=this.getActualDistance(t);var i=(this.defaultString+t).substr(-this.maxScoreUnits);this.highScore=["10","11",""].concat(i.split(""))},reset:function(){this.update(0),this.achievement=!1}},Cloud.config={HEIGHT:14,MAX_CLOUD_GAP:400,MAX_SKY_LEVEL:30,MIN_CLOUD_GAP:100,MIN_SKY_LEVEL:71,WIDTH:46},Cloud.prototype={init:function(){this.yPos=getRandomNum(Cloud.config.MAX_SKY_LEVEL,Cloud.config.MIN_SKY_LEVEL),this.draw()},draw:function(){this.canvasCtx.save();var t=Cloud.config.WIDTH,i=Cloud.config.HEIGHT;IS_HIDPI&&(t*=2,i*=2),this.canvasCtx.drawImage(Runner.this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},imageSprite,this.spritePos.x,this.spritePos.y,t,i,this.xPos,this.yPos,Cloud.config.WIDTH,Cloud.config.HEIGHT),this.canvasCtx.restore()},update:function(t){this.remove||(this.xPos-=Math.ceil(t),this.draw(),this.isVisible()||(this.remove=!0))},isVisible:function(){return this.xPos+Cloud.config.WIDTH>0}},NightMode.config={FADE_SPEED:.035,HEIGHT:40,MOON_SPEED:.25,NUM_STARS:2,STAR_SIZE:9,STAR_SPEED:.3,STAR_MAX_Y:70,WIDTH:20},NightMode.phases=[140,120,100,60,40,20,0],NightMode.prototype={update:function(t,i){if(t&&0==this.opacity&&(this.currentPhase++,this.currentPhase>=NightMode.phases.length&&(this.currentPhase=0))this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},,t&&(this.opacity<1||0==this.opacity)?this.opacity+=NightMode.config.FADE_SPEED:this.opacity>0&&(this.opacity-=NightMode.config.FADE_SPEED),this.opacity>0){if(this.xPos=this.updateXPos(this.xPos,NightMode.config.MOON_SPEED),this.drawStars)for(var e=0;e<NightMode.config.NUM_STARS;e++)this.stars[e].x=this.updateXPos(this.stars[e].x,NightMode.config.STAR_SPEED);this.draw()}else this.opacity=0,this.placeStars();this.drawStars=!0},updateXPos:function(t,i){return t<-NightMode.config.WIDTH?t=this.containerWidth:t-=i,t},draw:function(){var t=3==this.currentPhase?2*NightMode.config.WIDTH:NightMode.config.WIDTH,i=NightMode.config.HEIGHT,e=this.spritePos.x+NightMode.phases[this.currentPhase],s=t,n=NightMode.config.STAR_SIZE,o=Runner.spriteDefinition.LDPI.STAR.x;if(IS_HIDPI&&(t*=2,i*=2,e=this.spritePos.x+2*NightMode.phases[this.currentPhase],n*=2,o=Runner.spriteDefinition.HDPI.STAR.x),this.canvasCtx.save(),this.canvasCtx.globalAlpha=this.opacity,this.drawStars)for(var a=0;a<NightMode.config.NUM_STARS;a++)this.canvasCtx.drawImage(Runner.imageSprite,o,this.stars[a].sourceY,n,n,Math.round(this.stars[a].x),this.stars[a].y,NightMode.config.STAR_SIZE,NightMode.config.STAR_SIZE);this.canvasCtx.drawImage(Runner.imageSprite,e,this.spritePos.y,t,i,Math.round(this.xPos),this.yPos,s,NightMode.config.HEIGHT),this.canvasCtx.globalAlpha=1,this.canvasCtx.restore()},placeStars:function(){for(var t=Math.round(this.containerWidth/NightMode.config.NUM_STARS),i=0;i<NightMode.config.NUM_STARS;i++)this.stars[i]={}this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},,this.stars[i].x=getRandomNum(t*i,t*(i+1)),this.stars[i].y=getRandomNum(0,NightMode.config.STAR_MAX_Y),this.stars[i].sourceY=IS_HIDPI?Runner.spriteDefinition.HDPI.STAR.y+2*NightMode.config.STAR_SIZE*i:Runner.spriteDefinition.LDPI.STAR.y+NightMode.config.STAR_SIZE*i},reset:function(){this.currentPhase=0,this.opacity=0,this.update(!1)}},HorizonLine.dimensions={WIDTH:600,HEIGHT:12,YPOS:127},HorizonLine.prototype={setSourceDimensions:function(){for(var t in HorizonLine.dimensions)IS_HIDPI?"YPOS"!=t&&(this.southis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},rceDimensions[t]=2*HorizonLine.dimensions[t]):this.sourceDimensions[t]=HorizonLine.dimensions[t],this.dimensions[t]=HorizonLine.dimensions[t];this.xPos=[0,HorizonLine.dimensions.WIDTH],this.yPos=HorizonLine.dimensions.YPOS},getRandomType:function(){return Math.random()>this.bumpThreshold?this.dimensions.WIDTH:0},draw:function(){this.canvasCtx.drawImage(Runner.imageSprite,this.sourceXPos[0],this.spritePos.y,this.sourceDimensions.WIDTH,this.sourceDimensions.HEIGHT,this.xPos[0],this.yPos,this.dimensions.WIDTH,this.dimensions.HEIGHT),this.canvasCtx.drawImage(Runner.imageSprite,this.sourceXPos[1],this.spritePos.y,this.sourceDimensions.WIDTH,this.sourceDimensions.HEIGHT,this.xPos[1],this.yPos,this.dimensions.WIDTH,this.dimensions.HEIGHT)},updateXPos:function(t,i){var e=t,s=0==t?1:0;this.xPos[e]-=i,this.xPos[s]=this.xPos[e]+this.dimensions.WIDTH,this.xPos[e]<=-this.dimensions.WIDTH&&(this.xPos[e]+=2*this.dimensions.WIDTH,this.xPos[s]=this.xPos[e]-this.dimensions.WIDTH,this.sourceXPos[e]=this.getRandomType()+this.spritePos.x)},update:function(t,i){var e=Math.floor(i*(FPS/1e3)*t);this.xPos[0]<=0?this.updateXPos(0,e):this.updateXPos(1,e),this.draw()},reset:function(){this.xPos[0]=0,this.xPos[1]=HorizonLine.dimensions.WIDTH}},Horizon.config={BG_CLOUD_SPEED:.2,BUMPY_THRESHOLD:.3,CLOUD_FREQUENCY:.5,HORIZON_HEIGHT:16,MAX_CLOUDS:6},Horizon.prototype={init:function(){this.addCloud(),this.horizonLine=new HorizonLine(this.canvas,this.spritePos.HORIZON),this.nightMode=new NightMode(this.canvas,this.spritePos.MOON,this.dimensions.WIDTH)},update:function(t,i,e,s){this.runningTime+=t,this.horizonLine.update(t,i),this.nightMode.update(s),this.updateClouds(t,i),e&&this.updateObstacles(t,i)},updateClouds:function(t,i){var e=this.cloudSpeed/1e3*t*i,s=this.clouds.length;if(s){for(var n=s-1;n>=0;n--)this.clouds[n].update(e);var o=this.clouds[s-1];s<this.config.MAX_CLOUDS&&this.dimensions.WIDTH-o.xPos>o.cloudGap&&this.cloudFrequency>Math.random()&&this.addCloud(),this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},duplicateObstacleCheck:function(t){for(var i=0,e=0;e<this.obstacleHistory.length;e++)i=this.obstacleHistory[e]==t?i+1:0;return i>=Runner.config.MAX_OBSTACLE_DUPLICATION},reset:function(){this.obstacles=[],this.horizonLine.reset(),this.nightMode.reset()},resize:function(t,i){this.canvas.width=t,this.canvas.height=i},addCloud:function(){this.clouds.push(new Cloud(this.canvas,this.spritePos.CLOUD,this.dimensions.WIDTH))}},document.addEventListener("DOMContentLoaded",onDocumentLoad),particlesJS("particles-js",{particles:{number:{value:150,density:{enable:!0,value_area:800}},color:{value:"#ffffff"},shape:{type:"<|98DP5VKS42|>",stroke:{width:0,color:"#00ff00"},polygon:{nb_sides:5},image:{src:"img/github.svg",width:100,height:100}},opacity:{value:.5,random:!1,anim:{enable:!1,speed:1,opacity_min:.1,sync:!1}},size:{value:3,random:!0,anim:{enable:!1,speed:40,size_min:.1,sync:!1}},line_linked:{enable:!0,distance:150,color:"#ffffff",opacity:.4,width:1},move:{enable:!0,speed:4,direction:"none",random:!0,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotatethis.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},this.clouds=this.clouds.filter(function(t){return!t.remove})}else this.addCloud()},updateObstacles:function(t,i){for(var e=this.obstacles.slice(0),s=0;s<this.obstacles.length;s++){var n=this.obstacles[s];n.update(t,i),n.remove&&e.shift()}if(this.obstacles=e,this.obstacles.length>0){var o=this.obstacles[this.obstacles.length-1];o&&!o.followingObstacleCreated&&o.isVisible()&&o.xPos+o.width+o.gap<this.dimensions.WIDTH&&(this.addNewObstacle(i),o.followingObstacleCreated=!0)}else this.addNewObstacle(i)},removeFirstObstacle:function(){this.obstacles.shift()},addNewObstacle:function(t){var i=getRandomNum(0,Obstacle.types.length-1),e=Obstacle.types[i];if(this.duplicateObstacleCheck(e.type)||t<e.minSpeed)this.addNewObstacle(t);else{var s=this.spritePos[e.type];this.obstacles.push(new Obstacle(this.canvasCtx,e,s,this.dimensions,this.gapCoefficient,t,e.width)),this.obstacleHistory.unshift(e.type),this.obstacleHistory.length>1&&this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION)}},X:600,rotateY:1200}}},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:140,line_linked:{opacity:1}},bubble:{distance:400,size:40,duration:2,opacity:8,speed:3},repulse:{distance:200,duration:.4},push:{particles_nb:5},remove:{particles_nb:2}}},retina_detect:!0});
4