{"version":3,"sources":["/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/car-engine-loop-deep.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/grass/model.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/road/model.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/long_play.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/title.png","/Users/ryanhickman/Documents/GIT/game-ribbits/web-build/register-service-worker.js","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck1.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck2.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck3.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck4.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck5.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck6.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck7.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck8.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck9.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck10.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck11.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/buck12.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/chickendeath.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/chickendeath2.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/car-horn.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/carhit.mp3","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/carsquish3.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/Pop_1.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/Pop_2.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/bannerhit3-g.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/watersplashlow.mp3","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/Train_Alarm.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/train_pass_no_horn.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/train_pass_shorter.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/audio/trainsplat.wav","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/fonts/retro.ttf","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/grass/light-grass.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/grass/dark-grass.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/road/stripes-texture.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/road/blank-texture.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/0/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/0/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/1/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/1/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/2/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/2/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/3/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/log/3/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/0/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/0/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/1/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/1/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/2/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/2/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/3/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/tree/3/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/lily_pad/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/lily_pad/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/river/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/river/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/railroad/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/railroad/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/train_light/active/0/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/train_light/active/0/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/train_light/active/1/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/train_light/active/1/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/train_light/inactive/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/train_light/inactive/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/boulder/0/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/boulder/0/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/boulder/1/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/environment/boulder/1/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/train/front/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/train/front/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/train/middle/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/train/middle/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/train/back/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/train/back/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/police_car/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/police_car/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/blue_car/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/blue_car/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/blue_truck/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/blue_truck/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/green_car/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/green_car/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/orange_car/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/orange_car/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/purple_car/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/purple_car/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/red_truck/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/red_truck/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/taxi/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/vehicles/taxi/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/ribbit/ribbit.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/ribbit/ribbit.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/brent/0.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/brent/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/avocoder/avocoder.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/avocoder/avocoder.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/bacon/bacon.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/bacon/bacon.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/wheeler/wheeler.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/wheeler/wheeler.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/palmer/palmer.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/palmer/palmer.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/juwan/juwan.obj","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/models/characters/juwan/juwan.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/back.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/share.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/character.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/camera.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/controller.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/shop.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/menu.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/settings.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/rank.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/social.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/random.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/mail.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/metabox.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/metaboxsave.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/alerts.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/conserve_battery.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/credits.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/facebook.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/language.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/mute.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/purchase.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/shadows.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/buttons/video_ads.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/hand/0.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/images/hand/1.png","/Users/ryanhickman/Documents/GIT/game-ribbits/assets/icons/loading.png","/Users/ryanhickman/Documents/GIT/game-ribbits/context/GameContext.js","/Users/ryanhickman/Documents/GIT/game-ribbits/context/GameProvider.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/GestureView.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/ScoreText.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Audio.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/AudioManager.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Characters.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/GameSettings.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Particles/Feathers.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Particles/Water.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Models.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/CrossyMaterial.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Generic.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Hero.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Car.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Log.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Road.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Grass.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/River.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Tree.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Train.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/Boulder.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/RailRoad.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/TrainLight.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Node/LilyPad.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/ModelLoader.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Row/RailRoad.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Row/Road.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Particles/Foam.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Row/Water.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Row/Grass.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Row/index.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/CrossyGame.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/CrossyPlayer.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/GameEngine.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/state.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/hooks/useDimensions.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/Button/index.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/GameOver/Countdown.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/GameOver/MetaBox.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/GameOver/Banner.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Colors.js","/Users/ryanhickman/Documents/GIT/game-ribbits/src/Images.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/GameOver/Footer.js","/Users/ryanhickman/Documents/GIT/game-ribbits/screens/GameOverScreen.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/HandCTA.js","/Users/ryanhickman/Documents/GIT/game-ribbits/components/Home/Footer.js","/Users/ryanhickman/Documents/GIT/game-ribbits/screens/HomeScreen.js","/Users/ryanhickman/Documents/GIT/game-ribbits/screens/SettingsScreen.js","/Users/ryanhickman/Documents/GIT/game-ribbits/screens/GameScreen.js","/Users/ryanhickman/Documents/GIT/game-ribbits/App.js","/Users/ryanhickman/Documents/GIT/game-ribbits/index.js"],"names":["module","exports","navigator","window","addEventListener","serviceWorker","register","scope","then","info","catch","error","console","createContext","character","setCharacter","highscore","setHighscore","STORAGE_KEY","SHOULD_REHYDRATE","defaultState","cacheAsync","value","a","async","AsyncStorage","setItem","JSON","stringify","rehydrateAsync","getItem","item","data","parse","GameProvider","children","React","parseModulesAsync","GameContext","Provider","swipeDirections","SWIPE_UP","SWIPE_DOWN","SWIPE_LEFT","SWIPE_RIGHT","swipeConfig","velocityThreshold","directionalOffsetThreshold","keyMap","Space","ArrowUp","KeyW","ArrowDown","KeyS","ArrowLeft","KeyA","ArrowRight","KeyD","isValidSwipe","velocity","directionalOffset","Math","abs","freezeBody","e","preventDefault","GestureView","props","context","onKeyDown","code","onResponderGrant","onKeyUp","direction","onSwipe","_handleShouldSetPanResponder","evt","gestureState","nativeEvent","touches","length","_gestureIsClick","dx","dy","_handlePanResponderEnd","swipeDirection","_getSwipeDirection","_triggerSwipeHandlers","onSwipeUp","onSwipeDown","onSwipeLeft","onSwipeRight","onTap","_isValidHorizontalSwipe","_isValidVerticalSwipe","vx","vy","touchStart","log","config","_panResponder","PanResponder","create","onPanResponderStart","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderRelease","onPanResponderTerminate","this","view","removeEventListener","style","View","flex","cursor","tabIndex","ref","nextView","component","findDOMNode","getElement","panHandlers","Component","generateTextShadow","width","Platform","select","web","textShadow","default","textShadowHighscore","Score","gameOver","score","useContext","useEffect","useSafeArea","top","left","pointerEvents","styles","container","max","Text","StyleSheet","position","color","fontFamily","fontSize","backgroundColor","marginTop","letterSpacing","chicken","move","require","die","car","passive","bg_music","button_in","button_out","banner","water","trainAlarm","train","MUTED","OS","clone","obj","Audio","Sound","sound","temp","Date","constructor","key","Object","prototype","hasOwnProperty","call","sounds","audioFileMoveIndex","playMoveSound","playAsync","keys","playPassiveCarSound","floor","random","playDeathSound","playCarHitSound","soundObject","isLooping","startOver","setPositionAsync","setIsLoopingAsync","warn","stopAsync","name","volumeAsync","volume","setVolumeAsync","pauseAsync","configureExperienceAudioAsync","setIsEnabledAsync","setupAudioAsync","assets","downloadAsync","AssetUtils","cacheAssetsAsync","files","arrayFromObject","setupAsync","Promise","all","AudioFiles","ribbit","id","groundLevel","sceneColor","startingRow","maxRows","disableDriftwood","CAMERA_EASING","MAP_OFFSET","BASE_ANIMATION_TIME","PI_2","PI","PLAYER_IDLE_SCALE","Feathers","waterMat","MeshPhongMaterial","flatShading","mesh","Group","run","type","removeParticle","p","visible","i","parts","m","tx","ty","tz","bezier","values","x","y","z","curviness","set","scale","delay","TweenMax","to","rotation","onComplete","onCompleteParams","bigParticleGeom","CubeGeometry","partPink","Mesh","push","add","Water","s","ease","Bounce","easeOut","environment","grass","model","texture","road","tree","lily_pad","river","railroad","train_light","active","inactive","boulder","vehicles","front","middle","back","police_car","blue_car","blue_truck","green_car","orange_car","purple_car","red_truck","taxi","characters","brent","avocoder","bacon","wheeler","palmer","juwan","textureCache","loadTexture","resource","TextureLoader","load","magFilter","NearestFilter","minFilter","materialCache","CrossyMaterial","map","emissiveIntensity","shininess","reflectivity","setShadows","castShadow","receiveShadow","traverse","child","Generic","models","globalModels","Models","getSize","Box3","setFromObject","size","getWidth","_downloadAssets","material","loadObjAsync","asset","_model","getRandom","_register","_download","setup","Error","Hero","Characters","cars","Car","index","Log","Road","Grass","River","Train","getDepth","box3","round","min","withSize","_train","getNode","offset","Boulder","RailRoad","TrainLight","LilyPad","loadModels","_lilyPad","_grass","_road","_river","_boulder","_tree","Tree","_car","_railroad","_trainLight","_log","_hero","heroWidth","onCollide","setupLight","light","railRoad","update","dt","player","drive","hitByTrain","moving","speed","startRingingLight","AudioManager","trainShouldCheckCollision","isAlive","collisionBox","forward","TweenLite","lightRinging","ringCount","ringLight","clearTimeout","timer","active_light_b","active_light_a","setTimeout","ModelLoader","_trainMesh","Object3D","carGen","val","remove","numCars","xDir","xPos","dir","hitBy","shouldCheckCollision","collideWithCar","isFirst","side","DoubleSide","geometry","PlaneBufferGeometry","Foam","rand","animate","n","startDelay","mDuration","_","Power2","easeIn","runAnimation","particle","entities","sineCount","sineInc","generate","isStaticRow","generateStatic","generateDynamic","numItems","mid","yoyo","repeat","easeInOut","bounce","entity","ridingOn","shouldCheckHazardCollision","getRidableForPosition","getCollisionLog","getPlayerLowerBouncePositionForEntity","getPlayerSunkenPosition","sin","willCollideWithLog2D","ridingOnOffset","foam","foamRight","Fill","empty","solid","HAS_WALLS","HAS_OBSTACLES","HAS_VARIETY","obstacleMap","treeGen","addObstacle","_rowCount","count","_x","useParticles","useShadows","CrossyScene","gl","resetParticles","featherParticles","copy","waterParticles","useParticle","requestAnimationFrame","createParticles","world","rumble","Vibration","vibrate","__gl","worldWithCamera","CrossyWorld","DirectionalLight","shadow","mapSize","height","camera","right","bottom","far","bias","enabled","Scene","CrossyCamera","updateScale","zoom","updateProjectionMatrix","lookAt","OrthographicCamera","AmbientLight","CrossyRenderer","setShadowsEnabled","gammaInput","gammaOutput","shadowMap","Renderer","GameMap","floorMap","treeCollision","targetZ","EntityContainer","items","CrossyGameMap","scene","grasses","roads","railRoads","rowCount","newRow","rowKind","ROW_TYPES","mapRowToObstacle","setRow","previousRowType","getRow","isFirstLane","init","row","Rows","hero","normalizeAngle","angle","atan2","cos","PlayerScaleAnimation","TimelineMax","PlayerIdleAnimation","Power1","PlayerPositionAnimation","targetPosition","initialPosition","delta","inAirPosition","CrossyPlayer","animations","reset","_character","node","utils","scaleLongestSideToSize","alignMesh","target","pause","targetRotation","lastPosition","idleAnimation","stopIdle","finishedMovingAnimation","positionChangeAnimation","createPositionAnimation","getHitByCar","getRunOverByCar","Engine","Dimensions","get","renderer","setSize","setupGame","gameMap","camCount","obstacle","collision","isGameEnded","onGameInit","idle","onGameReady","forwardScene","stopAnimations","onGameEnded","tick","moveOnEntity","moveOnCar","checkIfUserHasFallenOutOfFrame","updateScore","onUpdateScore","moveWithDirection","skipPendingMovement","ceil","targetRow","finalY","ridable","commitMovementAnimations","beginMoveWithDirection","runPosieAnimation","_onGLContextCreate","drawingBufferWidth","drawingBufferHeight","antialias","clearColor","unpause","_isGameStateEnded","cancelAnimationFrame","raf","render","time","now","endFrameEXP","Game","playing","paused","none","useState","screen","dimensions","setDimensions","onChange","Button","onPress","imageStyle","source","text","txtStyle","onPressIn","onPressOut","Image","image","resizeMode","Countdown","calculateTimeLeft","difference","UTC","timeLeft","d","h","setTimeLeft","getFullYear","timerComponents","forEach","interval","MetaBox","useDebounce","amount","setBlock","account","setAccount","bal","setBal","done","setDone","loading","setLoading","hash","setHash","shorten","parsed","chars","substring","display","flexDirection","twhite","numberOfLines","taddy","href","provider","ethers","providers","Web3Provider","ethereum","send","accounts","getBalance","balance","balanceInEther","formatEther","getBlockNumber","on","blockno","connectToMetamask","marginBottom","ActivityIndicator","justifyContent","dd","getTime","gasLimit","parseEther","formatBytes32String","getSigner","signer","sendTransaction","txObj","alert","saveScore","txtStyleb","opacity","textAlign","paddingTop","marginRight","alignItems","paddingHorizontal","marginVertical","button","Banner","metaboxSave","setMetaboxSave","animatedValue","useDimensions","Animated","minWidth","maxWidth","transform","translateX","title","sub","marginLeft","undefined","renderButton","blue","play","share","long_play","controller","shop","menu","settings","rank","social","mail","metabox","metaboxsave","alerts","conserve_battery","credits","facebook","language","mute","purchase","shadows","video_ads","hand","shareAsync","Share","message","url","dialogTitle","excludedActivityTypes","tintColor","Colors","Footer","setGameState","showSettings","navigation","canShare","setCanShare","isAvailableAsync","LayoutAnimation","easeInEaseOut","aspectRatio","Images","State","minHeight","maxHeight","Alert","cancelable","GameOver","Value","_animateBanners","playBannerSound","_animations","animation","timing","useNativeDriver","toValue","duration","easing","Easing","elastic","stagger","start","paddingBottom","interpolate","inputRange","outputRange","extrapolate","scaleY","paddingLeft","paddingRight","paragraph","margin","fontWeight","sprite","INTERVAL","HandCTA","setIndex","setInterval","prevIndex","clearInterval","hasShownTitle","Screen","keyCode","includes","onPlay","InteractionManager","runAfterInteractions","in","qubic","animatedTitleStyle","translateY","TouchableOpacity","activeOpacity","absoluteFill","finished","coins","onCharacterSelect","onShop","onMultiplayer","onCamera","shadowColor","shadowOpacity","shadowRadius","shadowOffset","TitleButton","marginHorizontal","toUpperCase","Settings","state","currentIndex","dismiss","goBack","pickRandom","randomCharacter","_showResult","result","buttons","flexWrap","defaultProps","DEBUG_CAMERA_CONTROLS","ready","viewKey","gameState","transitionScreensValue","transitionToGamePlayingState","engine","updateWithGameState","lastState","setState","newScore","onScreenResize","cancel","gestureName","renderGame","onStartGesture","overflow","onContextCreate","renderGameOver","absoluteFillObject","GameOverScreen","renderHomeScreen","HomeScreen","nextProps","nextState","SettingsScreen","isPaused","isDarkMode","renderSettingsScreen","GameScreen","scheme","useColorScheme","ignoredYellowBox","DEBUG_DONT_LOAD_ASSETS","AppLoading","appIsReady","setReady","setError","loadAsync","retro","stack","ErrorScreen","errorContainer","ScrollView","contentContainerStyle","errorTitle","errorText","SplashScreen","splash","borderRadius","paddingVertical","borderBottomWidth","hairlineWidth","borderBottomColor","registerRootComponent"],"mappings":"2FAAAA,EAAOC,QAAU,IAA0B,kD,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,0GCEvC,kBAAmBC,WACrBC,OAAOC,iBAAiB,QAAQ,WAC9BF,UAAUG,cACPC,SAAS,0BAA2B,CAAEC,MAAO,MAC7CC,MAAK,SAASC,OAGdC,OAAM,SAASC,GACdC,QAAQH,KAAK,oCAAqCE,U,qDCV1DX,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,2C,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,4C,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,gD,gBCA3CD,EAAOC,QAAU,IAA0B,gD,gBCA3CD,EAAOC,QAAU,IAA0B,wC,cCA3CD,EAAOC,QAAU,yrlB,iBCAjBD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,6C,gBCA3CD,EAAOC,QAAU,IAA0B,2C,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,8C,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU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","file":"static/js/app.9de20128.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/car-engine-loop-deep.82cd2651.wav\";","module.exports = __webpack_public_path__ + \"static/media/model.aab5e3e2.obj\";","module.exports = __webpack_public_path__ + \"static/media/model.9c57e4f5.obj\";","module.exports = __webpack_public_path__ + \"static/media/long_play.6deaa9d0.png\";","module.exports = __webpack_public_path__ + \"static/media/title.302e645e.png\";","/* eslint-env browser */\n\nif ('serviceWorker' in navigator) {\n  window.addEventListener('load', function() {\n    navigator.serviceWorker\n      .register('/expo-service-worker.js', { scope: '/' })\n      .then(function(info) {\n        // console.info('Registered service-worker', info);\n      })\n      .catch(function(error) {\n        console.info('Failed to register service-worker', error);\n      });\n  });\n}\n","module.exports = __webpack_public_path__ + \"static/media/buck1.4aa583f7.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck2.b4eac0f9.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck3.44012186.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck4.d6480e8d.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck5.44203be9.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck6.79bf7a21.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck7.53ffe39e.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck8.9334b3c9.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck9.ab63ceb4.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck10.eb6b7bd9.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck11.173ed673.wav\";","module.exports = __webpack_public_path__ + \"static/media/buck12.89700367.wav\";","module.exports = __webpack_public_path__ + \"static/media/chickendeath.acf7cf4e.wav\";","module.exports = __webpack_public_path__ + \"static/media/chickendeath2.eb0c38fc.wav\";","module.exports = __webpack_public_path__ + \"static/media/car-horn.4b2b28f4.wav\";","module.exports = __webpack_public_path__ + \"static/media/carhit.2ea8fa18.mp3\";","module.exports = __webpack_public_path__ + \"static/media/carsquish3.9facced9.wav\";","module.exports = __webpack_public_path__ + \"static/media/Pop_1.96f6f788.wav\";","module.exports = __webpack_public_path__ + \"static/media/Pop_2.d14c1f4a.wav\";","module.exports = __webpack_public_path__ + \"static/media/bannerhit3-g.13b913cd.wav\";","module.exports = __webpack_public_path__ + \"static/media/watersplashlow.d9525f89.mp3\";","module.exports = __webpack_public_path__ + \"static/media/Train_Alarm.d08d7281.wav\";","module.exports = __webpack_public_path__ + \"static/media/train_pass_no_horn.3b0038cc.wav\";","module.exports = __webpack_public_path__ + \"static/media/train_pass_shorter.7f868528.wav\";","module.exports = __webpack_public_path__ + \"static/media/trainsplat.967c3d71.wav\";","module.exports = \"data:font/ttf;base64,AAEAAAARAQAABAAQTFRTSCcP+SkAAAMYAAAATE9TLzJJ2VX9AAABmAAAAGBQQ0xUHKCkZAAAN8AAAAA2VkRNWIFeiXEAAANkAAAF4GNtYXAHsQteAAAODAAAAXxjdnQgAURcVgAAEUwAAAAaZnBnbZ2bkJ4AAA+IAAABh2dseWa9SK8yAAARaAAAIEhoZG14u7KwZAAACUQAAATIaGVhZN4+lScAAAEcAAAANmhoZWECpAILAAABVAAAACRobXR4T7D/+gAAAfgAAAEgbG9jYVQvTG4AADGwAAAAkm1heHACbgIRAAABeAAAACBuYW1l6QEzxAAAMkQAAATCcG9zdF4FV5MAADcIAAAAt3ByZXB7jB89AAAREAAAADwAAQAAAAEAAB+E1PJfDzz1ABABLAAAAAC2l49iAAAAAMcMxnX/5wAAAZABLAAAAAMAAgAAAAAAAAABAAABLAAAAAABwv/nAAABkAABAAAAAAAAAAAAAAAAAAAASAABAAAASABIAAkAAAAAAAIACABAABQAAAIAAYcAAAAAAAMBHwGQAAUAAgDSAMMAAAArANIAwwAAAIgADwBOAAAAAAQAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAE1BQ1IAQAAgAHoBLAAAAAABLAAAAAAAAQAAAAD//wD6AAAAIAAAAJYAEwAAAAAAlgAAAJYAAAEsAAAAlgAAAJYAAAEsAAABLAAAAJb/5wEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAAAlgAAASwAAAEsAAABLAAAAcIAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAHCAAABLAAAASwAAAEsAAAAlgAAAJYAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAAJYAAAEsAAABLAAAASwAAAHCAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABwgAAASwAAAEsAAABLAAAAAAASBgBAQEYGBgBGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAQEBAQEADAD4CP8ACAAIAAAACQAJAAAACgAKAAAACwALAAAADAAMAAAADQANAAAADgAOAAAADwAPAAAAEAAQAAAAEQARAAAAEgASAAAAEwATAAAAFAAUAAAAFQAVAAAAFgAWAAAAFwAXAAAAGAAYAAAAGQAZAAAAGgAaAAAAGwAbAAAAHAAcAAAAHQAdAAAAHgAeAAAAHwAfAAAAIAAgAAAAIQAhAAAAIgAiAAAAIwAjAAAAJAAkAAAAJQAlAAAAJgAmAAAAJwAnAAAAKAAoAAAAKQApAAAAKgAqAAAAKwArAAAALAAsAAAALQAtAAAALgAuAAAALwAvAAAAMAAwAAAAMQAxAAAAMgAyAAAAMwAzAAAANAA0AAAANQA1AAAANgA2AAAANwA3AAAAOAA4AAAAOQA5AAAAOgA6AAAAOwA7AAAAPAA8AAAAPQA9AAAAPgA+AAAAPwA/AAAAQABAAAAAQQBBAAAAQgBCAAAAQwBDAAAARABEAAAARQBFAAAARgBGAAAARwBHAAAASABIAAAASQBJAAAASgBKAAAASwBLAAAATABMAAAATQBNAAAATgBOAAAATwBPAAAAUABQAAAAUQBRAAAAUgBSAAAAUwBTAAAAVABUAAAAVQBVAAAAVgBWAAAAVwBXAAAAWABYAAAAWQBZAAAAWgBaAAAAWwBbAAAAXABcAAAAXQBdAAAAXgBeAAAAXwBfAAAAYABgAAAAYQBhAAAAYgBiAAAAYwBjAAAAZABkAAAAZQBlAAAAZgBmAAAAZwBnAAAAaABoAAAAaQBpAAAAagBqAAAAawBrAAAAbABsAAAAbQBtAAAAbgBuAAAAbwBvAAAAcABwAAAAcQBxAAAAcgByAAAAcwBzAAAAdAB0AAAAdQB1AAAAdgB2AAAAdwB3AAAAeAB4AAAAeQB5AAAAegB6AAAAewB7AAAAfAB8AAAAfQB9AAAAfgB+AAAAfwB/AAAAgACAAAAAgQCBAAAAggCCAAAAgwCDAAAAhACEAAAAhQCFAAAAhgCGAAAAhwCHAAAAiACIAAAAiQCJAAAAigCKAAAAiwCLAAAAjACMAAAAjQCNAAAAjgCOAAAAjwCPAAAAkACQAAAAkQCRAAAAkgCSAAAAkwCTAAAAlACUAAAAlQCVAAAAlgCWAAAAlwCXAAAAmACYAAAAmQCZAAAAmgCaAAAAmwCbAAAAnACcAAAAnQCdAAAAngCeAAAAnwCfAAAAoACg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\"","module.exports = __webpack_public_path__ + \"static/media/light-grass.a86a3cb5.png\";","module.exports = __webpack_public_path__ + \"static/media/dark-grass.38211f94.png\";","module.exports = __webpack_public_path__ + \"static/media/stripes-texture.0454e926.png\";","module.exports = __webpack_public_path__ + \"static/media/blank-texture.d453dae0.png\";","module.exports = __webpack_public_path__ + \"static/media/0.56f53a37.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.1c72b1d0.png\";","module.exports = __webpack_public_path__ + \"static/media/0.bc3aa20a.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.d72ece00.png\";","module.exports = __webpack_public_path__ + \"static/media/0.ea2f658f.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.63d09ef0.png\";","module.exports = __webpack_public_path__ + \"static/media/0.bd4e40ef.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.8cc68c5b.png\";","module.exports = __webpack_public_path__ + \"static/media/0.b3501e5f.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.95ad771e.png\";","module.exports = __webpack_public_path__ + \"static/media/0.5ef986e2.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.833474d6.png\";","module.exports = __webpack_public_path__ + \"static/media/0.6706612c.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.35cfe0ec.png\";","module.exports = __webpack_public_path__ + \"static/media/0.bf470b49.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.116e0dfe.png\";","module.exports = __webpack_public_path__ + \"static/media/0.573a3531.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.50ff4dd9.png\";","module.exports = __webpack_public_path__ + \"static/media/0.a6053609.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.d9d54ef9.png\";","module.exports = __webpack_public_path__ + \"static/media/0.cd2e8ca7.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.ebddfb2d.png\";","module.exports = __webpack_public_path__ + \"static/media/0.a0ca40af.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.ab92f32c.png\";","module.exports = __webpack_public_path__ + \"static/media/0.a0ca40af.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.174ff134.png\";","module.exports = __webpack_public_path__ + \"static/media/0.a0ca40af.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.629de6ce.png\";","module.exports = __webpack_public_path__ + \"static/media/0.d9396782.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.9232f5c8.png\";","module.exports = __webpack_public_path__ + \"static/media/0.49cb3059.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.c6799b6f.png\";","module.exports = __webpack_public_path__ + \"static/media/0.b3b1279d.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.321796c1.png\";","module.exports = __webpack_public_path__ + \"static/media/0.37c23a5e.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.54d0484b.png\";","module.exports = __webpack_public_path__ + \"static/media/0.72622942.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.a643bb8a.png\";","module.exports = __webpack_public_path__ + \"static/media/0.5a35af32.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.17b16b8f.png\";","module.exports = __webpack_public_path__ + \"static/media/0.320080cf.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.2aa631fd.png\";","module.exports = __webpack_public_path__ + \"static/media/0.2af65085.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.bc711cf5.png\";","module.exports = __webpack_public_path__ + \"static/media/0.807ac2c3.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.56a8eecc.png\";","module.exports = __webpack_public_path__ + \"static/media/0.c87b2a95.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.5f73ae31.png\";","module.exports = __webpack_public_path__ + \"static/media/0.e96eba1d.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.f80e16e9.png\";","module.exports = __webpack_public_path__ + \"static/media/0.2af65085.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.de2aeba8.png\";","module.exports = __webpack_public_path__ + \"static/media/0.81235471.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.72dd3531.png\";","module.exports = __webpack_public_path__ + \"static/media/ribbit.6c8ce771.obj\";","module.exports = __webpack_public_path__ + \"static/media/ribbit.2ba658d7.png\";","module.exports = __webpack_public_path__ + \"static/media/0.c12ad362.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.73ceab8d.png\";","module.exports = __webpack_public_path__ + \"static/media/avocoder.26cd9980.obj\";","module.exports = __webpack_public_path__ + \"static/media/avocoder.c767d961.png\";","module.exports = __webpack_public_path__ + \"static/media/bacon.b73bab18.obj\";","module.exports = __webpack_public_path__ + \"static/media/bacon.c767d961.png\";","module.exports = __webpack_public_path__ + \"static/media/wheeler.db522d68.obj\";","module.exports = __webpack_public_path__ + \"static/media/wheeler.c767d961.png\";","module.exports = __webpack_public_path__ + \"static/media/palmer.ff49f152.obj\";","module.exports = __webpack_public_path__ + \"static/media/palmer.c767d961.png\";","module.exports = __webpack_public_path__ + \"static/media/juwan.caa81a99.obj\";","module.exports = __webpack_public_path__ + \"static/media/juwan.c767d961.png\";","module.exports = __webpack_public_path__ + \"static/media/back.a411ebbc.png\";","module.exports = __webpack_public_path__ + \"static/media/share.93ae7583.png\";","module.exports = __webpack_public_path__ + \"static/media/character.08d633a9.png\";","module.exports = __webpack_public_path__ + \"static/media/camera.7164a5d7.png\";","module.exports = __webpack_public_path__ + \"static/media/controller.efc933b6.png\";","module.exports = __webpack_public_path__ + \"static/media/shop.c31b4435.png\";","module.exports = __webpack_public_path__ + \"static/media/menu.31312208.png\";","module.exports = __webpack_public_path__ + \"static/media/settings.8e427a0f.png\";","module.exports = __webpack_public_path__ + \"static/media/rank.30bce3be.png\";","module.exports = __webpack_public_path__ + \"static/media/social.55ce680b.png\";","module.exports = __webpack_public_path__ + \"static/media/random.2514a6c8.png\";","module.exports = __webpack_public_path__ + \"static/media/mail.353b9155.png\";","module.exports = __webpack_public_path__ + \"static/media/metabox.44e6e8fe.png\";","module.exports = __webpack_public_path__ + \"static/media/metaboxsave.c41e692f.png\";","module.exports = __webpack_public_path__ + \"static/media/alerts.241d46ee.png\";","module.exports = __webpack_public_path__ + \"static/media/conserve_battery.421313a9.png\";","module.exports = __webpack_public_path__ + \"static/media/credits.78574f83.png\";","module.exports = __webpack_public_path__ + \"static/media/facebook.aed1ed0b.png\";","module.exports = __webpack_public_path__ + \"static/media/language.fc745a78.png\";","module.exports = __webpack_public_path__ + \"static/media/mute.5bf62eb9.png\";","module.exports = __webpack_public_path__ + \"static/media/purchase.4021f8c9.png\";","module.exports = __webpack_public_path__ + \"static/media/shadows.32bba169.png\";","module.exports = __webpack_public_path__ + \"static/media/video_ads.77265af3.png\";","module.exports = __webpack_public_path__ + \"static/media/0.b3d07170.png\";","module.exports = __webpack_public_path__ + \"static/media/1.7a1b60e6.png\";","module.exports = __webpack_public_path__ + \"static/media/loading.74e3d2f6.png\";","import { createContext } from 'react';\n\nexport default createContext({ character: 'ribbit', setCharacter() {}, highscore: 0, setHighscore() {}, });\n","import * as React from 'react';\nimport { StatusBar, AsyncStorage, View, Platform } from 'react-native';\n\nimport GameContext from './GameContext';\n\n// import AsyncStorage from '@react-native-community/async-storage';\n\nconst STORAGE_KEY = '@BouncyBacon:Character';\nconst SHOULD_REHYDRATE = true;\n\nconst defaultState = { character: 'ribbit', highscore: 0 };\n\nasync function cacheAsync(value) {\n    await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(value));\n}\n\nasync function rehydrateAsync() {\n    if (!SHOULD_REHYDRATE || !AsyncStorage) {\n        return defaultState;\n    }\n    try {\n        const item = await AsyncStorage.getItem(STORAGE_KEY);\n        const data = JSON.parse(item);\n        return data;\n    } catch (ignored) {\n        return defaultState;\n    }\n}\n\nexport default function GameProvider({ children }) {\n\n    const [character, setCharacter] = React.useState(\n        defaultState.character\n    );\n    const [highscore, setHighscore] = React.useState(\n        defaultState.highscore\n    );\n\n    React.useEffect(() => {\n        const parseModulesAsync = async () => {\n            try {\n                const { character, highscore } = await rehydrateAsync();\n                setCharacter(character);\n                setHighscore(highscore);\n            } catch (ignored) { }\n            //   setLoaded(true);\n        };\n\n        parseModulesAsync();\n    }, []);\n\n    return (\n        <GameContext.Provider\n            value={{\n                character,\n                setCharacter: character => {\n                    setCharacter(character);\n                    cacheAsync({ character, highscore });\n                },\n                highscore,\n                setHighscore: highscore => {\n                    setHighscore(highscore);\n                    cacheAsync({ character, highscore });\n                },\n            }}\n        >\n            {children}\n        </GameContext.Provider>\n    );\n}\n","'use strict';\nimport React, { Component } from 'react';\nimport { PanResponder, View, StyleSheet, TouchableWithoutFeedback } from 'react-native';\nimport { findDOMNode } from 'react-dom';\n\nconst getElement = component => {\n  try {\n    return findDOMNode(component);\n  } catch (e) {\n    return component;\n  }\n};\nexport const swipeDirections = {\n  SWIPE_UP: 'SWIPE_UP',\n  SWIPE_DOWN: 'SWIPE_DOWN',\n  SWIPE_LEFT: 'SWIPE_LEFT',\n  SWIPE_RIGHT: 'SWIPE_RIGHT',\n};\n\nconst swipeConfig = {\n  velocityThreshold: 0.3,\n  directionalOffsetThreshold: 80,\n};\n\nexport const keyMap = {\n  Space: 'SWIPE_UP',\n  ArrowUp: 'SWIPE_UP',\n  KeyW: 'SWIPE_UP',\n  ArrowDown: 'SWIPE_DOWN',\n  KeyS: 'SWIPE_DOWN',\n  ArrowLeft: 'SWIPE_LEFT',\n  KeyA: 'SWIPE_LEFT',\n  ArrowRight: 'SWIPE_RIGHT',\n  KeyD: 'SWIPE_RIGHT',\n};\n\nfunction isValidSwipe(\n  velocity,\n  velocityThreshold,\n  directionalOffset,\n  directionalOffsetThreshold,\n) {\n  return (\n    Math.abs(velocity) > velocityThreshold &&\n    Math.abs(directionalOffset) < directionalOffsetThreshold\n  );\n}\n\nconst freezeBody = e => {\n  e.preventDefault();\n};\nclass GestureView extends Component {\n  constructor(props, context) {\n    super(props, context);\n    this.swipeConfig = Object.assign(swipeConfig, props.config);\n    this._panResponder = PanResponder.create({\n      onPanResponderStart: () => {\n        this.props.onResponderGrant()\n      },\n      onStartShouldSetPanResponder: this._handleShouldSetPanResponder,\n      onMoveShouldSetPanResponder: this._handleShouldSetPanResponder,\n      onPanResponderRelease: this._handlePanResponderEnd,\n      onPanResponderTerminate: this._handlePanResponderEnd,\n    });\n  }\n\n  componentDidMount() {\n    window.addEventListener('keydown', this.onKeyDown, false);\n    window.addEventListener('keyup', this.onKeyUp, false);\n  }\n  componentWillUnmount() {\n    if (this.view) {\n      this.view.removeEventListener('touchstart', this.touchStart, false);\n      this.view.removeEventListener('touchmove', freezeBody, false);\n    }\n    window.removeEventListener('keydown', this.onKeyDown);\n    window.removeEventListener('keyup', this.onKeyUp);\n  }\n\n  componentWillReceiveProps(props) {\n    this.swipeConfig = Object.assign(swipeConfig, props.config);\n  }\n\n  onKeyDown = e => {\n    const direction = keyMap[e.code];\n    if (direction) {\n      this.props.onResponderGrant();\n    }\n  };\n\n  onKeyUp = e => {\n    const direction = keyMap[e.code];\n    if (direction) {\n      this.props.onSwipe(direction);\n    }\n  };\n\n  _handleShouldSetPanResponder = (evt, gestureState) => {\n    evt.preventDefault();\n    return evt.nativeEvent.touches.length === 1;\n  };\n\n  _gestureIsClick = gestureState => {\n    return Math.abs(gestureState.dx) < 5 && Math.abs(gestureState.dy) < 5;\n  };\n\n  _handlePanResponderEnd = (evt, gestureState) => {\n    evt.preventDefault();\n    const swipeDirection = this._getSwipeDirection(gestureState);\n    this._triggerSwipeHandlers(swipeDirection, gestureState);\n  };\n\n  _triggerSwipeHandlers = (swipeDirection, gestureState) => {\n    const {\n      onSwipe,\n      onSwipeUp,\n      onSwipeDown,\n      onSwipeLeft,\n      onSwipeRight,\n      onTap,\n    } = this.props;\n    const { SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN } = swipeDirections;\n    onSwipe && onSwipe(swipeDirection, gestureState);\n    switch (swipeDirection) {\n      case SWIPE_LEFT:\n        onSwipeLeft && onSwipeLeft(gestureState);\n        break;\n      case SWIPE_RIGHT:\n        onSwipeRight && onSwipeRight(gestureState);\n        break;\n      case SWIPE_UP:\n        onSwipeUp && onSwipeUp(gestureState);\n        break;\n      case SWIPE_DOWN:\n        onSwipeDown && onSwipeDown(gestureState);\n        break;\n      default:\n        onTap && onTap(gestureState);\n        break;\n    }\n  };\n\n  _getSwipeDirection = gestureState => {\n    const { SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN } = swipeDirections;\n    const { dx, dy } = gestureState;\n    if (this._isValidHorizontalSwipe(gestureState)) {\n      return dx > 0 ? SWIPE_RIGHT : SWIPE_LEFT;\n    } else if (this._isValidVerticalSwipe(gestureState)) {\n      return dy > 0 ? SWIPE_DOWN : SWIPE_UP;\n    }\n    return null;\n  };\n\n  _isValidHorizontalSwipe = gestureState => {\n    const { vx, dy } = gestureState;\n    const { velocityThreshold, directionalOffsetThreshold } = this.swipeConfig;\n    return isValidSwipe(vx, velocityThreshold, dy, directionalOffsetThreshold);\n  };\n\n  _isValidVerticalSwipe = gestureState => {\n    const { vy, dx } = gestureState;\n    const { velocityThreshold, directionalOffsetThreshold } = this.swipeConfig;\n    return isValidSwipe(vy, velocityThreshold, dx, directionalOffsetThreshold);\n  };\n\n  touchStart = (evt) => {\n    console.log('touch start')\n    // evt.preventDefault();\n    this.props.onResponderGrant();\n  }\n\n  render() {\n    const { style, ...props } = this.props;\n\n    return (\n      <View\n        style={[{ flex: 1, cursor: 'pointer' }, style]}\n        tabIndex=\"0\"\n        ref={view => {\n          const nextView = getElement(view);\n          if (nextView && nextView.addEventListener) {\n            nextView.addEventListener('touchstart', this.touchStart, false);\n            nextView.addEventListener('touchmove', freezeBody, false);\n          }\n          if (this.view && this.view.removeEventListener) {\n            this.view.removeEventListener('touchstart', this.touchStart, false);\n            this.view.removeEventListener('touchmove', freezeBody, false);\n          }\n          this.view = nextView;\n        }}\n        {...props}\n        {...this._panResponder.panHandlers}\n      />\n    );\n  }\n}\n\nexport default GestureView;\n","import React from 'react';\nimport { StyleSheet, Text,Platform, View } from 'react-native';\nimport { useSafeArea } from 'react-native-safe-area-context';\nimport GameContext from '../context/GameContext';\n\n\nfunction generateTextShadow(width) {\n  return  Platform.select({ web: {\n    textShadow: `-${width}px 0px 0px #000, ${width}px 0px 0px #000, 0px -${width}px 0px #000, 0px ${width}px 0px #000`\n  }, default: {} });\n} \nconst textShadow = generateTextShadow(4)\nconst textShadowHighscore = generateTextShadow(2)\nexport default function Score({ gameOver, score, ...props }) {\n  const { highscore = 0, setHighscore } = React.useContext(GameContext)\n\n  React.useEffect(() => {\n    if (gameOver) {\n      if (score > highscore) {\n        setHighscore(score);\n      }\n    }\n  }, [gameOver])\n\n\n  const { top, left } = useSafeArea();\n\n  return (\n    <View pointerEvents=\"none\" style={[styles.container, { top: Math.max(top, 16), left: Math.max(left, 8) }]}>\n      <Text style={[styles.score, textShadow]}>{score}</Text>\n      {highscore > 0 && (<Text style={[styles.highscore, textShadowHighscore]}>TOP {highscore}</Text>)}\n    </View>\n  )\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    position: 'absolute',\n  },\n  \n  score: {\n    color: 'white',\n    fontFamily: 'retro',\n    fontSize: 48,\n    backgroundColor: 'transparent',\n  },\n  highscore: {\n    color: 'yellow',\n    fontFamily: 'retro',\n    fontSize: 14,\n    marginTop: 4,\n    letterSpacing: -0.1,\n    backgroundColor: 'transparent',\n  }\n})","export default {\n  chicken: {\n    move: {\n      '0': require('../assets/audio/buck1.wav'),\n      '1': require('../assets/audio/buck2.wav'),\n      '2': require('../assets/audio/buck3.wav'),\n      '3': require('../assets/audio/buck4.wav'),\n      '4': require('../assets/audio/buck5.wav'),\n      '5': require('../assets/audio/buck6.wav'),\n      '6': require('../assets/audio/buck7.wav'),\n      '7': require('../assets/audio/buck8.wav'),\n      '8': require('../assets/audio/buck9.wav'),\n      '9': require('../assets/audio/buck10.wav'),\n      '10': require('../assets/audio/buck11.wav'),\n      '11': require('../assets/audio/buck12.wav'),\n    },\n    die: {\n      '0': require('../assets/audio/chickendeath.wav'),\n      '1': require('../assets/audio/chickendeath2.wav'),\n    },\n  },\n  car: {\n    passive: {\n      '0': require('../assets/audio/car-engine-loop-deep.wav'),\n      '1': require('../assets/audio/car-horn.wav'),\n    },\n    die: {\n      '0': require('../assets/audio/carhit.mp3'),\n      '1': require('../assets/audio/carsquish3.wav'),\n    },\n  },\n  bg_music: require('../assets/audio/car-engine-loop-deep.wav'),\n\n  button_in: require('../assets/audio/Pop_1.wav'),\n  button_out: require('../assets/audio/Pop_2.wav'),\n\n  banner: require('../assets/audio/bannerhit3-g.wav'),\n  water: require('../assets/audio/watersplashlow.mp3'),\n  trainAlarm: require('../assets/audio/Train_Alarm.wav'),\n  train: {\n    move: {\n      '0': require('../assets/audio/train_pass_no_horn.wav'),\n      '1': require('../assets/audio/train_pass_shorter.wav'),\n    },\n    die: {\n      '0': require('../assets/audio/trainsplat.wav'),\n    },\n  },\n};\n","import { Audio } from 'expo-av';\n// import Assets from './Assets';\nimport AssetUtils from 'expo-asset-utils';\nimport AudioFiles from './Audio';\nimport { Platform } from 'react-native';\n\n// Web just can't seem to handle audio\nconst MUTED = Platform.OS === 'web';\n\nclass AudioManager {\n  sounds = {};\n\n  audioFileMoveIndex = 0;\n\n  playMoveSound = async () => {\n    await this.playAsync(\n      this.sounds.chicken.move[`${this.audioFileMoveIndex}`],\n    );\n    this.audioFileMoveIndex =\n      (this.audioFileMoveIndex + 1) %\n      Object.keys(this.sounds.chicken.move).length;\n  };\n\n  playPassiveCarSound = async () => {\n    if (Math.floor(Math.random() * 2) === 0) {\n      await this.playAsync(this.sounds.car.passive[`1`]);\n    }\n  };\n\n  playDeathSound = async () => {\n    await this.playAsync(\n      this.sounds.chicken.die[`${Math.floor(Math.random() * 2)}`],\n    );\n  };\n\n  playCarHitSound = async () => {\n    await this.playAsync(\n      this.sounds.car.die[`${Math.floor(Math.random() * 2)}`],\n    );\n  };\n\n  playAsync = async (soundObject, isLooping, startOver = true) => {\n    if (MUTED) return;\n    // if (store.getState().muted) {\n    //   return;\n    // }\n\n    // if (this.sounds.hasOwnProperty(name)) {\n    //   const soundObject = this.sounds[name];\n    try {\n      if (startOver) {\n        await soundObject.setPositionAsync(0);\n      }\n\n      await soundObject.setIsLoopingAsync(isLooping);\n      await soundObject.playAsync();\n    } catch (error) {\n      console.warn('Error playing audio', { error });\n    }\n    // } else {\n    //   console.warn(\"Audio doesn't exist\", name);\n    //   console.log('Audio: Expected one of: ', this.sounds);\n    // }\n  };\n  stopAsync = async name => {\n    if (this.sounds.hasOwnProperty(name)) {\n      const soundObject = this.sounds[name];\n      try {\n        await soundObject.stopAsync();\n      } catch (error) {\n        console.warn('Error stopping audio', { error });\n      }\n    } else {\n      console.warn(\"Audio doesn't exist\", name);\n    }\n  };\n  volumeAsync = async (name, volume) => {\n    if (this.sounds.hasOwnProperty(name)) {\n      const soundObject = this.sounds[name];\n      try {\n        await soundObject.setVolumeAsync(volume);\n      } catch (error) {\n        console.warn('Error setting volume of audio', { error });\n      }\n    } else {\n      console.warn(\"Audio doesn't exist\", name);\n    }\n  };\n\n  pauseAsync = async name => {\n    if (this.sounds.hasOwnProperty(name)) {\n      const soundObject = this.sounds[name];\n      try {\n        await soundObject.pauseAsync();\n      } catch (error) {\n        console.warn('Error pausing audio', { error });\n      }\n    } else {\n      console.warn(\"Audio doesn't exist\", name);\n    }\n  };\n\n  configureExperienceAudioAsync = async () => {\n    await Audio.setIsEnabledAsync(true);\n    // await Audio.setAudioModeAsync({\n    //   allowsRecordingIOS: false,\n    //   interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,\n    //   playsInSilentModeIOS: false,\n    //   shouldDuckAndroid: true,\n    //   interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,\n    // });\n  };\n\n  get assets() {\n    return AudioFiles;\n  }\n\n  setupAudioAsync = async () => {\n    this.sounds = await clone(this.assets);\n    // console.log('sounds', this.sounds);\n  };\n\n  downloadAsync = async () =>\n    AssetUtils.cacheAssetsAsync({\n      files: [...AssetUtils.arrayFromObject(this.assets)],\n    });\n\n  setupAsync = async () => {\n    if (MUTED) {\n      return this.setupAudioAsync();\n    }\n\n    return Promise.all([\n      this.configureExperienceAudioAsync(),\n      this.downloadAsync(),\n      this.setupAudioAsync(),\n    ]);\n  };\n}\n\nasync function clone(obj) {\n  if (obj === null || typeof obj !== 'object' || 'isActiveClone' in obj) {\n    if (typeof obj === 'string' || typeof obj === 'number') {\n      if (MUTED) return null;\n      const { sound } = await Audio.Sound.create(obj);\n      return sound;\n    }\n    return obj;\n  }\n\n  if (obj instanceof Date) {\n    var temp = new obj.constructor(); //or new Date(obj);\n  } else {\n    var temp = obj.constructor();\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      obj['isActiveClone'] = null;\n      temp[key] = await clone(obj[key]);\n      delete obj['isActiveClone'];\n    }\n  }\n  return temp;\n}\n\nexport default new AudioManager();\n","export default {\n  ribbit: {\n    name: \"ribbit\",\n    id: \"ribbit\"\n  }\n};\n","export const groundLevel = 0.4;\nexport const sceneColor = 0x87C6FF;\nexport const startingRow = 8;\nexport const maxRows = 20;\nexport const disableDriftwood = false;\nexport const CAMERA_EASING = 0.03;\nexport const MAP_OFFSET = -30;\nexport const BASE_ANIMATION_TIME = 0.1;\nexport const IDLE_DURING_GAME_PLAY = false;\nexport const PI_2 = Math.PI * 0.5;\nexport const PLAYER_IDLE_SCALE = 0.8;\nexport const DEBUG_CAMERA_CONTROLS = false;\n","import { TweenMax } from 'gsap';\nimport { CubeGeometry, Group, Mesh, MeshPhongMaterial } from 'three';\n\nconst size = 0.1;\nexport default class Feathers {\n  waterMat = new MeshPhongMaterial({\n    color: 0xffffff,\n    flatShading: true,\n  });\n  mesh = new Group();\n  constructor() {\n    const bigParticleGeom = new CubeGeometry(size, size, 0.01, 1);\n    this.parts = [];\n    for (let i = 0; i < 20; i++) {\n      const partPink = new Mesh(bigParticleGeom, this.waterMat);\n      this.parts.push(partPink);\n      this.mesh.add(partPink);\n    }\n  }\n\n  run = (type, direction) => {\n    const explosionSpeed = 0.3;\n\n    const removeParticle = p => {\n      p.visible = false;\n    };\n\n    for (let i = 0; i < this.parts.length; i++) {\n      let m = direction < 0 ? -1 : 1;\n\n      let tx = (Math.random() * 5.0 + 2) * m;\n      let ty = Math.random() * 2.0 + 1;\n      let tz = Math.random() * 2.0 + 1;\n      let p = this.parts[i];\n\n      const bezier = {\n        type: 'cubic',\n        values: [\n          { x: 0, y: 0, z: 0 },\n          { x: tx * 0.25, y: ty * 0.25, z: tz * 0.25 },\n          { x: tx * 0.5, y: ty * 0.5, z: tz * 0.5 },\n\n          { x: tx, y: ty, z: tz },\n        ],\n        curviness: 3,\n      };\n\n      p.position.set(0, 0, 0);\n      p.scale.set(1, 1, 1);\n      p.visible = true;\n      let delay = explosionSpeed + Math.random() * 0.5;\n\n      TweenMax.to(p.position, delay * 5, {\n        bezier,\n        // ease: Bounce.easeOut,\n      });\n\n      TweenMax.to(p.rotation, delay * 5, {\n        z: Math.random() * (Math.PI * 2) + 0.2,\n        x: Math.random() * (Math.PI * 2) + 0.2,\n        y: Math.random() * (Math.PI * 2) + 0.2,\n        delay,\n      });\n\n      const scaleTo = 0.01;\n      TweenMax.to(p.scale, delay, {\n        x: scaleTo,\n        y: scaleTo,\n        z: scaleTo,\n        onComplete: removeParticle,\n        onCompleteParams: [p],\n        delay: delay * 3,\n      });\n    }\n  };\n}\n","import { Bounce, TweenMax } from 'gsap';\nimport { CubeGeometry, Group, Mesh, MeshPhongMaterial } from 'three';\n\nexport default class Water {\n  constructor() {\n    this.waterMat = new MeshPhongMaterial({\n      color: 0x71d7ff,\n      // shading: FlatShading,\n      flatShading: true,\n    });\n    this.mesh = new Group();\n    const size = 0.2;\n    const bigParticleGeom = new CubeGeometry(size, size + 0.1, size, 1);\n    // var smallParticleGeom = new CubeGeometry(0.1, 0.1, 0.1, 1);\n    this.parts = [];\n    for (let i = 0; i < 15; i++) {\n      let partPink = new Mesh(bigParticleGeom, this.waterMat);\n      // var partGreen = new Mesh(smallParticleGeom, this.waterMat);\n      this.parts.push(partPink);\n      this.mesh.add(partPink);\n    }\n  }\n\n  run = () => {\n    const explosionSpeed = 0.3;\n\n    const removeParticle = p => {\n      p.visible = false;\n    };\n\n    for (let i = 0; i < this.parts.length; i++) {\n      let tx = -1.0 + Math.random() * 1.0;\n      let ty = Math.random() * 2.0 + 1;\n      let tz = -1.0 + Math.random() * 1.0;\n      let p = this.parts[i];\n\n      const bezier = {\n        type: 'cubic',\n        values: [\n          { x: 0, y: 0, z: 0 },\n\n          { x: tx, y: ty, z: tz },\n          { x: tx * 0.8, y: ty * 0.8, z: tz * 0.8 },\n\n          { x: tx * (Math.random() * 0.5 + 1.1), y: 0, z: tz * (Math.random() * 0.5 + 1.1) },\n        ],\n        curviness: 0,\n      };\n\n      p.position.set(0, 0, 0);\n      p.scale.set(1, 1, 1);\n      p.visible = true;\n      const s = explosionSpeed + Math.random() * 0.5;\n\n      TweenMax.to(p.position, s * 4, {\n        bezier,\n        ease: Bounce.easeOut,\n      });\n\n      const scaleTo = 0.01;\n      TweenMax.to(p.scale, s, {\n        x: scaleTo,\n        y: scaleTo,\n        z: scaleTo,\n        onComplete: removeParticle,\n        onCompleteParams: [p],\n        delay: s * 3,\n      });\n    }\n  };\n}\n","export default {\n  environment: {\n    grass: {\n      '0': {\n        model: require('../assets/models/environment/grass/model.obj'),\n        texture: require('../assets/models/environment/grass/light-grass.png'),\n      },\n      '1': {\n        model: require('../assets/models/environment/grass/model.obj'),\n        texture: require('../assets/models/environment/grass/dark-grass.png'),\n      },\n    },\n    road: {\n      '0': {\n        model: require('../assets/models/environment/road/model.obj'),\n        texture: require('../assets/models/environment/road/stripes-texture.png'),\n      },\n      '1': {\n        model: require('../assets/models/environment/road/model.obj'),\n        texture: require('../assets/models/environment/road/blank-texture.png'),\n      },\n    },\n    log: {\n      '0': {\n        model: require('../assets/models/environment/log/0/0.obj'),\n        texture: require('../assets/models/environment/log/0/0.png'),\n      },\n      '1': {\n        model: require('../assets/models/environment/log/1/0.obj'),\n        texture: require('../assets/models/environment/log/1/0.png'),\n      },\n      '2': {\n        model: require('../assets/models/environment/log/2/0.obj'),\n        texture: require('../assets/models/environment/log/2/0.png'),\n      },\n      '3': {\n        model: require('../assets/models/environment/log/3/0.obj'),\n        texture: require('../assets/models/environment/log/3/0.png'),\n      },\n    },\n    tree: {\n      '0': {\n        model: require('../assets/models/environment/tree/0/0.obj'),\n        texture: require('../assets/models/environment/tree/0/0.png'),\n      },\n      '1': {\n        model: require('../assets/models/environment/tree/1/0.obj'),\n        texture: require('../assets/models/environment/tree/1/0.png'),\n      },\n      '2': {\n        model: require('../assets/models/environment/tree/2/0.obj'),\n        texture: require('../assets/models/environment/tree/2/0.png'),\n      },\n      '3': {\n        model: require('../assets/models/environment/tree/3/0.obj'),\n        texture: require('../assets/models/environment/tree/3/0.png'),\n      },\n    },\n    lily_pad: {\n      model: require('../assets/models/environment/lily_pad/0.obj'),\n      texture: require('../assets/models/environment/lily_pad/0.png'),\n    },\n\n    river: {\n      model: require('../assets/models/environment/river/0.obj'),\n      texture: require('../assets/models/environment/river/0.png'),\n    },\n    railroad: {\n      model: require('../assets/models/environment/railroad/0.obj'),\n      texture: require('../assets/models/environment/railroad/0.png'),\n    },\n    train_light: {\n      active: {\n        '0': {\n          model: require('../assets/models/environment/train_light/active/0/0.obj'),\n          texture: require('../assets/models/environment/train_light/active/0/0.png'),\n        },\n        '1': {\n          model: require('../assets/models/environment/train_light/active/1/0.obj'),\n          texture: require('../assets/models/environment/train_light/active/1/0.png'),\n        },\n      },\n      inactive: {\n        model: require('../assets/models/environment/train_light/inactive/0.obj'),\n        texture: require('../assets/models/environment/train_light/inactive/0.png'),\n      },\n    },\n    boulder: {\n      '0': {\n        model: require('../assets/models/environment/boulder/0/0.obj'),\n        texture: require('../assets/models/environment/boulder/0/0.png'),\n      },\n      '1': {\n        model: require('../assets/models/environment/boulder/1/0.obj'),\n        texture: require('../assets/models/environment/boulder/1/0.png'),\n      },\n    },\n  },\n  vehicles: {\n    train: {\n      front: {\n        model: require('../assets/models/vehicles/train/front/0.obj'),\n        texture: require('../assets/models/vehicles/train/front/0.png'),\n      },\n      middle: {\n        model: require('../assets/models/vehicles/train/middle/0.obj'),\n        texture: require('../assets/models/vehicles/train/middle/0.png'),\n      },\n      back: {\n        model: require('../assets/models/vehicles/train/back/0.obj'),\n        texture: require('../assets/models/vehicles/train/back/0.png'),\n      },\n    },\n\n    police_car: {\n      model: require('../assets/models/vehicles/police_car/0.obj'),\n      texture: require('../assets/models/vehicles/police_car/0.png'),\n    },\n    blue_car: {\n      model: require('../assets/models/vehicles/blue_car/0.obj'),\n      texture: require('../assets/models/vehicles/blue_car/0.png'),\n    },\n    blue_truck: {\n      model: require('../assets/models/vehicles/blue_truck/0.obj'),\n      texture: require('../assets/models/vehicles/blue_truck/0.png'),\n    },\n    green_car: {\n      model: require('../assets/models/vehicles/green_car/0.obj'),\n      texture: require('../assets/models/vehicles/green_car/0.png'),\n    },\n    orange_car: {\n      model: require('../assets/models/vehicles/orange_car/0.obj'),\n      texture: require('../assets/models/vehicles/orange_car/0.png'),\n    },\n    purple_car: {\n      model: require('../assets/models/vehicles/purple_car/0.obj'),\n      texture: require('../assets/models/vehicles/purple_car/0.png'),\n    },\n    red_truck: {\n      model: require('../assets/models/vehicles/red_truck/0.obj'),\n      texture: require('../assets/models/vehicles/red_truck/0.png'),\n    },\n    taxi: {\n      model: require('../assets/models/vehicles/taxi/0.obj'),\n      texture: require('../assets/models/vehicles/taxi/0.png'),\n    },\n  },\n  characters: {\n    ribbit: {\n      model: require('../assets/models/characters/ribbit/ribbit.obj'),\n      texture: require('../assets/models/characters/ribbit/ribbit.png'),\n    },\n    brent: {\n      model: require('../assets/models/characters/brent/0.obj'),\n      texture: require('../assets/models/characters/brent/0.png'),\n    },\n    // chicken: {\n    //   model: require('../assets/models/characters/chicken/0.obj'),\n    //   texture: require('../assets/models/characters/chicken/0.png'),\n    // },\n \n    avocoder: {\n      model: require('../assets/models/characters/avocoder/avocoder.obj'),\n      texture: require('../assets/models/characters/avocoder/avocoder.png'),\n    },\n    bacon: {\n      model: require('../assets/models/characters/bacon/bacon.obj'),\n      texture: require('../assets/models/characters/bacon/bacon.png'),\n    },\n    wheeler: {\n      model: require('../assets/models/characters/wheeler/wheeler.obj'),\n      texture: require('../assets/models/characters/wheeler/wheeler.png'),\n    },\n    palmer: {\n      model: require('../assets/models/characters/palmer/palmer.obj'),\n      texture: require('../assets/models/characters/palmer/palmer.png'),\n    },\n    juwan: {\n      model: require('../assets/models/characters/juwan/juwan.obj'),\n      texture: require('../assets/models/characters/juwan/juwan.png'),\n    },\n  }\n}","import { TextureLoader } from 'expo-three';\nimport { MeshPhongMaterial, NearestFilter } from 'three';\n\nconst textureCache = {};\n\nexport function loadTexture(resource) {\n    if (textureCache[resource]) {\n        return textureCache[resource].clone();\n    }\n\n    const texture = new TextureLoader().load(resource);\n\n    texture.magFilter = NearestFilter;\n    texture.minFilter = NearestFilter;\n\n    textureCache[resource] = texture;\n    return texture;\n}\n\nconst materialCache = {};\n\nexport default class CrossyMaterial extends MeshPhongMaterial {\n\n    static loadTexture = loadTexture;\n\n    static load(resource) {\n        if (materialCache[resource]) {\n            return materialCache[resource].clone();\n        }\n        materialCache[resource] = new MeshPhongMaterial({\n            map: loadTexture(resource),\n            flatShading: true,\n            emissiveIntensity: 0,\n            shininess: 0,\n            reflectivity: 0,\n        });\n\n        return materialCache[resource];\n    }\n}","import { loadObjAsync } from 'expo-three';\nimport { Mesh, Box3 } from 'three';\n\nimport Models from '../../src/Models';\nimport CrossyMaterial from '../CrossyMaterial';\n\nfunction setShadows(mesh, { castShadow, receiveShadow }) {\n  mesh.traverse(child => {\n    if (child instanceof Mesh) {\n      child.castShadow = castShadow;\n      child.receiveShadow = receiveShadow;\n    }\n  });\n\n  mesh.castShadow = castShadow;\n  mesh.receiveShadow = receiveShadow;\n}\nexport default class Generic {\n  models = {};\n\n  globalModels = Models;\n\n  getSize = mesh => {\n    let box = new Box3().setFromObject(mesh);\n    // console.log( box.min, box.max, box.size() );\n    return box.size();\n  };\n  getWidth = mesh => {\n    let box = new Box3().setFromObject(mesh);\n    // console.log( box.min, box.max, box.size() );\n    return box.size().width;\n  };\n\n  _downloadAssets = async ({ name, model, texture, castShadow, receiveShadow }) => {\n    const material = CrossyMaterial.load(texture)\n    const _model = await loadObjAsync({ asset: model });\n\n    _model.traverse(child => {\n      if (child instanceof Mesh) {\n        child.material = material;\n      }\n    });\n\n    setShadows(_model, { castShadow, receiveShadow })\n    return _model;\n  };\n\n  getRandom = () => {\n    let keys = Object.keys(this.models);\n    const key = keys[(keys.length * Math.random()) << 0];\n    return this.models[key].clone();\n  };\n\n  getNode(key = '0') {\n    if (key in this.models) {\n      return this.models[key].clone();\n    } else {\n      throw new Error(\n        `Generic: Node with Key ${key} does not exist in ${JSON.stringify(\n          Object.keys(this.models),\n          null,\n          2,\n        )}`,\n      );\n    }\n  }\n\n  _register = async (key, props) => {\n    return this.models[key] = await this._download(props)\n  }\n\n  _download = async props => {\n    return await this._downloadAssets(props);\n  };\n\n  setup = async () => { };\n}\n","import Characters from '../Characters';\nimport Generic from './Generic';\n\nexport default class Hero extends Generic {\n  setup = async () => {\n    const { characters } = this.globalModels;\n\n    for (let id of Object.keys(Characters)) {\n      if (id in Characters) {\n        let character = Characters[id];\n        const { model, texture } = characters[character.id];\n        await this._register(character.id, {\n          model,\n          texture,\n          receiveShadow: true,\n          castShadow: true,\n        });\n      }\n    }\n    return this.models;\n  };\n\n  getNode(key) {\n    const node = super.getNode(key);\n\n    return node;\n  }\n}\n","import Generic from './Generic';\n\nconst cars = [\n  'police_car',\n  'blue_car',\n  'blue_truck',\n  'green_car',\n  'orange_car',\n  'purple_car',\n  'red_truck',\n  'taxi',\n];\n\nexport default class Car extends Generic {\n  setup = async () => {\n    const { vehicles } = this.globalModels;\n\n    for (let index in cars) {\n      let car = cars[index];\n      await this._register(`${index}`, {\n        ...vehicles[car],\n        castShadow: true,\n        receiveShadow: true,\n      });\n    }\n\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class Log extends Generic {\n  setup = async () => {\n    const {\n      environment: { log },\n    } = this.globalModels;\n\n    for (let i = 0; i < 4; i++) {\n      await this._register(`${i}`, {\n        ...log[`${i}`],\n        castShadow: true,\n        receiveShadow: true,\n      });\n    }\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\n/*\nroad_0: Multi Lane Road.\nroad_1: Single Lane Road.\n*/\nexport default class Road extends Generic {\n  setup = async () => {\n    const {\n      environment: { road },\n    } = this.globalModels;\n\n    for (let i = 0; i < 2; i++) {\n      await this._register(`${i}`, {\n        ...road[`${i}`],\n        castShadow: false,\n        receiveShadow: true,\n      });\n    }\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class Grass extends Generic {\n  setup = async () => {\n    const {\n      environment: { grass },\n    } = this.globalModels;\n\n    for (let i = 0; i < 2; i++) {\n      await this._register(`${i}`, {\n        ...grass[`${i}`],\n        castShadow: false,\n        receiveShadow: true,\n      });\n    }\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class River extends Generic {\n  setup = async () => {\n    const {\n      environment: { river },\n    } = this.globalModels;\n    await this._register(`0`, { ...river, castShadow: false, receiveShadow: true });\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class Grass extends Generic {\n  setup = async () => {\n    const {\n      environment: { tree },\n    } = this.globalModels;\n    for (let i = 0; i < 4; i++) {\n      await this._register(`${i}`, {\n        ...tree[`${i}`],\n        castShadow: true,\n        receiveShadow: false,\n      });\n    }\n    return this.models;\n  };\n}\n","import { MeshPhongMaterial, Box3, CubeGeometry, Group, DoubleSide, Mesh, PlaneBufferGeometry, Object3D } from 'three';\n\nimport Generic from './Generic';\n\nexport default class Train extends Generic {\n  getDepth = mesh => {\n    let box3 = new Box3();\n    box3.setFromObject(mesh);\n\n    return Math.round(box3.max.x - box3.min.x);\n  };\n\n  withSize = (size = 2) => {\n    const _train = new Group();\n\n    const front = this.getNode('front');\n    _train.add(front);\n\n    //\n\n    // console.log( box.min, box.max, box.size() );\n    let offset = this.getDepth(front);\n    //\n    for (let i = 0; i < size; i++) {\n      const middle = this.getNode('middle');\n      middle.position.x = offset; //TODO: Measure.\n\n      _train.add(middle);\n      offset += this.getDepth(middle);\n    }\n    const back = this.getNode('back');\n    back.position.x = offset;\n    _train.add(back);\n\n    return _train;\n  };\n\n  setup = async () => {\n    const {\n      vehicles: { train },\n    } = this.globalModels;\n\n    await this._register('front', {\n      ...train[`front`],\n      receiveShadow: true,\n      castShadow: true,\n    });\n    await this._register('middle', {\n      ...train[`middle`],\n      receiveShadow: true,\n      castShadow: true,\n    });\n    await this._register('back', { ...train[`back`], receiveShadow: true, castShadow: true });\n\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class Boulder extends Generic {\n  setup = async () => {\n    const {\n      environment: { boulder },\n    } = this.globalModels;\n    for (let i = 0; i < 2; i++) {\n      await this._register(`${i}`, {\n        ...boulder[`${i}`],\n        castShadow: true,\n        receiveShadow: false,\n      });\n    }\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class RailRoad extends Generic {\n  setup = async () => {\n    const {\n      environment: { railroad },\n    } = this.globalModels;\n    await this._register(`0`, { ...railroad, castShadow: false, receiveShadow: true });\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class TrainLight extends Generic {\n  setup = async () => {\n    const {\n      environment: {\n        train_light: { active, inactive },\n      },\n    } = this.globalModels;\n\n    await this._register(`0`, inactive);\n\n    for (let i = 0; i < 2; i++) {\n      await this._register(`active_${i}`, active[`${i}`]);\n    }\n    return this.models;\n  };\n}\n","import Generic from './Generic';\n\nexport default class LilyPad extends Generic {\n  setup = async () => {\n    const {\n      environment: { lily_pad },\n    } = this.globalModels;\n\n    await this._register(`0`, {\n      ...lily_pad,\n      castShadow: true,\n      receiveShadow: true,\n    });\n    return this.models;\n  };\n}\n","import Hero from './Node/Hero';\nimport Car from './Node/Car';\nimport Log from './Node/Log';\nimport Road from './Node/Road';\nimport Grass from './Node/Grass';\nimport River from './Node/River';\nimport Tree from './Node/Tree';\nimport Train from './Node/Train';\nimport Boulder from './Node/Boulder';\nimport RailRoad from './Node/RailRoad';\nimport TrainLight from './Node/TrainLight';\nimport LilyPad from './Node/LilyPad';\n\nclass ModelLoader {\n  loadModels = async () => {\n    this._lilyPad = new LilyPad();\n    this._grass = new Grass();\n    this._road = new Road();\n    this._river = new River();\n    this._boulder = new Boulder();\n    this._tree = new Tree();\n    this._car = new Car();\n    this._railroad = new RailRoad();\n    this._train = new Train();\n    this._trainLight = new TrainLight();\n    this._log = new Log();\n    this._hero = new Hero();\n\n    // try {\n    await Promise.all([\n      this._lilyPad.setup(),\n      this._road.setup(),\n      this._grass.setup(),\n      this._river.setup(),\n      this._log.setup(),\n      this._boulder.setup(),\n      this._tree.setup(),\n      this._car.setup(),\n      this._railroad.setup(),\n      this._train.setup(),\n      this._hero.setup(),\n      this._trainLight.setup(),\n    ]);\n    console.log('Done Loading 3D Models!');\n    // } catch (error) {\n    //   console.warn(`:( We had a problem loading the 3D Models: ${error}`);\n    // }\n  };\n}\n\nexport default new ModelLoader();\n","import { TweenMax } from 'gsap';\nimport { Object3D, Box3, SpotLight, SpotLightHelper } from 'three';\n\nimport AudioManager from '../../src/AudioManager';\nimport ModelLoader from '../../src/ModelLoader';\nimport { groundLevel } from '../GameSettings';\n\nconst IS_MUTED = true;\nexport default class RailRoad extends Object3D {\n  active = false;\n\n  top = 0.5;\n\n  getWidth = mesh => {\n    let box3 = new Box3();\n    box3.setFromObject(mesh);\n    return Math.round(box3.max.x - box3.min.x);\n  };\n\n  constructor(heroWidth, onCollide) {\n    super();\n    this.heroWidth = heroWidth;\n    this.onCollide = onCollide;\n    const { _railroad, _trainLight, _train } = ModelLoader;\n\n    this.railRoad = _railroad.getNode();\n\n    this.light = _trainLight.getNode('0');\n    this.active_light_a = _trainLight.getNode('active_0');\n    this.active_light_b = _trainLight.getNode('active_1');\n\n    this._trainMesh = _train.withSize(Math.random() * 2 + 1);\n    const width = this.getWidth(this._trainMesh);\n    this.train = {\n      mesh: this._trainMesh,\n      speed: 0.8,\n      width,\n      collisionBox: this.heroWidth / 2 + width / 2 - 0.1,\n    };\n\n    this.setupLight(this.light);\n    this.setupLight(this.active_light_a);\n    this.setupLight(this.active_light_b);\n    this.active_light_a.visible = false;\n    this.active_light_b.visible = false;\n\n    this.railRoad.add(this._trainMesh);\n\n    this._trainMesh.position.y = groundLevel;\n    this._trainMesh.position.z = 0.1;\n\n    this.add(this.railRoad);\n  }\n  setupLight = light => {\n    light.position.z = -0.5;\n    light.rotation.y = Math.PI;\n    // Make train light shine a little red light down\n    // const spotLight = new SpotLight( 0xff0000 );\n    // // spotLight.rotation.x = Math.PI;\n    // spotLight.distance = 1;\n    // spotLight.position.z = -0.5;\n    // spotLight.target.position.z = -1;\n    // spotLight.castShadow = false;\n    // const spotLightHelper = new SpotLightHelper( spotLight );\n\n    // this.railRoad.add( spotLightHelper );\n    // this.railRoad.add( spotLight );\n    // this.railRoad.add( spotLight.target );\n\n    this.railRoad.add(light);\n  };\n\n  update = (dt, player) => {\n    if (!this.active) {\n      return;\n    }\n    this.drive({ dt, player });\n  };\n\n  drive = ({ dt, player }) => {\n    const { position, hitByTrain, moving } = player;\n    const { train } = this;\n    const offset = 22 * 5;\n\n    train.mesh.position.x += train.speed;\n\n    if (train.mesh.position.x > offset && train.speed > 0) {\n      train.mesh.position.x = -offset;\n      this.startRingingLight();\n      AudioManager.playAsync(AudioManager.sounds.train.move['0']);\n      if (train === hitByTrain) {\n        player.hitByTrain = null;\n      }\n    } else if (train.mesh.position.x < -offset && train.speed < 0) {\n      train.mesh.position.x = offset;\n      this.startRingingLight();\n      AudioManager.playAsync(AudioManager.sounds.train.move['0']);\n      if (train === hitByTrain) {\n        player.hitByTrain = null;\n      }\n    } else if (!moving) {\n      this.trainShouldCheckCollision({ player });\n    }\n  };\n\n  trainShouldCheckCollision = ({ player }) => {\n    const { train } = this;\n    if (Math.round(player.position.z) == this.position.z && player.isAlive) {\n      const { mesh, collisionBox } = train;\n\n      if (\n        player.position.x < mesh.position.x + collisionBox &&\n        player.position.x > mesh.position.x - collisionBox\n      ) {\n        if (\n          player.moving &&\n          Math.abs(player.position.z - Math.round(player.position.z)) > 0.1\n        ) {\n          const forward = player.position.z - Math.round(player.position.z) > 0;\n          player.position.z = this.position.z + (forward ? 0.52 : -0.52);\n\n          TweenLite.to(player.scale, 0.3, {\n            y: 1.5,\n            z: 0.2,\n          });\n          TweenMax.to(player.rotation, 0.3, {\n            z: Math.random() * Math.PI - Math.PI / 2,\n          });\n\n          this.onCollide(train, 'feathers', 'train');\n          return;\n        } else {\n          ///Run Over Hero. ///TODO: Add a side collide\n          // this._hero.scale.y = 0.2;\n          // this._hero.scale.x = 1.5;\n          // this._hero.rotation.y = (Math.random() * Math.PI) - Math.PI/2;\n          player.position.y = groundLevel;\n\n          TweenMax.to(player.scale, 0.3, {\n            y: 0.2,\n            x: 1.5,\n          });\n          TweenMax.to(player.rotation, 0.3, {\n            y: Math.random() * Math.PI - Math.PI / 2,\n          });\n        }\n        this.onCollide();\n      }\n    }\n  };\n\n  startRingingLight = () => {\n    this.lightRinging = true;\n    this.ringCount = 0;\n    this.ringLight();\n    //  AudioManager.playAsync(\n    //   AudioManager.sounds.trainAlarm\n    // );\n  };\n\n  ringLight = () => {\n    clearTimeout(this.timer);\n    if (this.lightRinging && this.ringCount < 15) {\n      this.light.visible = false;\n      this.ringCount += 1;\n      this.active_light_b.visible = this.active_light_a.visible;\n      this.active_light_a.visible = !this.active_light_a.visible;\n\n      this.timer = setTimeout(this.ringLight, 200);\n    } else {\n      this.lightRinging = false;\n      this.ringCount = 0;\n      this.light.visible = true;\n      this.active_light_b.visible = this.active_light_a.visible = false;\n    }\n  };\n}\n","import { Box3, Object3D } from 'three';\n\nimport ModelLoader from '../../src/ModelLoader';\n\nexport default class Road extends Object3D {\n  active = false;\n  cars = [];\n\n  top = 0.3;\n\n  isFirstLane(isFirst) {\n    if (isFirst) {\n      this.road.material = ModelLoader._road.models['1'].children[0].material;\n    } else {\n      this.road.material = ModelLoader._road.models['0'].children[0].material;\n    }\n  }\n\n  getWidth = mesh => {\n    let box3 = new Box3();\n    box3.setFromObject(mesh);\n    // console.log( box.min, box.max, box.size() );\n    return Math.round(box3.max.z - box3.min.z);\n  };\n\n  carGen = () => {\n    this.cars.map(val => {\n      this.road.remove(val.mesh);\n      val = null;\n    });\n    this.cars = [];\n\n    // Speeds: .01 through .08\n    // Number of cars: 1 through 3\n    let speed = Math.random() * 0.06 + 0.02;\n    let numCars = Math.floor(Math.random() * 2) + 1;\n    let xDir = 1;\n\n    if (Math.random() > 0.5) {\n      xDir = -1;\n    }\n\n    let xPos = -6 * xDir;\n\n    for (let x = 0; x < numCars; x++) {\n      if (this.cars.length - 1 < x) {\n        let mesh = ModelLoader._car.getRandom();\n        const width = this.getWidth(mesh);\n\n        this.cars.push({\n          mesh,\n          dir: xDir,\n          width,\n          collisionBox: this.heroWidth / 2 + width / 2 - 0.1,\n        });\n\n        this.road.add(mesh);\n      }\n\n      this.cars[x].mesh.position.set(xPos, 0.25, 0);\n      this.cars[x].speed = speed * xDir;\n      this.cars[x].mesh.rotation.y = Math.PI / 2 * xDir;\n\n      xPos -= (Math.random() * 3 + 5) * xDir;\n    }\n  };\n\n  constructor(heroWidth, onCollide) {\n    super();\n    this.heroWidth = heroWidth;\n    this.onCollide = onCollide;\n    const { _road } = ModelLoader;\n\n    this.road = _road.models['1'].children[0].clone();\n    this.add(this.road);\n\n    this.carGen();\n  }\n\n  update = (dt, player) => {\n    if (!this.active) {\n      return;\n    }\n    this.cars.map(car => this.drive({ dt, player, car }));\n  };\n\n  drive = ({ dt, player, car }) => {\n    const { hitBy } = player;\n    const offset = 11;\n\n    car.mesh.position.x += car.speed;\n\n    if (car.mesh.position.x > offset && car.speed > 0) {\n      car.mesh.position.x = -offset;\n      if (car === hitBy) {\n        player.hitBy = null;\n      }\n    } else if (car.mesh.position.x < -offset && car.speed < 0) {\n      car.mesh.position.x = offset;\n      if (car === hitBy) {\n        player.hitBy = null;\n      }\n    } else {\n      this.shouldCheckCollision({ player, car });\n    }\n  };\n\n  shouldCheckCollision = ({ player, car }) => {\n    if (Math.round(player.position.z) == this.position.z && player.isAlive) {\n      const { mesh, collisionBox } = car;\n\n      if (\n        player.position.x < mesh.position.x + collisionBox &&\n        player.position.x > mesh.position.x - collisionBox\n      ) {\n        player.collideWithCar(this, car);\n        this.onCollide(car, 'feathers', 'car');\n      }\n    }\n  };\n}\n","import { Bounce, Power2, TweenMax } from 'gsap';\nimport { MeshPhongMaterial, DoubleSide, Mesh, PlaneBufferGeometry, Object3D } from 'three';\n\nconst size = 0.6;\n\nconst material = new MeshPhongMaterial({\n  color: 0xffffff,\n  flatShading: true,\n  side: DoubleSide,\n});\nconst geometry = new PlaneBufferGeometry(size, size, 1);\n\nexport default class Foam extends Object3D {\n  parts = [];\n\n  constructor(direction) {\n    super();\n    this.direction = direction;\n\n    for (let i = 0; i < 6; i++) {\n      const particle = new Mesh(geometry, material);\n      particle.rotation.x = Math.PI / 2;\n      particle.position.set(0, 0, 0);\n      this.parts.push(particle);\n      this.add(particle);\n    }\n  }\n\n  run = (type, direction) => {\n    const rand = ({ min = 0, max = 1 }) => Math.random() * (max - min) + min;\n\n    const scale = (scale, node, duration, delay = 0) =>\n      TweenMax.to(node.scale, duration, {\n        x: scale,\n        y: scale,\n        z: scale,\n        delay,\n        // ease: Bounce.easeOut,\n      });\n\n    const setup = (n, i) => {\n      n.position.set(\n        rand({ min: -0.1, max: 0.1 }),\n        0,\n        (0.6 / this.parts.length) * i + 0.2,\n      );\n      n.visible = true;\n\n      const minScale = 0.01;\n      n.scale.set(minScale, minScale, minScale);\n      n.rotation.y = Math.random() * 0.6 - 0.3;\n    };\n\n    const animate = (n, i) => {\n      const mScale = 1;\n      const mDuration = 0.4;\n      const lDuration = 1.2;\n      const totalDuration = mDuration + lDuration;\n\n      /// Every other particle starts mid way through the first particles animation.\n      const startDelay = totalDuration * 0.2 * i;\n      TweenMax.to(n.scale, mDuration, {\n        x: mScale,\n        y: mScale,\n        z: mScale,\n        delay: startDelay,\n        ease: Bounce.easeOut,\n        onComplete: _ => {\n          const lScale = 0.01;\n          TweenLite.to(n.scale, lDuration, {\n            x: lScale,\n            y: lScale,\n            z: lScale,\n            ease: Power2.easeIn,\n          });\n\n          TweenMax.to(n.position, lDuration, {\n            x: n.position.x + rand({ min: 0.2, max: 1.0 }) * this.direction,\n            onComplete: () => runAnimation(n, i),\n          });\n        },\n      });\n    };\n\n    const runAnimation = (n, i) => {\n      setup(n, i);\n      animate(n, i);\n    };\n\n    for (let i = 0; i < this.parts.length; i++) {\n      let p = this.parts[i];\n      runAnimation(p, i);\n    }\n  };\n}\n","import { Power2, TweenMax } from 'gsap';\nimport { Object3D, Box3 } from 'three';\n\nimport ModelLoader from '../../src/ModelLoader';\nimport { disableDriftwood } from '../GameSettings';\nimport Foam from '../Particles/Foam';\n\nexport default class Water extends Object3D {\n  active = false;\n  entities = [];\n  sineCount = 0;\n  sineInc = Math.PI / 50;\n  top = 0.25;\n\n  getWidth = mesh => {\n    let box3 = new Box3();\n    box3.setFromObject(mesh);\n    // console.log( box.min, box.max, box.size() );\n    return Math.round(box3.max.x - box3.min.x);\n  };\n\n  generate = () => {\n    this.entities.map(val => {\n      this.floor.remove(val.mesh);\n      val = null;\n    });\n    this.entities = [];\n\n    if (this.isStaticRow(this.position.z | 0)) {\n      this.generateStatic();\n    } else if (!disableDriftwood) {\n      this.generateDynamic();\n    }\n  };\n\n  generateStatic = () => {\n    // Speeds: .01 through .08\n    // Number of cars: 1 through 3\n    let numItems = Math.floor(Math.random() * 2) + 2;\n\n    let xPos = Math.floor(Math.random() * 2 - 4);\n    let x = 0;\n    while (x < numItems) {\n      if (this.entities.length - 1 < x) {\n        let mesh = ModelLoader._lilyPad.getRandom();\n        const width = this.getWidth(mesh);\n        this.entities.push({\n          mesh,\n          top: 0.2,\n          min: 0.01,\n          mid: 0.125,\n          dir: 0,\n          width,\n          collisionBox: this.heroWidth / 2 + width / 2 - 0.1,\n        });\n        this.floor.add(mesh);\n      }\n\n      this.entities[x].mesh.position.set(xPos, 0.125, 0);\n      this.entities[x].speed = 0;\n      // this.entities[x].mesh.rotation.y = (Math.PI / 2) * xDir;\n\n      TweenMax.to(this.entities[x].mesh.rotation, Math.random() * 2 + 2, {\n        y: Math.random() * 1.5 + 0.5,\n        yoyo: true,\n        repeat: -1,\n        ease: Power2.easeInOut,\n      });\n\n      xPos += Math.floor(Math.random() * 2 + 2);\n      x++\n    }\n  };\n\n  generateDynamic = () => {\n    // Speeds: .01 through .08\n    // Number of cars: 1 through 3\n    let speed = Math.random() * 0.05 + 0.02;\n    let numItems = Math.floor(Math.random() * 2) + 2;\n    let xDir = 1;\n\n    if (Math.random() > 0.5) {\n      xDir = -1;\n    }\n\n    let xPos = -6 * xDir;\n\n    for (let x = 0; x < numItems; x++) {\n      if (this.entities.length - 1 < x) {\n        let mesh = ModelLoader._log.getRandom();\n        const width = this.getWidth(mesh);\n\n        this.entities.push({\n          mesh,\n          top: 0.3,\n          min: -0.3,\n          mid: -0.1,\n          dir: xDir,\n          width,\n          collisionBox: this.heroWidth / 2 + width / 2 - 0.1,\n        });\n\n        this.floor.add(mesh);\n      }\n\n      this.entities[x].mesh.position.set(xPos, -0.1, 0);\n      this.entities[x].speed = speed * xDir;\n      // this.entities[x].mesh.rotation.y = (Math.PI / 2) * xDir;\n\n      xPos -= (Math.random() * 3 + 5) * xDir;\n    }\n  };\n\n  bounce = ({ entity, player }) => {\n    let timing = 0.2;\n\n    TweenLite.to(entity.mesh.position, timing * 0.9, {\n      y: entity.min,\n    });\n\n    TweenLite.to(entity.mesh.position, timing, {\n      y: entity.mid,\n      delay: timing,\n    });\n\n    TweenMax.to(player.position, timing * 0.9, {\n      y: entity.top + entity.min,\n    });\n\n    TweenMax.to(player.position, timing, {\n      y: entity.top + entity.mid,\n      delay: timing,\n    });\n  };\n\n  constructor(heroWidth, onCollide) {\n    super();\n    this.heroWidth = heroWidth;\n    this.onCollide = onCollide;\n    const { _river } = ModelLoader;\n\n    this.floor = _river.getNode();\n    this.add(this.floor);\n\n    const foam = new Foam(1);\n    foam.position.set(4.5, 0.2, -0.5);\n    foam.visible = true;\n    foam.run();\n    this.add(foam);\n    const foamRight = new Foam(-1);\n    foamRight.position.set(-4.5, 0.2, -0.5);\n    foamRight.visible = true;\n    foamRight.run();\n    this.add(foamRight);\n  }\n\n  ///Is Lily\n  isStaticRow = index => {\n    return index % 2 === 0; //&& (Math.random() * 2 == 0)\n  };\n\n  update = (dt, player) => {\n    if (!this.active) {\n      return;\n    }\n    this.entities.map(entity => this.move({ dt, player, entity }));\n\n    if (!player.moving && !player.ridingOn) {\n      this.entities.map(entity =>\n        this.shouldCheckCollision({ dt, player, entity }),\n      );\n      this.shouldCheckHazardCollision({ player });\n    }\n  };\n\n  move = ({ dt, player, entity }) => {\n    const offset = 11;\n\n    entity.mesh.position.x += entity.speed;\n\n    if (entity.mesh.position.x > offset && entity.speed > 0) {\n      entity.mesh.position.x = -offset;\n    } else if (entity.mesh.position.x < -offset && entity.speed < 0) {\n      entity.mesh.position.x = offset;\n    } else {\n    }\n  };\n\n  getRidableForPosition = position => {\n    if (Math.round(position.z) !== this.position.z) {\n      return null;\n    }\n    const log = this.getCollisionLog(position);\n    return log;\n  };\n\n  // When the player jumps onto a lily or log we want it to be smooth, predict the position ahead of time.\n  getPlayerLowerBouncePositionForEntity = entity => {\n    return entity.top + entity.mid;\n  };\n\n  getPlayerSunkenPosition = () => {\n    return Math.sin(this.sineCount) * 0.08 - 0.2;\n  };\n\n  shouldCheckHazardCollision = ({ player }) => {\n    if (Math.round(player.position.z) === this.position.z && !player.moving) {\n      if (!player.ridingOn) {\n        if (player.isAlive) {\n          this.onCollide(this.floor, 'water');\n        } else {\n          let y = this.getPlayerSunkenPosition();\n          this.sineCount += this.sineInc;\n          player.position.y = y;\n          player.rotation.y += 0.01;\n\n          player.position.x += this.entities[0].speed;\n        }\n      }\n    }\n  };\n\n  getCollisionLog = position => {\n    for (const entity of this.entities) {\n      const log = this.willCollideWithLog2D({ position, entity });\n      if (log) {\n        return log;\n      }\n    }\n  };\n\n  willCollideWithLog2D = ({ position, entity }) => {\n    const { mesh, collisionBox } = entity;\n\n    if (\n      position.x < mesh.position.x + collisionBox &&\n      position.x > mesh.position.x - collisionBox\n    ) {\n      return entity;\n    }\n\n    return null;\n  };\n\n  shouldCheckCollision = ({ player, entity }) => {\n    if (Math.round(player.position.z) === this.position.z && player.isAlive) {\n      const { mesh, collisionBox } = entity;\n\n      if (\n        player.position.x < mesh.position.x + collisionBox &&\n        player.position.x > mesh.position.x - collisionBox\n      ) {\n        player.ridingOn = entity;\n        player.ridingOnOffset = player.position.x - entity.mesh.position.x;\n        this.bounce({ entity, player });\n      }\n    }\n  };\n}\n","import { Object3D } from 'three';\n\nimport ModelLoader from '../../src/ModelLoader';\nimport { groundLevel } from '../GameSettings';\n\nexport const Fill = {\n  empty: 'empty',\n  solid: 'solid',\n  random: 'random',\n};\n\nconst HAS_WALLS = true;\nconst HAS_OBSTACLES = true;\nconst HAS_VARIETY = true;\n\nexport default class Grass extends Object3D {\n  active = false;\n  entities = [];\n\n  top = 0.4;\n  /*\n\n* Build Walls\n\n* Random Fill Center\n* Solid Fill Center\n* Empty Fill Center\n\n\n*/\n\n  generate = (type = Fill.random) => {\n    this.entities.map(val => {\n      this.floor.remove(val.mesh);\n      val = null;\n    });\n    this.entities = [];\n    this.obstacleMap = {};\n    this.treeGen(type);\n  };\n\n  obstacleMap = {};\n  addObstacle = x => {\n    let mesh;\n    if (HAS_VARIETY) {\n      mesh =\n        Math.random() < 0.4\n          ? ModelLoader._boulder.getRandom()\n          : ModelLoader._tree.getRandom();\n    } else {\n      mesh = ModelLoader._tree.getRandom();\n    }\n    this.obstacleMap[`${x | 0}`] = { index: this.entities.length };\n    this.entities.push({ mesh });\n    this.floor.add(mesh);\n    mesh.position.set(x, groundLevel, 0);\n  };\n\n  treeGen = type => {\n    // 0 - 8\n    let _rowCount = 0;\n    const count = Math.round(Math.random() * 2) + 1;\n    for (let x = -3; x < 12; x++) {\n      const _x = x - 4;\n      if (type === Fill.solid) {\n        this.addObstacle(_x);\n        continue;\n      }\n\n      if (HAS_WALLS) {\n        /// Walls\n        if (x >= 9 || x <= -1) {\n          this.addObstacle(_x);\n          continue;\n        }\n      }\n\n      if (HAS_OBSTACLES) {\n        if (_rowCount < count) {\n          if (_x !== 0 && Math.random() > 0.6) {\n            this.addObstacle(_x);\n            _rowCount++;\n          }\n        }\n      }\n    }\n  };\n\n  constructor(heroWidth, onCollide) {\n    super();\n    this.onCollide = onCollide;\n    const { _grass } = ModelLoader;\n\n    this.floor = _grass.getNode();\n    this.add(this.floor);\n  }\n}\n","import RailRoad from './RailRoad';\nimport Road from './Road';\nimport Water from './Water';\nimport Grass from './Grass';\n\nexport default {\n  RailRoad,\n  Road,\n  Water,\n  Grass,\n};\n","import { Renderer } from 'expo-three';\nimport { TweenMax } from 'gsap';\nimport { Vibration } from 'react-native';\nimport { AmbientLight, DirectionalLight, Group, OrthographicCamera, Scene } from 'three';\n\nimport AudioManager from '../src/AudioManager';\nimport { MAP_OFFSET, maxRows } from './GameSettings';\nimport Feathers from './Particles/Feathers';\nimport Water from './Particles/Water';\nimport Rows from './Row';\nimport { Fill } from './Row/Grass';\n\n// TODO Add to state - disable/enable when battery is low\nconst useParticles = true;\nconst useShadows = true;\n\nexport class CrossyScene extends Scene {\n  constructor({ gl }) {\n    super();\n    this.__gl = gl\n\n    this.worldWithCamera = new Group();\n    this.world = new CrossyWorld();\n    this.worldWithCamera.add(this.world);\n    this.add(this.worldWithCamera);\n\n    const light = new DirectionalLight(0xdfebff, 1.75);\n    light.position.set(20, 30, 0.05);\n    light.castShadow = useShadows;\n    light.shadow.mapSize.width = 1024 * 2;\n    light.shadow.mapSize.height = 1024 * 2;\n\n    const d = 15;\n    const v = 6;\n    light.shadow.camera.left = -d;\n    light.shadow.camera.right = 9;\n    light.shadow.camera.top = v;\n    light.shadow.camera.bottom = -v;\n    light.shadow.camera.far = 100;\n    light.shadow.bias = 0.0001;\n\n    this.add(light);\n\n    this.light = light;\n\n    // let helper = new CameraHelper(light.shadow.camera);\n    // this.add(helper);\n  }\n\n  setShadowsEnabled(enabled) {\n    this.light.castShadow = enabled;\n  }\n\n  resetParticles = position => {\n    if (!useParticles) return;\n    this.featherParticles.mesh.position.copy(position);\n    this.waterParticles.mesh.position.copy(position);\n    this.featherParticles.mesh.position.y = 0;\n    this.waterParticles.mesh.position.y = 0;\n  };\n\n  useParticle = (model, type, direction = 0) => {\n    if (!useParticles) return;\n    requestAnimationFrame(async () => {\n      if (type === 'water') {\n        this.waterParticles.mesh.position.copy(model.position);\n        this.waterParticles.run(type);\n        await AudioManager.playAsync(AudioManager.sounds.water);\n      } else if (type === 'feathers') {\n        this.featherParticles.mesh.position.copy(model.position);\n        this.featherParticles.run(type, direction);\n      }\n    });\n  };\n\n  createParticles = () => {\n    if (!useParticles) return;\n\n    this.waterParticles = new Water();\n    this.world.add(this.waterParticles.mesh);\n\n    this.featherParticles = new Feathers();\n    this.world.add(this.featherParticles.mesh);\n  };\n\n  rumble = () => {\n    Vibration.vibrate();\n\n    TweenMax.to(this.position, 0.2, {\n      x: 0,\n      y: 0,\n      z: 1,\n    });\n    TweenMax.to(this.position, 0.2, {\n      x: 0,\n      y: 0,\n      z: 0,\n      delay: 0.2,\n    });\n  };\n}\n\nexport class CrossyCamera extends OrthographicCamera {\n  constructor() {\n    super(-1, 1, 1, -1, -30, 30);\n   // this.position.set(-1, 2.8, -2.9); // Change -1 to -.02\n   this.position.set(0, 2.1, -2.9); // Change -1 to -.0\n   this.lookAt(0, 0, 0);\n  }\n\n  updateScale = ({ width, height, scale }) => {\n    this.left = -(width * scale);\n    this.right = width * scale;\n    this.top = height * scale;\n    this.bottom = -(height * scale);\n    this.zoom = 500;\n    this.updateProjectionMatrix();\n  };\n}\n\nexport class CrossyWorld extends Group {\n  constructor() {\n    super();\n    this.add(new AmbientLight(0x666666, 0.8));\n  }\n\n  createParticles = () => {\n    this.waterParticles = new Water();\n    this.add(this.waterParticles.mesh);\n\n    this.featherParticles = new Feathers();\n    this.add(this.featherParticles.mesh);\n  };\n}\n\nexport class CrossyRenderer extends Renderer {\n  constructor(props) {\n    super(props);\n    this.__gl = props.gl;\n    this.setShadowsEnabled(useShadows);\n  }\n\n  setShadowsEnabled(enabled) {\n    this.gammaInput = enabled;\n    this.gammaOutput = enabled;\n    this.shadowMap.enabled = enabled;\n  }\n}\n\nexport class GameMap {\n  floorMap = {};\n\n  reset() {\n    this.floorMap = {};\n  }\n\n  getRow(index) {\n    return this.floorMap[`${index}`];\n  }\n  setRow(index, value) {\n    this.floorMap[`${index}`] = value;\n  }\n\n  // Detect collisions with trees/cars\n  treeCollision = position => {\n    const targetZ = `${position.z | 0}`;\n    if (targetZ in this.floorMap) {\n      const { type, entity } = this.floorMap[targetZ];\n      if (type === 'grass') {\n        const key = `${position.x | 0}`;\n        if (key in entity.obstacleMap) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  };\n}\n\nexport class EntityContainer {\n  items = [];\n  count = 0;\n}\n\nexport class CrossyGameMap extends GameMap {\n  grasses = new EntityContainer();\n  water = new EntityContainer();\n  roads = new EntityContainer();\n  railRoads = new EntityContainer();\n  rowCount = 0;\n\n  constructor({ heroWidth, onCollide, scene }) {\n    super();\n\n    this.heroWidth = heroWidth;\n\n    // Assign mesh to corresponding array\n    // and add mesh to scene\n    for (let i = 0; i < maxRows; i++) {\n      this.grasses.items[i] = new Rows.Grass(this.heroWidth);\n      this.water.items[i] = new Rows.Water(this.heroWidth, onCollide);\n      this.roads.items[i] = new Rows.Road(this.heroWidth, onCollide);\n      this.railRoads.items[i] = new Rows.RailRoad(this.heroWidth, onCollide);\n      scene.world.add(this.grasses.items[i]);\n      scene.world.add(this.water.items[i]);\n      scene.world.add(this.roads.items[i]);\n      scene.world.add(this.railRoads.items[i]);\n    }\n  }\n\n  tick(dt, hero) {\n    for (const railRoad of this.railRoads.items) {\n      railRoad.update(dt, hero);\n    }\n    for (const road of this.roads.items) {\n      road.update(dt, hero);\n    }\n    for (const water of this.water.items) {\n      water.update(dt, hero);\n    }\n  }\n\n  // Scene generators\n  newRow = rowKind => {\n    if (this.grasses.count === maxRows) {\n      this.grasses.count = 0;\n    }\n    if (this.roads.count === maxRows) {\n      this.roads.count = 0;\n    }\n    if (this.water.count === maxRows) {\n      this.water.count = 0;\n    }\n    if (this.railRoads.count === maxRows) {\n      this.railRoads.count = 0;\n    }\n    if (this.rowCount < 10) {\n      rowKind = 'grass';\n    }\n\n    const ROW_TYPES = ['grass', 'roadtype', 'water'];\n    if (rowKind == null) {\n      rowKind = ROW_TYPES[Math.floor(Math.random() * ROW_TYPES.length)];\n    }\n\n    switch (rowKind) {\n      case 'grass':\n        this.grasses.items[this.grasses.count].position.z = this.rowCount;\n        this.grasses.items[this.grasses.count].generate(\n          this.mapRowToObstacle(this.rowCount),\n        );\n        this.setRow(this.rowCount, {\n          type: 'grass',\n          entity: this.grasses.items[this.grasses.count],\n        });\n        this.grasses.count++;\n        break;\n      case 'roadtype':\n        if (((Math.random() * 4) | 0) === 0) {\n          this.railRoads.items[this.railRoads.count].position.z = this.rowCount;\n          this.railRoads.items[this.railRoads.count].active = true;\n          this.setRow(this.rowCount, {\n            type: 'railRoad',\n            entity: this.railRoads.items[this.railRoads.count],\n          });\n          this.railRoads.count++;\n        } else {\n          this.roads.items[this.roads.count].position.z = this.rowCount;\n\n          const previousRowType = (this.getRow(this.rowCount - 1) || {}).type;\n          this.roads.items[this.roads.count].isFirstLane(previousRowType !== 'road')\n          this.roads.items[this.roads.count].active = true;\n          this.setRow(this.rowCount, {\n            type: 'road',\n            entity: this.roads.items[this.roads.count],\n          });\n          this.roads.count++;\n        }\n        break;\n      case 'water':\n        this.water.items[this.water.count].position.z = this.rowCount;\n        this.water.items[this.water.count].active = true;\n        this.water.items[this.water.count].generate();\n        this.setRow(this.rowCount, {\n          type: 'water',\n          entity: this.water.items[this.water.count],\n        });\n        this.water.count++;\n        break;\n    }\n\n    this.rowCount++;\n  };\n\n  reset() {\n    this.grasses.count = 0;\n    this.water.count = 0;\n    this.roads.count = 0;\n    this.railRoads.count = 0;\n\n    this.rowCount = 0;\n    super.reset();\n  }\n\n  // Setup initial scene\n  init = () => {\n    for (let i = 0; i < maxRows; i++) {\n      this.grasses.items[i].position.z = MAP_OFFSET;\n\n      this.water.items[i].position.z = MAP_OFFSET;\n      this.water.items[i].active = false;\n      this.roads.items[i].position.z = MAP_OFFSET;\n      this.roads.items[i].active = false;\n      this.railRoads.items[i].position.z = MAP_OFFSET;\n      this.railRoads.items[i].active = false;\n    }\n\n    this.grasses.items[this.grasses.count].position.z = this.rowCount;\n    this.grasses.items[this.grasses.count].generate(\n      this.mapRowToObstacle(this.rowCount),\n    );\n    this.grasses.count++;\n    this.rowCount++;\n\n    for (let i = 0; i < maxRows + 3; i++) {\n      this.newRow();\n    }\n  };\n\n  mapRowToObstacle = row => {\n    if (this.rowCount < 5) {\n      return Fill.solid;\n    } else if (this.rowCount < 10) {\n      return Fill.empty;\n    }\n    return Fill.random;\n  };\n}\n","import { Group } from 'three';\nimport { utils } from 'expo-three';\nimport { BASE_ANIMATION_TIME, groundLevel, IDLE_DURING_GAME_PLAY, PLAYER_IDLE_SCALE, startingRow } from './GameSettings';\nimport ModelLoader from '../src/ModelLoader';\n\nconst normalizeAngle = angle => {\n  return Math.atan2(Math.sin(angle), Math.cos(angle));\n};\n\nclass PlayerScaleAnimation extends TimelineMax {\n  constructor(player) {\n    super();\n\n    this.to(player.scale, BASE_ANIMATION_TIME, {\n      x: 1,\n      y: 1.2,\n      z: 1,\n    })\n      .to(player.scale, BASE_ANIMATION_TIME, {\n        x: 1.0,\n        y: 0.8,\n        z: 1,\n      })\n      .to(player.scale, BASE_ANIMATION_TIME, {\n        x: 1,\n        y: 1,\n        z: 1,\n        ease: Bounce.easeOut,\n      });\n  }\n}\n\nclass PlayerIdleAnimation extends TimelineMax {\n  constructor(player) {\n    super({ repeat: -1 });\n\n    this.to(player.scale, 0.3, {\n      y: PLAYER_IDLE_SCALE,\n      ease: Power1.easeIn,\n    }).to(player.scale, 0.3, { y: 1, ease: Power1.easeOut });\n  }\n}\n\nclass PlayerPositionAnimation extends TimelineMax {\n  constructor(player, { targetPosition, initialPosition, onComplete }) {\n    super({\n      onComplete: () => onComplete(),\n    });\n\n    const delta = {\n      x: targetPosition.x - initialPosition.x,\n      z: targetPosition.z - initialPosition.z,\n    };\n\n    const inAirPosition = {\n      x: initialPosition.x + delta.x * 0.75,\n      y: targetPosition.y + 0.5,\n      z: initialPosition.z + delta.z * 0.75,\n    };\n\n    this.to(player.position, BASE_ANIMATION_TIME, { ...inAirPosition }).to(\n      player.position,\n      BASE_ANIMATION_TIME,\n      {\n        x: targetPosition.x,\n        y: targetPosition.y,\n        z: targetPosition.z,\n      },\n    );\n  }\n}\n\nexport default class CrossyPlayer extends Group {\n  animations = [];\n\n  _character;\n\n  setCharacter(character) {\n    if (this._character === character) return;\n    this._character = character;\n    const node = ModelLoader._hero.getNode(character);\n    if (!node) throw new Error(`Failed to get node for character: ${character}`);\n    if (this.node) {\n      this.remove(this.node);\n    }\n\n    utils.scaleLongestSideToSize(node, 1);\n    utils.alignMesh(node, { x: 0.5, z: 0.5, y: 1.0})\n    this.node = node;\n    this.add(node);\n  }\n\n  constructor(character) {\n    super();\n    this.setCharacter(character);\n    this.reset();\n  }\n\n  moveOnEntity() {\n    if (!this.ridingOn) {\n      return;\n    }\n\n    // let target = this._hero.ridingOn.mesh.position.x + this._hero.ridingOnOffset;\n    this.position.x += this.ridingOn.speed;\n    this.initialPosition.x = this.position.x;\n  }\n\n  moveOnCar() {\n    if (!this.hitBy) {\n      return;\n    }\n\n    let target = this.hitBy.mesh.position.x;\n    this.position.x += this.hitBy.speed;\n    if (this.initialPosition) this.initialPosition.x = target;\n  }\n\n  stopAnimations() {\n    this.animations.map(val => {\n      if (val.pause) {\n        val.pause();\n      }\n      val = null;\n    });\n    this.animations = [];\n  }\n\n  reset() {\n    this.position.set(0, groundLevel, startingRow);\n    this.scale.set(1, 1, 1);\n    this.rotation.set(0, Math.PI, 0);\n\n    this.initialPosition = null;\n    this.targetPosition = null;\n    this.moving = false;\n    this.hitBy = null;\n    this.ridingOn = null;\n    this.ridingOnOffset = null;\n    this.isAlive = true;\n  }\n\n  skipPendingMovement() {\n    if (!this.moving) {\n      return;\n    }\n    this.position.set(\n      this.targetPosition.x,\n      this.targetPosition.y,\n      this.targetPosition.z,\n    );\n    if (this.targetRotation) {\n      this.rotation.y = normalizeAngle(this.targetRotation);\n    }\n    // return\n  }\n\n  finishedMovingAnimation() {\n    this.moving = false;\n    if (IDLE_DURING_GAME_PLAY) {\n      if (this.idleAnimation) {\n        this.idleAnimation.play();\n      } else {\n        this.idle();\n      }\n    }\n    this.lastPosition = this.position;\n\n    // this._hero.position.set(Math.round(this._hero.position.x), this._hero.position.y, Math.round(this._hero.position.z))\n  }\n\n  stopIdle() {\n    if (this.idleAnimation && this.idleAnimation.pause) {\n      this.idleAnimation.pause();\n    }\n    this.idleAnimation = null;\n    this.scale.set(1, 1, 1);\n  }\n\n  idle() {\n    if (this.idleAnimation) {\n      return;\n    }\n    this.stopIdle();\n\n    this.idleAnimation = new PlayerIdleAnimation(this);\n  }\n\n  createPositionAnimation({ onComplete }) {\n    return new PlayerPositionAnimation(this, {\n      onComplete: () => {\n        this.finishedMovingAnimation();\n        onComplete();\n      },\n      targetPosition: this.targetPosition,\n      initialPosition: this.initialPosition,\n    });\n  }\n\n  commitMovementAnimations({ onComplete }) {\n    const positionChangeAnimation = this.createPositionAnimation({\n      onComplete,\n    });\n\n    this.animations = [\n      positionChangeAnimation,\n      new PlayerScaleAnimation(this),\n      TweenMax.to(this.rotation, BASE_ANIMATION_TIME, {\n        y: this.targetRotation,\n        ease: Power1.easeInOut,\n        // Reset angle when finished\n        onComplete: () => (this.rotation.y = normalizeAngle(this.rotation.y)),\n      }),\n    ];\n\n    this.initialPosition = this.targetPosition;\n  }\n\n  runPosieAnimation() {\n    this.stopIdle();\n\n    TweenMax.to(this.scale, 0.2, {\n      x: 1.2,\n      y: 0.75,\n      z: 1,\n      // ease: Bounce.easeOut,\n    });\n  }\n\n  hitBy = null;\n  moving = false;\n\n  collideWithCar(road, car) {\n    if (\n      this.moving &&\n      Math.abs(this.position.z - Math.round(this.position.z)) > 0.1\n    ) {\n      this.getHitByCar(road, car);\n    } else {\n      this.getRunOverByCar(road, car);\n    }\n  }\n\n  getRunOverByCar(road, car) {\n\n    this.position.y = (road.top - 0.05);\n\n    TweenLite.to(this.scale, 0.2, {\n      y: 0.05,\n      x: 1.7,\n      z: 1.7,\n    });\n    TweenMax.to(this.rotation, 0.2, {\n      y: Math.random() * Math.PI - Math.PI / 2,\n    });\n  }\n\n  getHitByCar(road, car) {\n    this.hitBy = car;\n\n    const forward = this.position.z - Math.round(this.position.z) > 0;\n    this.position.z = road.position.z + (forward ? 0.52 : -0.52);\n\n    TweenLite.to(this.scale, 0.15, {\n      y: 1.5,\n      z: 0.2,\n    });\n    TweenMax.to(this.rotation, 0.15, {\n      z: Math.random() * Math.PI - Math.PI / 2,\n    });\n  }\n}\n","import { Dimensions } from 'react-native';\n\nimport { swipeDirections } from '../components/GestureView';\nimport AudioManager from '../src/AudioManager';\nimport ModelLoader from '../src/ModelLoader';\nimport Characters from './Characters';\nimport { CrossyCamera, CrossyGameMap, CrossyRenderer, CrossyScene } from './CrossyGame';\nimport CrossyPlayer from './CrossyPlayer';\nimport { CAMERA_EASING, DEBUG_CAMERA_CONTROLS, groundLevel, PI_2, sceneColor, startingRow } from './GameSettings';\n\nconst initialState = {\n  id: Characters.ribbit.id,\n  name: Characters.ribbit.name,\n  index: Characters.ribbit.index,\n};\n\nconst normalizeAngle = angle => {\n  return Math.atan2(Math.sin(angle), Math.cos(angle));\n};\n\nexport default class Engine {\n  updateScale = () => {\n    const { width, height, scale } = Dimensions.get('window');\n    if (this.camera) {\n      this.camera.updateScale({ width, height, scale });\n    }\n    if (this.renderer) {\n      this.renderer.setSize(width * scale, height * scale);\n    }\n  };\n\n  setupGame = (character) => {\n    this.scene = new CrossyScene({ });\n\n    this.camera = new CrossyCamera();\n\n    if (DEBUG_CAMERA_CONTROLS) {\n      // this.debugControls = new THREE.OrbitControls(this.camera);\n    }\n\n    this.scene.worldWithCamera.position.z = -startingRow;\n\n    this.updateScale();\n\n    this.gameMap = new CrossyGameMap({\n      heroWidth: 0.7,\n      scene: this.scene,\n      onCollide: this.onCollide,\n    });\n\n    this.camCount = 0;\n\n    // Mesh\n    this._hero = new CrossyPlayer(character);\n\n    this.scene.world.add(this._hero);\n\n    this.scene.createParticles();\n  };\n\n  isGameEnded() {\n    return !this._hero.isAlive || this._isGameStateEnded()\n  }\n\n  onCollide = async (obstacle = {}, type = 'feathers', collision) => {\n    if (this.isGameEnded()) {\n      return;\n    }\n    this._hero.isAlive = false;\n    this._hero.stopIdle();\n    if (collision === 'car') {\n      AudioManager.playCarHitSound();\n      AudioManager.playDeathSound();\n    } else if (collision === 'train') {\n      await AudioManager.playAsync(AudioManager.sounds.train.die[`0`]);\n      AudioManager.playDeathSound();\n    }\n    this.scene.useParticle(this._hero, type, obstacle.speed);\n    this.scene.rumble();\n    this.gameOver();\n  };\n\n  // Setup initial scene\n  init = () => {\n    this.onGameInit();\n\n    this.camera.position.z = 1;\n    this._hero.reset();\n\n    this.scene.resetParticles(this._hero.position);\n\n    this.camCount = 0;\n\n    this.gameMap.reset();\n\n    this._hero.idle();\n    this.gameMap.init();\n\n    this.onGameReady();\n  };\n\n  // Move scene forward\n  forwardScene = () => {\n    this.scene.world.position.z -=\n      (this._hero.position.z - startingRow + this.scene.world.position.z) *\n      CAMERA_EASING;\n    this.scene.world.position.x = -Math.min(\n      2,\n      Math.max(\n        -2,\n        this.scene.world.position.x +\n        (this._hero.position.x - this.scene.world.position.x) * CAMERA_EASING,\n      ),\n    );\n\n    // normal camera speed\n    if (-this.scene.world.position.z - this.camCount > 1.0) {\n      this.camCount = -this.scene.world.position.z;\n      this.gameMap.newRow();\n    }\n  };\n\n  // Reset variables, restart game\n  gameOver = () => {\n    this._hero.moving = false;\n    // Stop player from finishing a movement\n    this._hero.stopAnimations();\n    this.onGameEnded();\n    // this.gameState = State.Game.gameOver;\n\n    // this.props.setGameState(this.gameState);\n  };\n\n  tick = dt => {\n    // this.drive();\n\n    this.gameMap.tick(dt, this._hero);\n\n    if (!this._hero.moving) {\n      this._hero.moveOnEntity();\n      this._hero.moveOnCar();\n      this.checkIfUserHasFallenOutOfFrame();\n    }\n    this.forwardScene();\n  };\n\n  checkIfUserHasFallenOutOfFrame = () => {\n    if (this.isGameEnded()) {\n      return;\n    }\n    if (this._hero.position.z < this.camera.position.z - 1) {\n      this.scene.rumble();\n      this.gameOver();\n      AudioManager.playDeathSound();\n    }\n\n    // Check if offscreen\n    if (this._hero.position.x < -5 || this._hero.position.x > 5) {\n      this.scene.rumble();\n      this.gameOver();\n      AudioManager.playDeathSound();\n    }\n  };\n\n  pause() {\n    cancelAnimationFrame(this.raf);\n  }\n\n  unpause() {\n    const render = () => {\n      this.raf = requestAnimationFrame(render);\n      const time = Date.now();\n      this.tick(time);\n      this.renderer.render(this.scene, this.camera);\n\n      // NOTE: At the end of each frame, notify `Expo.GLView` with the below\n      this.renderer.__gl.endFrameEXP();\n    };\n    render();\n  }\n\n  updateScore = () => {\n    const position = Math.max(Math.floor(this._hero.position.z) - 8, 0);\n    this.onUpdateScore(position);\n  };\n\n  moveWithDirection = direction => {\n    if (this.isGameEnded()) {\n      return;\n    }\n\n    const { SWIPE_UP, SWIPE_DOWN, SWIPE_LEFT, SWIPE_RIGHT } = swipeDirections;\n\n    this._hero.ridingOn = null;\n\n    if (!this._hero.initialPosition) {\n      this._hero.initialPosition = this._hero.position;\n      this._hero.targetPosition = this._hero.initialPosition;\n    }\n\n    this._hero.skipPendingMovement();\n\n    let velocity = { x: 0, z: 0 };\n\n    this._hero.targetRotation = normalizeAngle(this._hero.rotation.y);\n    // const normalizedRotation = normalizeAngle(this._hero.rotation.y)\n    switch (direction) {\n      case SWIPE_LEFT:\n        {\n          this._hero.targetRotation = PI_2; // calculateRotation(targetRotation, Math.PI / 2);\n\n          velocity = { x: 1, z: 0 };\n\n          this._hero.targetPosition = {\n            x: this._hero.initialPosition.x + 1,\n            y: this._hero.initialPosition.y,\n            z: this._hero.initialPosition.z,\n          };\n          this._hero.moving = true;\n        }\n        break;\n      case SWIPE_RIGHT:\n        {\n          if (this._hero.targetPosition === 0) {\n            this._hero.targetPosition = -PI_2;\n          } else if (\n            (this._hero.targetRotation | 0) !== -(PI_2 | 0) &&\n            (this._hero.targetRotation | 0) !== ((Math.PI + PI_2) | 0)\n          ) {\n            this._hero.targetRotation = Math.PI + PI_2;\n          }\n          velocity = { x: -1, z: 0 };\n\n          this._hero.targetPosition = {\n            x: this._hero.initialPosition.x - 1,\n            y: this._hero.initialPosition.y,\n            z: this._hero.initialPosition.z,\n          };\n          this._hero.moving = true;\n        }\n        break;\n      case SWIPE_UP:\n        {\n          this._hero.targetRotation = 0;\n          let rowObject =\n            this.gameMap.getRow(this._hero.initialPosition.z) || {};\n          if (rowObject.type === 'road') {\n            AudioManager.playPassiveCarSound();\n          }\n\n          let shouldRound = true; // rowObject.type !== 'water';\n          velocity = { x: 0, z: 1 };\n\n          this._hero.targetPosition = {\n            x: this._hero.initialPosition.x,\n            y: this._hero.initialPosition.y,\n            z: this._hero.initialPosition.z + 1,\n          };\n\n          if (shouldRound) {\n            this._hero.targetPosition.x = Math.round(\n              this._hero.targetPosition.x,\n            );\n            const { ridingOn } = this._hero;\n            if (ridingOn && ridingOn.dir) {\n              if (ridingOn.dir < 0) {\n                this._hero.targetPosition.x = Math.floor(\n                  this._hero.targetPosition.x,\n                );\n              } else if (ridingOn.dir > 0) {\n                this._hero.targetPosition.x = Math.ceil(\n                  this._hero.targetPosition.x,\n                );\n              } else {\n                this._hero.targetPosition.x = Math.round(\n                  this._hero.targetPosition.x,\n                );\n              }\n            }\n          }\n\n          this._hero.moving = true;\n        }\n        break;\n      case SWIPE_DOWN:\n        {\n          this._hero.targetRotation = Math.PI;\n          const row = (this.gameMap.getRow(this._hero.initialPosition.z) || {})\n            .type;\n          let shouldRound = true; //row !== 'water';\n          velocity = { x: 0, z: -1 };\n\n          this._hero.targetPosition = {\n            x: this._hero.initialPosition.x,\n            y: this._hero.initialPosition.y,\n            z: this._hero.initialPosition.z - 1,\n          };\n          if (shouldRound) {\n            this._hero.targetPosition.x = Math.round(\n              this._hero.targetPosition.x,\n            );\n            const { ridingOn } = this._hero;\n            if (ridingOn && ridingOn.dir) {\n              if (ridingOn.dir < 0) {\n                this._hero.targetPosition.x = Math.floor(\n                  this._hero.targetPosition.x,\n                );\n              } else if (ridingOn.dir > 0) {\n                this._hero.targetPosition.x = Math.ceil(\n                  this._hero.targetPosition.x,\n                );\n              } else {\n                this._hero.targetPosition.x = Math.round(\n                  this._hero.targetPosition.x,\n                );\n              }\n            }\n          }\n          this._hero.moving = true;\n        }\n        break;\n    }\n\n    // Check collision using the computed movement.\n    if (this.gameMap.treeCollision(this._hero.targetPosition)) {\n      // If we collide with an object, then reset the target position so the character just jumps up.\n      this._hero.targetPosition = {\n        x: this._hero.initialPosition.x,\n        y: this._hero.initialPosition.y,\n        z: this._hero.initialPosition.z,\n      };\n      this._hero.moving = false;\n    }\n\n    const targetRow =\n      this.gameMap.getRow(this._hero.initialPosition.z + velocity.z) || {};\n    let finalY = targetRow.entity.top || groundLevel;\n    // If the next move is into the river, then we want to jump into it.\n    if (targetRow.type === 'water') {\n      const ridable = targetRow.entity.getRidableForPosition(\n        this._hero.targetPosition,\n      );\n      if (!ridable) {\n        finalY = targetRow.entity.getPlayerSunkenPosition();\n      } else {\n        finalY = targetRow.entity.getPlayerLowerBouncePositionForEntity(\n          ridable,\n        );\n      }\n    }\n\n    AudioManager.playMoveSound();\n\n    this._hero.targetPosition.y = finalY;\n\n    this._hero.commitMovementAnimations({\n      onComplete: () => this.updateScore(),\n    });\n  };\n\n  beginMoveWithDirection = () => {\n    if (this.isGameEnded()) {\n      return;\n    }\n    this._hero.runPosieAnimation();\n  };\n\n  _onGLContextCreate = async gl => {\n    const { drawingBufferWidth: width, drawingBufferHeight: height } = gl;\n\n    this.renderer = new CrossyRenderer({\n      gl,\n      antialias: true,\n      width,\n      height,\n      clearColor: sceneColor,\n    });\n\n    this.unpause();\n  };\n}\n","export default {\n  Game: {\n    playing: 'playing',\n    paused: 'paused',\n    gameOver: 'gameOver',\n    none: 'none',\n  },\n};\n","import { useEffect, useState } from 'react';\nimport { Dimensions } from 'react-native';\n\nexport default () => {\n  const [dimensions, setDimensions] = useState({\n    window: Dimensions.get('window'),\n    screen: Dimensions.get('screen'),\n  });\n\n  const onChange = ({ window, screen }) => {\n    setDimensions({ window, screen });\n  };\n\n  useEffect(() => {\n    Dimensions.addEventListener('change', onChange);\n\n    return () => Dimensions.removeEventListener('change', onChange);\n  }, []);\n\n  return dimensions;\n};\n","import * as React from 'react';\nimport { Image, Text, StyleSheet, TouchableOpacity as TouchableBounce } from 'react-native';\n\nimport AudioManager from '../../src/AudioManager';\n\nexport default function Button({ onPress, style, imageStyle, source, text, txtStyle }) {\n  return (\n    <TouchableBounce\n      onPress={onPress}\n      onPressIn={async () => {\n        await AudioManager.playAsync(AudioManager.sounds.button_in);\n      }}\n      onPressOut={async _ => {\n        await AudioManager.playAsync(AudioManager.sounds.button_out);\n      }}\n      style={[styles.container, style]}\n    >\n      {text &&\n      <Text\n      style={[txtStyle]}\n      >{text}</Text>\n      }\n      <Image\n        source={source}\n        style={[styles.image, imageStyle]}\n      />\n    </TouchableBounce>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n  image: {\n    flex: 1,\n    resizeMode: 'contain',\n    height: 48,\n  },\n});\n","import React, { useEffect, useState } from \"react\";\n\nexport default function Countdown(props) {\n    const calculateTimeLeft = () => {\n      const difference = Date.UTC('2022', '10', '11', '00') - Date.now()\n      let timeLeft = {};\n    \n        if (difference > 0) {\n          timeLeft = {\n            d: Math.floor(difference / (1000 * 60 * 60 * 24)),\n            h: Math.floor((difference / (1000 * 60 * 60)) % 24),\n            m: Math.floor((difference / 1000 / 60) % 60),\n            s: Math.floor((difference / 1000) % 60),\n          };\n        }\n    \n        return timeLeft;\n      };\n    \n      const [timeLeft, setTimeLeft] = useState(calculateTimeLeft());\n      const [year] = useState(new Date().getFullYear());\n    \n      useEffect(() => {\n        setTimeout(() => {\n          setTimeLeft(calculateTimeLeft());\n        }, 1000);\n      });\n    \n      const timerComponents = [];\n    \n      Object.keys(timeLeft).forEach((interval) => {\n        if (!timeLeft[interval]) {\n          return;\n        }\n    \n        timerComponents.push(\n          <span>\n            {timeLeft[interval]}{interval}{\" \"}\n          </span>\n        );\n      });\n      return (\n        <div \n        style={{\n          color: '#fff',\n        }}>\n          {/* \n          Round Ends in: {timerComponents.length ? timerComponents : <span>Ended</span>}\n          */}\n        </div>\n      );\n}\n    ","import * as React from 'react'\nimport { ActivityIndicator, Animated, StyleSheet, Text, View } from 'react-native';\n\nimport GameContext from '../../context/GameContext';\n\n\nimport { useDebounce } from 'use-debounce'\nimport { ethers, utils } from 'ethers'\nimport Button from '../Button';\n\nimport useDimensions from '../../src/hooks/useDimensions';\nimport Images from \"../../src/Images\";\n\n\nexport default function MetaBox(props) {\n  \n  const [to, setTo] = React.useState('')\n  const [debouncedTo] = useDebounce(to, 500)\n \n  const [amount, setAmount] = React.useState('0.0011')\n  const [debouncedValue] = useDebounce(amount, 500)\n\n  const [block, setBlock] = React.useState(0)\n  const [account, setAccount] = React.useState()\n  const [bal, setBal] = React.useState(0)\n\n  const [done, setDone] = React.useState(false)\n\n  const [loading, setLoading] = React.useState(false)\n  const [hash, setHash] = React.useState()\n\n  const [pond, setPond] = React.useState(0)\n  \n\n\n  const shorten = (parsed, chars) =>  {\n    return `${parsed.substring(0, chars + 2)}...${parsed.substring(42 - chars)}`;\n  }\n \nconst saveScore = async () => {\n    setLoading(true)\n    const provider = new ethers.providers.Web3Provider(window.ethereum)\n\n    let receiverAddress = '0x50d54087bD6ae3AC4D5b6C31F7a89F0aa2849E1c'\n    // Ether amount to send\n    let dd = new Date().getTime()\n    \n    let amountInEther = '0.0011'\n    // Create a transaction object\n    let tx = {\n        to: receiverAddress,\n        gasLimit: 100000,\n        // Convert currency unit from ether to wei\n        value: ethers.utils.parseEther(amountInEther),\n        data: ethers.utils.formatBytes32String(`meta${props.score}${dd}${props.score}`)\n\n    }\n    // Send a transaction\n    console.log(account)\n    const signer = await provider.getSigner(account)\n\n    console.log(signer)\n    \n    signer.sendTransaction(tx)\n    .then((txObj) => {\n        console.log('txHash', txObj.hash)\n        setHash(txObj.hash)\n        setDone(true)\n        setLoading(false)\n        alert('Success!')\n        // => 0x9c172314a693b94853b49dc057cf1cb8e529f29ce0272f451eea8f5741aa9b58\n        // A transaction result can be checked in a etherscan with a transaction hash which can be obtained here.\n    })\n    \n\n}\n\n\n\n const  connectToMetamask = async () => {\n    const provider = new ethers.providers.Web3Provider(window.ethereum)\n    const accounts = await provider.send(\"eth_requestAccounts\", []);\n    const balance = await provider.getBalance(accounts[0]);\n    setAccount(accounts[0])\n    const balanceInEther = ethers.utils.formatEther(balance);\n\n    setBal(balanceInEther)\n\n    const block = await provider.getBlockNumber();\n    provider.on(\"block\", (blockno) => {\n        setBlock(blockno)\n    })\n   // const daiContract = new ethers.Contract('0x6b175474e89094c44da98b954eedeac495271d0f', ERC20_ABI, provider);\n   // const tokenName = await daiContract.name();\n   // const tokenBalance = await daiContract.balanceOf(accounts[0]);\n    //const tokenUnits = await daiContract.decimals();\n    //const tokenBalanceInEther = ethers.utils.formatUnits(tokenBalance, tokenUnits);\n    //pond\n    //this.setState({ selectedAddress: accounts[0], balance: balanceInEther, block, tokenName, tokenBalanceInEther })\n  }\n\n  /*\n  const { config } = usePrepareSendTransaction({\n    request: {\n      to: debouncedTo,\n      value: debouncedValue ? utils.parseEther(debouncedValue) : undefined,\n    },\n  })\n  */\n \n  return (\n    <form\n    style={{ \n        display: 'flex',\n        flexDirection: 'column',\n     }}\n     >\n         <Text style={styles.twhite} numberOfLines={4}>\n            0.1 $POND or 0.0011 ETH\n         </Text>\n    {account &&\n    <div style={{display: 'flex', flexDirection: 'column'}}>\n     <Text style={styles.taddy} numberOfLines={1}>\n        You: {shorten(account, 4)}\n    </Text>\n    <Text style={styles.taddy} numberOfLines={1}>\n    ↓\n    </Text>\n    {!hash &&\n    <Text style={styles.taddy} numberOfLines={1}>\n    Score: {props.score}\n    </Text>\n    }\n    {hash &&\n    <Text style={styles.taddy} numberOfLines={1}>\n        <a style={{color:'white'}} href={`https://etherscan.io/tx/${hash}`}>Saving: {shorten(hash, 4)}</a>\n    </Text>\n    }   \n\n    </div>\n    }\n      {!account &&\n       <Button\n            key=\"b3\"\n            onPress={() => { connectToMetamask() } }\n            txtStyle={styles.txtStyle}\n            text=\"Connect\"\n        />\n        }\n    {loading &&\n    <div style={{marginTop: 5, marginBottom: 5}}>\n            <ActivityIndicator size=\"large\" color=\"#0000ff\" />\n            </div>\n    }\n     {account &&\n     !loading &&\n     !done &&\n     <div style={{display: 'flex', justifyContent: 'space-around'}}>\n       <Button\n            key=\"b3\"\n            onPress={() => { saveScore() } }\n            txtStyle={styles.txtStyleb}\n            text=\"ETH\"\n            style={{ opacity: bal > 0.0011 ? 1 : 0.2}}\n        />\n         <Button\n            key=\"b3\"\n            onPress={() => { alert('disabled') } }\n            txtStyle={styles.txtStyleb}\n            style={{ opacity: '0.2'}}\n            text=\"POND\"\n        />\n    </div>\n        }\n      \n    </form>\n  )\n}\n\n\nconst styles = StyleSheet.create({\n    taddy:{\n        fontSize: 15,\n        marginTop: 10,\n        color: '#fff',\n        textAlign: 'center',\n        opacity: 0.8\n    },\n    twhite:{\n        fontSize: 15,\n        marginTop: 10,\n        color: '#fff',\n        textAlign: 'center',\n      },\n      txtStyleb: {\n        fontSize: 17,\n        color: '#fff',\n        textAlign: 'center',\n        backgroundColor: '#0098ff',\n        color: 'white',\n        marginTop: 9,\n        fontFamily: 'retro',\n        height: 50,\n        width: 100,\n        paddingTop: 15,\n        marginBottom: 25,\n        marginRight: 5\n      },\n      txtStyle: {\n        fontSize: 17,\n        color: '#fff',\n        textAlign: 'center',\n        backgroundColor: '#ba85ff',\n        color: 'white',\n        marginTop: 9,\n        fontFamily: 'retro',\n        height: 40,\n        width: 200,\n        paddingTop: 10,\n        marginBottom: 25,\n      },\n    text: {\n      fontSize: 23,\n      color: '#72E374',\n      fontFamily: 'retro',\n      textAlign: 'center',\n      marginTop: 50\n    },\n    banner: {\n      flex: 1,\n      flexDirection: 'column',\n      justifyContent: 'center',\n      alignItems: 'center',\n    },\n    container: {\n      alignItems: 'center',\n      justifyContent: 'center',\n      flexDirection: 'row',\n      backgroundColor: 'red',\n      height: 90,\n      paddingHorizontal: 8,\n      marginVertical: 0,\n    },\n    button: {\n      marginTop: 5,\n      fontFamily: 'retro',\n      fontSize: 23,\n\n      height: 60,\n      width: 200,\n      marginBottom: 25,\n      backgroundColor: '#ba85ff',\n      color: 'white'\n    },\n  });","import React from 'react';\nimport { Animated, StyleSheet, Text, View } from 'react-native';\n\nimport useDimensions from '../../src/hooks/useDimensions';\nimport Button from '../Button';\nimport Countdown from '../GameOver/Countdown';\nimport MetaBox from \"../GameOver/MetaBox\";\n\n\nexport default function Banner(props) {\n  const [metaboxSave, setMetaboxSave] = React.useState(false);\n\n  const renderButton = ({ onPress, source, style }, key) => (\n    <Button\n      key={key}\n      onPress={() => {  setMetaboxSave(true)  } }\n      imageStyle={[styles.button, style]}\n      source={source}\n      style={{ marginLeft: 8, width: 90, flex: undefined }}\n    />\n  );\n\n  const { animatedValue, style } = props;\n  const { window: { width } } = useDimensions()\n  return (\n    <Animated.View style={[styles.container, { minWidth: width, maxWidth: width }, style]}>\n      <Animated.View\n        style={[\n          styles.banner,\n          {\n            transform: [{ translateX: animatedValue }],\n          },\n        ]}\n      >\n        {props.title.length > 0 &&\n        <Text style={styles.text} numberOfLines={4}>\n          {props.title}\n        </Text>\n        }\n        {metaboxSave && <MetaBox score={props.score} />}\n\n\n        {props.sub.length > 0 &&\n        <Text style={styles.twhite} numberOfLines={4}>\n          {props.sub === 'No Games Available' ? <Countdown /> : props.sub}\n        </Text>\n        }\n        {!metaboxSave && props.button && renderButton(props.button, 0)}\n        \n      </Animated.View>\n    </Animated.View>\n  );\n\n}\n\nconst styles = StyleSheet.create({\n  twhite:{\n    fontSize: 15,\n    marginTop: 10,\n    color: '#fff',\n    textAlign: 'center',\n  },\n  text: {\n    fontSize: 23,\n    color: '#72E374',\n    fontFamily: 'retro',\n    textAlign: 'center',\n    marginTop: 50\n  },\n  banner: {\n    flex: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  container: {\n    alignItems: 'center',\n    justifyContent: 'center',\n    flexDirection: 'row',\n    backgroundColor: 'red',\n    height: 150,\n    paddingHorizontal: 8,\n    marginVertical: 0,\n  },\n  button: {\n    height: 150,\n    marginBottom: 80\n  },\n});","export default {\n  blue: '#87C6FF',\n};\n","export default {\n  button: {\n    play: require('../assets/images/buttons/long_play.png'),\n    back: require('../assets/images/buttons/back.png'),\n    share: require('../assets/images/buttons/share.png'),\n    long_play: require('../assets/images/buttons/long_play.png'),\n    character: require('../assets/images/buttons/character.png'),\n    camera: require('../assets/images/buttons/camera.png'),\n    controller: require('../assets/images/buttons/controller.png'),\n    shop: require('../assets/images/buttons/shop.png'),\n    menu: require('../assets/images/buttons/menu.png'),\n    settings: require('../assets/images/buttons/settings.png'),\n    rank: require('../assets/images/buttons/rank.png'),\n    social: require('../assets/images/buttons/social.png'),\n    random: require('../assets/images/buttons/random.png'),\n    mail: require('../assets/images/buttons/mail.png'),\n    metabox: require('../assets/images/buttons/metabox.png'),\n    metaboxsave: require('../assets/images/buttons/metaboxsave.png'),\n    alerts: require('../assets/images/buttons/alerts.png'),\n    conserve_battery: require('../assets/images/buttons/conserve_battery.png'),\n    credits: require('../assets/images/buttons/credits.png'),\n    facebook: require('../assets/images/buttons/facebook.png'),\n    language: require('../assets/images/buttons/language.png'),\n    mute: require('../assets/images/buttons/mute.png'),\n\n    purchase: require('../assets/images/buttons/purchase.png'),\n    shadows: require('../assets/images/buttons/shadows.png'),\n    video_ads: require('../assets/images/buttons/video_ads.png'),\n  },\n  title: require('../assets/images/title.png'),\n  hand: {\n    '0': require('../assets/images/hand/0.png'),\n    '1': require('../assets/images/hand/1.png'),\n  },\n};\n","import React, { useEffect, useState } from 'react';\nimport { LayoutAnimation, Share, StyleSheet, View } from 'react-native';\nimport { isAvailableAsync } from 'expo-sharing';\n\nimport Colors from '../../src/Colors';\nimport Images from '../../src/Images';\nimport State from '../../src/state';\nimport Button from '../Button';\n\nasync function shareAsync() {\n  await Share.share(\n    {\n      message: `Check out Ribbits on PuzlWorld`,\n      url: 'https://www.puzl.world',\n      title: 'Ribbits',\n    },\n    {\n      dialogTitle: 'Share Ribbits',\n      excludedActivityTypes: [\n        'com.apple.UIKit.activity.AirDrop', // This speeds up showing the share sheet by a lot\n        'com.apple.UIKit.activity.AddToReadingList', // This is just lame :)\n      ],\n      tintColor: Colors.blue,\n    },\n  );\n}\n\nexport default function Footer({ style, showSettings, setGameState, navigation }) {\n\n  const [canShare, setCanShare] = useState(true);\n\n  useEffect(() => {\n    isAvailableAsync().then(setCanShare).catch(() => { });\n  }, []);\n\n  LayoutAnimation.easeInEaseOut();\n\n  return (\n    <View style={[styles.container, style]}>\n     \n      {canShare && <Button\n        onPress={shareAsync}\n        imageStyle={[styles.button, { marginRight: 4, aspectRatio: 1.9 }]}\n        source={Images.button.share}\n      />}\n     \n      <Button\n        onPress={() => {\n          setGameState(State.Game.none);\n        }}\n        imageStyle={[styles.button, { marginLeft: canShare ? 4 : 0, aspectRatio: 1.9 }]}\n        source={Images.button.long_play}\n      />\n    \n      \n    </View>\n  );\n\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    alignItems: 'stretch',\n    justifyContent: 'space-around',\n    flexDirection: 'row',\n    paddingHorizontal: 4,\n    minHeight: 56,\n    maxHeight: 56,\n    minWidth: '100%',\n    maxWidth: '100%',\n    flex: 1,\n  },\n  button: {\n    height: 56,\n  },\n});\n","import React, { Component } from \"react\";\nimport { Alert, Animated, Easing, StyleSheet, View } from \"react-native\";\nimport { useSafeArea } from \"react-native-safe-area-context\";\n\nimport Banner from \"../components/GameOver/Banner\";\nimport Footer from \"../components/GameOver/Footer\";\nimport AudioManager from \"../src/AudioManager\";\nimport Characters from \"../src/Characters\";\nimport useDimensions from \"../src/hooks/useDimensions\";\nimport Images from \"../src/Images\";\n\n\n\n// import { setGameState } from '../src/actions/game';\n\n//TODO: Make this dynamic\nconst banner = [\n  {\n    color: \"#0D051D\",\n    title: \"\",\n    sub: \"\",\n    button: {\n      onPress: (_) => {\n        Alert.alert(\n          \"Save your Score\",\n          \"It requires 0.1 POND token to save your score\",\n          [\n            { text: \"Cancel\", onPress: () => console.log(\"Cancel Pressed!\") },\n            { text: \"Save\", onPress: () => console.log(\"Save\") },\n          ],\n          {\n            cancelable: true,\n          }\n        );\n      },\n      source: Images.button.metabox,\n      style: { aspectRatio: 1.85, height: 120 },\n    },\n  },\n  {\n    color: \"#0D051D\",\n    title: \"Save your Score\",\n    sub: \"ETH or $POND required to save on leaderboard\",\n    button: {\n      onPress: (_) => {\n        console.log('session...')\n      \n\n        Alert.alert(\n          \"Save your Score\",\n          \"It requires 0.1 POND token to save your score\",\n          [\n            { text: \"Cancel\", onPress: () => console.log(\"Cancel Pressed!\") },\n            { text: \"Save\", onPress: () => console.log(\"Save\") },\n          ],\n          {\n            cancelable: true,\n          }\n        );\n      },\n      source: Images.button.metaboxsave,\n      style: {  height: 80, width: 140, marginLeft: -30 },\n    },\n  },\n  {\n    color: \"#0D051D\",\n    title: \"\",\n    sub: \"No Games Available\"\n  }\n];\n\n\n// const AnimatedBanner = Animated.createAnimatedComponent(Banner);\n\nfunction GameOver({ ...props }) {\n  const {\n    window: { width },\n  } = useDimensions();\n  const [currentIndex, setCurrentIndex] = React.useState(0);\n  const [characters, setCharacters] = React.useState(\n    Object.keys(Characters).map((val) => Characters[val])\n  );\n  const [animations, setAnimations] = React.useState(\n    banner.map((val) => new Animated.Value(0))\n  );\n\n  const dismiss = () => {\n    // props.navigation.goBack();\n    props.onRestart();\n  };\n\n\n\n  React.useEffect(() => {\n    setTimeout(() => {\n      _animateBanners();\n\n      const playBannerSound = async () => {\n        await AudioManager.playAsync(AudioManager.sounds.banner);\n        // const soundObject = new Audio.Sound();\n        // try {\n        //   await soundObject.loadAsync(AudioFiles.banner);\n        //   await soundObject.playAsync();\n        // } catch (error) {\n        //   console.warn('sound error', { error });\n        // }\n      };\n      playBannerSound();\n      setTimeout(() => playBannerSound(), 300);\n      setTimeout(() => playBannerSound(), 600);\n    }, 600);\n  });\n\n  const _animateBanners = () => {\n    const _animations = animations.map((animation) =>\n      Animated.timing(animation, {\n        useNativeDriver: true,\n        toValue: 1,\n        duration: 1000,\n        easing: Easing.elastic(),\n      })\n    );\n    Animated.stagger(300, _animations).start();\n  };\n\n  const _showResult = (result) => {\n    // if (result.action === Share.sharedAction) {\n    //   if (result.activityType) {\n    //     this.setState({result: 'shared with an activityType: ' + result.activityType});\n    //   } else {\n    //     this.setState({result: 'shared'});\n    //   }\n    // } else if (result.action === Share.dismissedAction) {\n    //   this.setState({result: 'dismissed'});\n    // }\n  };\n\n  const select = () => {\n    // props.setCharacter(characters[currentIndex]);\n    dismiss();\n  };\n\n  const { top, bottom, left, right } = useSafeArea();\n\n  const imageStyle = { width: 60, height: 48 };\n\n  return (\n    <View\n      style={[\n        styles.container,\n        { paddingTop: top || 12, paddingBottom: bottom || 8 },\n        props.style,\n      ]}\n    >\n      <View key=\"content\" style={{ flex: 1, justifyContent: \"center\" }}>\n        {banner.map((val, index) => (\n          <Banner\n            animatedValue={animations[index].interpolate({\n              inputRange: [0.2, 1],\n              outputRange: [-width, 0],\n              extrapolate: \"clamp\",\n            })}\n            key={index}\n            style={{\n              backgroundColor: val.color,\n              transform: [\n                {\n                  scaleY: animations[index].interpolate({\n                    inputRange: [0, 0.2],\n                    outputRange: [0, 1],\n                    extrapolate: \"clamp\",\n                  }),\n                },\n              ],\n            }}\n            sub={val.sub}\n            title={val.title}\n            button={val.button}\n            score={props.score}\n          />\n        ))}\n      </View>\n\n      <Footer\n        style={{ paddingLeft: left || 4, paddingRight: right || 4 }}\n        showSettings={props.showSettings}\n        setGameState={props.setGameState}\n        navigation={props.navigation}\n      />\n    </View>\n  );\n}\n\nexport default GameOver;\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: \"center\",\n    backgroundColor: \"transparent\",\n  },\n  paragraph: {\n    margin: 24,\n    fontSize: 18,\n    fontWeight: \"bold\",\n    textAlign: \"center\",\n    color: \"#34495e\",\n  },\n});","import * as React from 'react';\nimport { Image, StyleSheet } from 'react-native';\n\nimport Images from '../src/Images';\n\nconst sprite = Object.values(Images.hand);\n\nconst INTERVAL = 400;\n\nexport default function HandCTA({ style }) {\n  const [index, setIndex] = React.useState(0)\n\n  React.useEffect(() => {\n    const interval = setInterval(() => {\n      setIndex((prevIndex) => (prevIndex + 1) % sprite.length)\n    }, INTERVAL);\n\n    return () => clearInterval(interval);\n  }, []);\n\n  return <Image source={sprite[index]} style={[styles.image, style]} />\n}\n\nconst styles = StyleSheet.create({\n  image: {\n    flex: 1,\n    alignItems: 'center',\n    justifyContent: 'center',\n    resizeMode: 'contain',\n  },\n});\n","import React, { Component } from 'react';\nimport { LayoutAnimation, Animated, StyleSheet, View } from 'react-native';\n\nimport Images from '../../src/Images';\nimport Button from '../Button';\nimport CharacterPicker from '../CharacterPicker';\n\nconst imageStyle = { width: 60, height: 48 };\n\nexport default function Footer(props) {\n  const [menuOpen, setMenuOpen] = React.useState(false);\n\n  const collapse = onPress => () => {\n    setMenuOpen(false)\n    onPress();\n  };\n\n  const renderMenu = () => {\n    return (\n      <View style={{ flexDirection: 'column' }}>\n        <Button\n          onPress={collapse(props.onMultiplayer)}\n          style={[{ marginBottom: 8 }, imageStyle]}\n          imageStyle={imageStyle}\n          source={Images.button.controller}\n        />\n        <Button\n          onPress={collapse(props.onShop)}\n          style={[{ marginBottom: 8 }, imageStyle]}\n          imageStyle={imageStyle}\n          source={Images.button.shop}\n        />\n        <Button\n          onPress={collapse(props.onCamera)}\n          style={[{ marginBottom: 8 }, imageStyle]}\n          imageStyle={imageStyle}\n          source={Images.button.camera}\n        />\n      </View>\n    );\n  };\n\n\n  return (\n    <Animated.View style={[styles.container, props.style]}>\n      {false && <Button\n        onPress={props.onCharacterSelect}\n        imageStyle={imageStyle}\n        source={Images.button.character}\n      />}\n      {/*\n      <CharacterPicker />\n      */}\n\n      <View style={{ flex: 1 }} />\n\n    \n    </Animated.View>\n  );\n\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    alignItems: 'stretch',\n    justifyContent: 'center',\n    flexDirection: 'row',\n    maxHeight: 48,\n  },\n  paragraph: {\n    margin: 24,\n    fontSize: 18,\n    fontWeight: 'bold',\n    textAlign: 'center',\n    color: '#34495e',\n  },\n  button: {\n    flex: 1,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n});\n","import React, { Component } from 'react';\nimport { Animated, Dimensions, Easing, InteractionManager, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\nimport { useSafeArea } from 'react-native-safe-area-context';\n\nimport Hand from '../components/HandCTA';\nimport Footer from '../components/Home/Footer';\nimport GameContext from '../context/GameContext';\n\nlet hasShownTitle = false;\n\nfunction Screen(props) {\n  const { setCharacter, character } = React.useContext(GameContext)\n  const animation = new Animated.Value(0);\n\n  React.useEffect(() => {\n    function onKeyUp({ keyCode }) {\n      // Space, up-arrow\n      if ([32, 38].includes(keyCode)) {\n        props.onPlay();\n      }\n    };\n    \n    window.addEventListener('keyup', onKeyUp, false);\n    return () => {\n      window.removeEventListener('keyup', onKeyUp);\n    }\n  }, []);\n\n\n  React.useEffect(() => {\n    if (!hasShownTitle) {\n      hasShownTitle = true;\n      InteractionManager.runAfterInteractions(_ => {\n        Animated.timing(animation, {\n          toValue: 1,\n          duration: 800,\n          delay: 0,\n          easing: Easing.in(Easing.qubic),\n        }).start();\n      });\n    }\n\n  }, []);\n\n\n  const { top, bottom, left, right } = useSafeArea();\n\n  const animatedTitleStyle = {\n    transform: [\n      {\n        translateX: animation.interpolate({\n          inputRange: [0, 1],\n          outputRange: [-Dimensions.get('window').width, 0],\n        }),\n      },\n      {\n        translateY: animation.interpolate({\n          inputRange: [0, 1],\n          outputRange: [-100, 0],\n        }),\n      },\n    ],\n  };\n  // console.log(props);\n  return (\n    <View style={[styles.container, { paddingTop: top, paddingBottom: bottom, paddingLeft: left, paddingRight: right }]}>\n      <TouchableOpacity\n        activeOpacity={1.0}\n        style={[\n          StyleSheet.absoluteFill,\n          { justifyContent: 'center', alignItems: 'center' },\n        ]}\n        onPressIn={() => {\n          Animated.timing(animation, {\n            toValue: 0,\n            duration: 400,\n            easing: Easing.in(Easing.qubic),\n            onComplete: ({ finished }) => {\n              if (finished) {\n                props.onPlay();\n              }\n            },\n          }).start();\n        }}\n      >\n        <Text style={styles.coins}>{props.coins}</Text>\n        <Animated.Image\n          source={require('../assets/images/title.png')}\n          style={[styles.title, animatedTitleStyle]}\n        />\n\n        <View\n          style={{\n            justifyContent: 'center',\n            alignItems: 'stretch',\n            position: 'absolute',\n            bottom: Math.max(bottom, 8),\n            left: Math.max(left, 8),\n            right: Math.max(right, 8),\n          }}\n        >\n          <View\n            style={{ height: 64, marginBottom: 48, alignItems: 'center' }}\n          >\n            {!__DEV__ && <Hand style={{ width: 36 }} />}\n          </View>\n          <Footer\n            style={{ height: 48 }}\n            onCharacterSelect={() => {\n              // TODO(Bacon): Create a character select page \n            }}\n            onShop={() => { }}\n            onMultiplayer={() => { }}\n            onCamera={() => { \n            }}\n          />\n        </View>\n      </TouchableOpacity>\n    </View>\n  );\n}\n\nexport default Screen;\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    alignItems: 'center',\n    justifyContent: 'center',\n    backgroundColor: 'transparent',\n  },\n  title: {\n    // color: 'white',\n    // fontSize: 48,\n    // backgroundColor: 'transparent',\n    // textAlign: 'center',\n    resizeMode: 'contain',\n    maxWidth: 600,\n    width: '80%',\n    height: 300,\n  },\n  coins: {\n    fontFamily: 'retro',\n    position: 'absolute',\n    right: 8,\n    color: '#f8e84d',\n    fontSize: 36,\n    letterSpacing: 0.9,\n    backgroundColor: 'transparent',\n    textAlign: 'right',\n    shadowColor: 'black',\n    shadowOpacity: 1,\n    shadowRadius: 0,\n    shadowOffset: { width: 0, height: 0 },\n  },\n  paragraph: {\n    margin: 24,\n    fontSize: 18,\n    fontWeight: 'bold',\n    textAlign: 'center',\n    color: '#34495e',\n  },\n});\n","import React, { Component } from 'react';\nimport { Share, StyleSheet, Text, View } from 'react-native';\n\nimport Button from '../components/Button';\nimport Characters from '../src/Characters';\nimport Colors from '../src/Colors';\nimport Images from '../src/Images';\n\n// import Footer from './Footer';\n\nconst TitleButton = ({ text, imageStyle, source, onPress }) => (\n  <View\n    style={{\n      justifyContent: 'center',\n      width: 115,\n      height: 100,\n      alignItems: 'center',\n      marginHorizontal: 4,\n    }}\n  >\n    <Button imageStyle={imageStyle} source={source} onPress={onPress} />\n    <Text\n      style={{\n        fontFamily: 'retro',\n        textAlign: 'center',\n        color: 'white',\n        fontSize: 12,\n        marginTop: 8,\n      }}\n    >\n      {text.toUpperCase()}\n    </Text>\n  </View>\n);\n\nclass Settings extends Component {\n  state = {\n    currentIndex: 0,\n    characters: Object.keys(Characters).map(val => Characters[val]),\n  };\n  dismiss = () => {\n    this.props.goBack();\n  };\n\n  pickRandom = () => {\n    const { characters, currentIndex } = this.state;\n\n    const randomIndex = Math.floor(Math.random() * (characters.length - 1));\n    const randomCharacter = characters[randomIndex];\n    this.props.setCharacter(randomCharacter);\n    this.dismiss();\n  };\n  share = () => {\n    const { characters, currentIndex } = this.state;\n    const character = characters[currentIndex].name;\n    Share.share(\n      {\n        message: `Check out ribbits game on PuzlWorld`,\n        url: 'https://puzl.world',\n        title: 'Ribbits Game',\n      },\n      {\n        dialogTitle: 'Share Ribbits Game',\n        excludedActivityTypes: [\n          'com.apple.UIKit.activity.AirDrop', // This speeds up showing the share sheet by a lot\n          'com.apple.UIKit.activity.AddToReadingList', // This is just lame :)\n        ],\n        tintColor: Colors.blue,\n      },\n    );\n  };\n\n  _showResult = result => {\n    // if (result.action === Share.sharedAction) {\n    //   if (result.activityType) {\n    //     this.setState({result: 'shared with an activityType: ' + result.activityType});\n    //   } else {\n    //     this.setState({result: 'shared'});\n    //   }\n    // } else if (result.action === Share.dismissedAction) {\n    //   this.setState({result: 'dismissed'});\n    // }\n  };\n\n  select = () => {\n    const { characters, currentIndex } = this.state;\n\n    this.props.setCharacter(characters[currentIndex]);\n    this.dismiss();\n  };\n\n  render() {\n    const imageStyle = { width: 60, height: 48 };\n\n    const buttons = [\n      {\n        text: 'Language',\n        source: Images.button.language,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'Restore\\nPurchases',\n        source: Images.button.purchase,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'Credits',\n        source: Images.button.credits,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'Conserve\\nBattery',\n        source: Images.button.conserve_battery,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'Mute',\n        source: Images.button.mute,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'No Shadows',\n        source: Images.button.shadows,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'Reminders',\n        source: Images.button.alerts,\n        imageStyle: imageStyle,\n        onPress: _ => { },\n      },\n      {\n        text: 'Save Your Figurines',\n        source: Images.button.facebook,\n        imageStyle: { width: 120, height: 48 },\n        onPress: _ => { },\n      },\n    ];\n\n    return (\n      <View style={[styles.container, this.props.style]}>\n        <View\n          style={{ flexDirection: 'row', marginTop: 8, paddingHorizontal: 4 }}\n        >\n          <Button\n            source={Images.button.back}\n            imageStyle={imageStyle}\n            onPress={_ => {\n              this.dismiss();\n            }}\n          />\n        </View>\n\n        <View\n          key=\"content\"\n          style={{\n            flex: 1,\n            flexDirection: 'row',\n            flexWrap: 'wrap',\n            justifyContent: 'center',\n            alignItems: 'center',\n          }}\n        >\n          <View\n            key=\"content\"\n            style={{\n              flexDirection: 'row',\n              flexWrap: 'wrap',\n              justifyContent: 'center',\n              alignItems: 'center',\n            }}\n          >\n            {buttons.map((val, index) => (\n              <TitleButton\n                key={index}\n                source={val.source}\n                text={val.text}\n                imageStyle={val.imageStyle}\n                onPress={val.onPress}\n              />\n            ))}\n          </View>\n        </View>\n\n        {/* <Footer /> */}\n      </View>\n    );\n  }\n}\nexport default Settings\n// export default connect(\n//   state => ({}),\n//   {},\n// )(Settings);\n\nSettings.defaultProps = {\n  coins: 0,\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: 'center',\n    backgroundColor: 'rgba(105, 201, 230, 0.8)',\n    flexWrap: 'wrap',\n    maxWidth: '100%',\n  },\n  paragraph: {\n    margin: 24,\n    fontSize: 18,\n    fontWeight: 'bold',\n    textAlign: 'center',\n    color: '#34495e',\n  },\n});\n","import { GLView } from 'expo-gl';\nimport React, { Component } from 'react';\nimport { Animated, Dimensions, StyleSheet, Vibration, View } from 'react-native';\nimport { useColorScheme } from 'react-native-appearance';\nimport useAppState from '../src/hooks/useAppState'\n\nimport GestureRecognizer, { swipeDirections } from '../components/GestureView';\nimport Score from '../components/ScoreText';\nimport Engine from '../src/GameEngine';\nimport State from '../src/state';\nimport GameOverScreen from './GameOverScreen';\nimport HomeScreen from './HomeScreen';\nimport SettingsScreen from './SettingsScreen';\nimport GameContext from '../context/GameContext';\n\nconst DEBUG_CAMERA_CONTROLS = false;\nclass Game extends Component {\n  /// Reserve State for UI related updates...\n  state = {\n    ready: false,\n    score: 0,\n    viewKey: 0,\n    gameState: State.Game.none,\n    showSettings: false\n    // gameState: State.Game.gameOver\n  };\n\n  transitionScreensValue = new Animated.Value(1);\n\n  componentWillReceiveProps(nextProps, nextState) {\n    if (nextState.gameState && (nextState.gameState !== this.state.gameState)) {\n      this.updateWithGameState(nextState.gameState, this.state.gameState);\n    }\n    if (this.engine && nextProps.character !== this.props.character) {\n      this.engine._hero.setCharacter(nextProps.character);\n    }\n    // if ((this.state.gameState === State.Game.playing || this.state.gameState === State.Game.paused) && nextProps.isPaused !== this.props.isPaused) {\n    //   this.setState({ gameState: nextProps.isPaused ? State.Game.paused : State.Game.playing })\n    // }\n    // if (nextProps.character.id !== this.props.character.id) {\n    //   (async () => {\n    //     this.world.remove(this._hero);\n    //     this._hero = this.hero.getNode(nextProps.character.id);\n    //     this.world.add(this._hero);\n    //     this._hero.position.set(0, groundLevel, startingRow);\n    //     this._hero.scale.set(1, 1, 1);\n    //     this.init();\n    //   })();\n    // }\n  }\n\n  transitionToGamePlayingState = () => {\n    Animated.timing(this.transitionScreensValue, {\n      toValue: 0,\n      duration: 200,\n      onComplete: ({ finished }) => {\n        this.engine.setupGame(this.props.character);\n        this.engine.init();\n\n        if (finished) {\n          Animated.timing(this.transitionScreensValue, {\n            toValue: 1,\n            duration: 300,\n          }).start();\n        }\n      },\n    }).start();\n  };\n\n  updateWithGameState = (gameState) => {\n    if (!gameState) throw new Error('gameState cannot be undefined')\n\n    if (gameState === this.state.gameState) {\n      return;\n    }\n    const lastState = this.state.gameState;\n\n    this.setState({ gameState });\n    this.engine.gameState = gameState;\n    const { playing, gameOver, paused, none } = State.Game;\n    switch (gameState) {\n      case playing:\n        if (lastState === paused) {\n          this.engine.unpause();\n        } else if (lastState !== none) {\n          this.transitionToGamePlayingState();\n        } else {\n          // Coming straight from the menu.\n          this.engine._hero.stopIdle();\n          this.onSwipe(swipeDirections.SWIPE_UP);\n        }\n\n        break;\n      case gameOver:\n        break;\n      case paused:\n        this.engine.pause();\n        break;\n      case none:\n        if (lastState === gameOver) {\n          this.transitionToGamePlayingState();\n        } \n        this.newScore();\n\n        break;\n      default:\n        break;\n    }\n  };\n\n  componentWillUnmount() {\n    cancelAnimationFrame(this.engine.raf);\n  }\n\n  async componentDidMount() {\n    // AudioManager.sounds.bg_music.setVolumeAsync(0.05);\n    // await AudioManager.playAsync(\n    //   AudioManager.sounds.bg_music, true\n    // );\n\n    Dimensions.addEventListener('change', this.onScreenResize);\n  }\n\n  onScreenResize = ({ window }) => {\n    this.engine.updateScale();\n  };\n\n  componentWillUnmount() {\n    Dimensions.removeEventListener('change', this.onScreenResize);\n  }\n\n  componentWillMount() {\n    this.engine = new Engine();\n    // this.engine.hideShadows = this.hideShadows;\n    this.engine.onUpdateScore = position => {\n      if (this.state.score < position) {\n        this.setState({ score: position });\n      }\n    };\n    this.engine.onGameInit = () => {\n      this.setState({ score: 0 });\n    };\n    this.engine._isGameStateEnded = () => {\n      return this.state.gameState !== State.Game.playing;\n    };\n    this.engine.onGameReady = () => this.setState({ ready: true });\n    this.engine.onGameEnded = () => {\n      this.setState({ gameState: State.Game.gameOver });\n      // this.props.navigation.navigate('GameOver')\n    };\n    this.engine.setupGame(this.props.character);\n    this.engine.init();\n  }\n\n  \n  newScore = () => {\n    Vibration.cancel();\n    // this.props.setGameState(State.Game.playing);\n    this.setState({ score: 0 });\n    this.engine.init();\n  };\n\n  onSwipe = gestureName => this.engine.moveWithDirection(gestureName);\n\n  renderGame = () => {\n    if (!this.state.ready) return;\n\n    return (\n      <GestureView\n        pointerEvents={DEBUG_CAMERA_CONTROLS ? 'none' : undefined}\n        onStartGesture={this.engine.beginMoveWithDirection}\n        onSwipe={this.onSwipe}\n      >\n        <GLView\n          style={{ flex: 1, height: '100%', overflow: 'hidden' }}\n          onContextCreate={this.engine._onGLContextCreate}\n        />\n      </GestureView>\n    );\n  };\n\n  renderGameOver = () => {\n    if (this.state.gameState !== State.Game.gameOver) {\n      return null;\n    }\n\n    return (\n      <View style={StyleSheet.absoluteFillObject}>\n        <GameOverScreen\n         score={this.state.score}\n          showSettings={() => {\n            this.setState({ showSettings: true })\n          }}\n          setGameState={(state) => {\n            this.updateWithGameState(state);\n          }}\n        />\n      </View>\n    );\n  };\n\n  renderHomeScreen = () => {\n    if (this.state.gameState !== State.Game.none) {\n      return null;\n    }\n\n    return (\n      <View style={StyleSheet.absoluteFillObject}>\n        <HomeScreen\n          onPlay={() => {\n            this.updateWithGameState(State.Game.playing);\n          }}\n        />\n      </View>\n    );\n  };\n\n  renderSettingsScreen() {\n    return (\n      <View style={StyleSheet.absoluteFillObject}>\n        <SettingsScreen\n          goBack={() => this.setState({ showSettings: false })}\n        />\n      </View>\n    );\n  }\n\n  render() {\n    const { isDarkMode, isPaused } = this.props;\n\n    return (\n      <View\n        pointerEvents=\"box-none\"\n        style={[\n          StyleSheet.absoluteFill,\n          { flex: 1, position: 'fixed', backgroundColor: '#87C6FF' },\n          this.props.style,\n        ]}\n      >\n        <Animated.View\n          style={{ flex: 1, opacity: this.transitionScreensValue }}\n        >\n          {this.renderGame()}\n        </Animated.View>\n        <Score\n          score={this.state.score}\n          gameOver={this.state.gameState === State.Game.gameOver}\n        />\n        {this.renderGameOver()}\n\n        {this.renderHomeScreen()}\n\n        {this.state.showSettings && this.renderSettingsScreen()}\n\n        {isPaused && <View style={[StyleSheet.absoluteFill, { backgroundColor: 'rgba(105, 201, 230, 0.8)', justifyContent: 'center', alignItems: 'center'}]}/>}\n      </View>\n    );\n  }\n}\n\nconst GestureView = ({ onStartGesture, onSwipe, ...props }) => {\n  const config = {\n    velocityThreshold: 0.2,\n    directionalOffsetThreshold: 80,\n  };\n\n  return (\n    <GestureRecognizer\n      onResponderGrant={() => {\n        onStartGesture();\n      }}\n      onSwipe={direction => {\n        onSwipe(direction);\n      }}\n      config={config}\n      onTap={() => {\n        onSwipe(swipeDirections.SWIPE_UP);\n      }}\n      style={{ flex: 1 }}\n      {...props}\n    />\n  );\n};\n\nfunction GameScreen(props) {\n  const scheme = useColorScheme();\n  const { character } = React.useContext(GameContext)\n\n  // const appState = useAppState();\n\n  return <Game {...props} character={character} isDarkMode={scheme === 'dark'} />\n}\n\nexport default GameScreen;\n","import { loadAsync } from 'expo-font';\nimport React from 'react';\nimport { Image, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\nimport { AppearanceProvider } from 'react-native-appearance';\nimport GameProvider from './context/GameProvider';\n\nimport GameScreen from './screens/GameScreen';\nimport AudioManager from './src/AudioManager';\nimport ModelLoader from './src/ModelLoader';\n\nconsole.ignoredYellowBox = [\n  'WebGL',\n  'THREE.WebGLRenderer',\n  'THREE.WebGLProgram',\n];\n\n\nconst DEBUG_DONT_LOAD_ASSETS = false;\n\nexport default function App() {\n  return (<AppearanceProvider><SafeAreaProvider><GameProvider><AppLoading /></GameProvider></SafeAreaProvider></AppearanceProvider>)\n}\n\nfunction AppLoading() {\n  const [appIsReady, setReady] = React.useState(DEBUG_DONT_LOAD_ASSETS);\n  const [error, setError] = React.useState(null);\n\n  React.useEffect(() => {\n    if (DEBUG_DONT_LOAD_ASSETS) {\n      return;\n    }\n    (async () => {\n      // Test error screen\n      // setError(new Error('testing screen'));\n      try {\n        await Promise.all([\n          AudioManager.setupAsync(),\n          loadAsync({ retro: require('./assets/fonts/retro.ttf') }),\n        ]);\n      } catch ({ message }) {\n        console.error('App: Error loading assets: ' + message);\n      }\n      try {\n        await ModelLoader.loadModels();\n        setReady(true);\n      } catch (e) {\n        console.error(e);\n        setError(e);\n      }\n    })();\n  }, []);\n\n  if (DEBUG_DONT_LOAD_ASSETS) {\n    return <GameScreen />;\n  }\n\n  if (error) {\n    return (\n      <ErrorScreen message={error.message} stack={error.stack} />\n    );\n  }\n  if (appIsReady) {\n    return <GameScreen />;\n  }\n\n  return (<SplashScreen />);\n}\n\nconst ErrorScreen = ({ message, stack }) => (\n  <View style={styles.errorContainer}>\n    <ScrollView style={styles.error} contentContainerStyle={{}}>\n      <Text style={styles.errorTitle}>This is a fatal error 👋 </Text>\n      <Text style={styles.errorText}>{message}</Text>\n      {stack && <Text style={[styles.errorText, { fontSize: 12, opacity: 0.8, marginTop: 4 }]}>{stack}</Text>}\n    </ScrollView>\n  </View>\n)\n\nconst SplashScreen = () => (\n  <Image\n    style={styles.splash}\n    source={require('./assets/icons/loading.png')}\n  />\n)\n\nconst styles = StyleSheet.create({\n  splash: {\n    backgroundColor: '#000', flex: 1, resizeMode: 'contain'\n  },\n  errorContainer: {\n    ...StyleSheet.absoluteFillObject,\n    flex: 1, backgroundColor: 'black', justifyContent: \"center\", alignItems: \"center\",\n  },\n  error: {\n    maxWidth: 300,\n    maxHeight: '50%',\n    borderRadius: 8,\n    paddingVertical: 16,\n    paddingHorizontal: 24,\n    backgroundColor: '#9e0000',\n  },\n  errorTitle: {\n    fontSize: 30, color: 'white', fontWeight: 'bold',\n    borderBottomWidth: StyleSheet.hairlineWidth,\n    borderBottomColor: 'rgba(0,0,0,0.1)'\n  },\n  errorText: {\n    fontSize: 24, color: 'white'\n  }\n})","import registerRootComponent from 'expo/build/launch/registerRootComponent';\nimport { activateKeepAwake } from 'expo-keep-awake';\n\nimport App from './App';\n\nif (__DEV__) {\n    activateKeepAwake();\n}\n\nregisterRootComponent(App);\n"],"sourceRoot":""}