{"version":3,"sources":["/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/car-engine-loop-deep.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/grass/model.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/road/model.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/long_play.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/title.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/web-build/register-service-worker.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck1.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck2.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck3.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck4.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck5.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck6.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck7.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck8.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck9.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck10.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck11.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/buck12.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/chickendeath.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/chickendeath2.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/car-horn.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/carhit.mp3","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/carsquish3.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/Pop_1.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/Pop_2.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/bannerhit3-g.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/watersplashlow.mp3","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/Train_Alarm.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/train_pass_no_horn.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/train_pass_shorter.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/audio/trainsplat.wav","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/fonts/retro.ttf","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/grass/light-grass.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/grass/dark-grass.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/road/stripes-texture.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/road/blank-texture.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/0/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/0/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/1/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/1/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/2/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/2/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/3/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/log/3/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/0/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/0/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/1/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/1/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/2/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/2/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/3/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/tree/3/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/lily_pad/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/lily_pad/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/river/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/river/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/railroad/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/railroad/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/train_light/active/0/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/train_light/active/0/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/train_light/active/1/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/train_light/active/1/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/train_light/inactive/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/train_light/inactive/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/boulder/0/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/boulder/0/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/boulder/1/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/environment/boulder/1/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/train/front/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/train/front/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/train/middle/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/train/middle/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/train/back/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/train/back/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/police_car/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/police_car/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/blue_car/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/blue_car/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/blue_truck/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/blue_truck/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/green_car/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/green_car/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/orange_car/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/orange_car/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/purple_car/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/purple_car/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/red_truck/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/red_truck/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/taxi/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/vehicles/taxi/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/brent/0.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/brent/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/avocoder/avocoder.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/avocoder/avocoder.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/bacon/bacon.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/bacon/bacon.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/wheeler/wheeler.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/wheeler/wheeler.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/palmer/palmer.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/palmer/palmer.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/juwan/juwan.obj","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/models/characters/juwan/juwan.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/back.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/share.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/character.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/camera.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/controller.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/shop.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/menu.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/settings.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/rank.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/social.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/random.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/mail.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/alerts.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/conserve_battery.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/credits.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/facebook.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/language.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/mute.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/purchase.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/shadows.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/buttons/video_ads.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/hand/0.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/images/hand/1.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/assets/icons/loading.png","/Users/abeli/Downloads/Expo-Crossy-Road-master/context/GameContext.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/context/GameProvider.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/GestureView.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/ScoreText.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Audio.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/AudioManager.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Characters.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/GameSettings.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Particles/Feathers.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Particles/Water.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Models.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/CrossyMaterial.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Generic.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Hero.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Car.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Log.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Road.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Grass.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/River.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Tree.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Train.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/Boulder.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/RailRoad.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/TrainLight.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Node/LilyPad.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/ModelLoader.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Row/RailRoad.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Row/Road.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Particles/Foam.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Row/Water.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Row/Grass.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Row/index.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/CrossyGame.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/CrossyPlayer.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/GameEngine.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/state.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/hooks/useDimensions.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/Button/index.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/GameOver/Banner.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Colors.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/src/Images.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/GameOver/Footer.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/screens/GameOverScreen.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/HandCTA.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/CharacterPicker.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/components/Home/Footer.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/screens/HomeScreen.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/screens/SettingsScreen.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/screens/GameScreen.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/App.js","/Users/abeli/Downloads/Expo-Crossy-Road-master/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","setupAsync","Promise","all","AudioFiles","bacon","id","brent","avocoder","wheeler","palmer","juwan","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","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","onPressIn","onPressOut","Image","image","resizeMode","Banner","animatedValue","useDimensions","Animated","minWidth","maxWidth","transform","translateX","text","numberOfLines","title","button","marginLeft","undefined","renderButton","textAlign","flexDirection","justifyContent","alignItems","paddingHorizontal","marginVertical","blue","play","share","long_play","controller","shop","menu","settings","rank","social","mail","alerts","conserve_battery","credits","facebook","language","mute","purchase","shadows","video_ads","hand","shareAsync","Share","message","url","dialogTitle","excludedActivityTypes","tintColor","Colors","Footer","showSettings","setGameState","navigation","canShare","setCanShare","isAvailableAsync","LayoutAnimation","easeInEaseOut","aspectRatio","Images","marginRight","State","minHeight","maxHeight","Alert","alert","cancelable","GameOver","Value","_animateBanners","playBannerSound","_animations","animation","timing","toValue","duration","easing","Easing","elastic","stagger","start","paddingTop","paddingBottom","interpolate","inputRange","outputRange","extrapolate","scaleY","paddingLeft","paddingRight","paragraph","margin","fontWeight","sprite","INTERVAL","HandCTA","setIndex","interval","setInterval","prevIndex","clearInterval","CharacterPicker","TouchableWithoutFeedback","Picker","selectedValue","picker","onValueChange","itemValue","itemIndex","Item","label","borderWidth","borderColor","menuOpen","setMenuOpen","collapse","opacity","onMultiplayer","marginBottom","onShop","onCamera","hasShownTitle","Screen","keyCode","includes","onPlay","InteractionManager","runAfterInteractions","in","qubic","animatedTitleStyle","translateY","TouchableOpacity","activeOpacity","absoluteFill","finished","coins","onCharacterSelect","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","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,iBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,6FCEvC,kBAAmBC,WACrBC,OAAOC,iBAAiB,QAAQ,WAC9BF,UAAUG,cACPC,SAAS,0BAA2B,CAAEC,MAAO,MAC7CC,MAAK,SAASC,OAGdC,OAAM,SAASC,GACdC,QAAQH,KAAK,oCAAqCE,U,8CCV1DX,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,gBCA3CD,EAAOC,QAAU,yrlB,oBCAjBD,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,+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,mBCA3CD,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,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,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAA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","file":"static/js/app.c6695755.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.fdb28542.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.8f730dc8.png\";","module.exports = __webpack_public_path__ + \"static/media/dark-grass.3c7be856.png\";","module.exports = __webpack_public_path__ + \"static/media/stripes-texture.ab5f8544.png\";","module.exports = __webpack_public_path__ + \"static/media/blank-texture.879d6f81.png\";","module.exports = __webpack_public_path__ + \"static/media/0.10b2eeff.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.e5f5a00f.png\";","module.exports = __webpack_public_path__ + \"static/media/0.e784d10b.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.a80e1b34.png\";","module.exports = __webpack_public_path__ + \"static/media/0.4460f571.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.bcca76f1.png\";","module.exports = __webpack_public_path__ + \"static/media/0.149372d7.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.2ba9a99f.png\";","module.exports = __webpack_public_path__ + \"static/media/0.b3501e5f.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.38f61a16.png\";","module.exports = __webpack_public_path__ + \"static/media/0.5ef986e2.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.7aee036c.png\";","module.exports = __webpack_public_path__ + \"static/media/0.6706612c.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.7549912e.png\";","module.exports = __webpack_public_path__ + \"static/media/0.bf470b49.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.1e503668.png\";","module.exports = __webpack_public_path__ + \"static/media/0.573a3531.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.e97f4d54.png\";","module.exports = __webpack_public_path__ + \"static/media/0.a6053609.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.510551ca.png\";","module.exports = __webpack_public_path__ + \"static/media/0.ae865d17.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.f0bac10b.png\";","module.exports = __webpack_public_path__ + \"static/media/0.93e791ae.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.91135343.png\";","module.exports = __webpack_public_path__ + \"static/media/0.31068ccc.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.2a6d5828.png\";","module.exports = __webpack_public_path__ + \"static/media/0.6521e3af.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.2e3e2777.png\";","module.exports = __webpack_public_path__ + \"static/media/0.894e56b9.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.5c3bd8bc.png\";","module.exports = __webpack_public_path__ + \"static/media/0.e663341c.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.5756bba6.png\";","module.exports = __webpack_public_path__ + \"static/media/0.f9526f2e.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.d243c52a.png\";","module.exports = __webpack_public_path__ + \"static/media/0.9bee5eb1.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.fea2ed38.png\";","module.exports = __webpack_public_path__ + \"static/media/0.107c6541.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.df1809cf.png\";","module.exports = __webpack_public_path__ + \"static/media/0.a8f7f2fa.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.24dd6f25.png\";","module.exports = __webpack_public_path__ + \"static/media/0.1873ae2e.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.ce2752ef.png\";","module.exports = __webpack_public_path__ + \"static/media/0.93722f02.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.f91df761.png\";","module.exports = __webpack_public_path__ + \"static/media/0.0f2231fa.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.eb35e474.png\";","module.exports = __webpack_public_path__ + \"static/media/0.3f3b0fb3.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.1a27694e.png\";","module.exports = __webpack_public_path__ + \"static/media/0.e7ededf4.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.f91d47fa.png\";","module.exports = __webpack_public_path__ + \"static/media/0.41bea4c0.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.8dfccc49.png\";","module.exports = __webpack_public_path__ + \"static/media/0.1ab184ca.obj\";","module.exports = __webpack_public_path__ + \"static/media/0.76081c39.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/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.bbb4eaf3.png\";","import { createContext } from 'react';\n\nexport default createContext({ character: 'bacon', 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: 'bacon', 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';\n// import 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  // chicken: {\n  //   name: 'Chicken',\n  //   id: 'chicken',\n  // },\n  bacon: {\n    name: \"Bacon\",\n    id: \"bacon\"\n  },\n  brent: {\n    name: \"Brent Vatne\",\n    id: \"brent\"\n  },\n  avocoder: {\n    name: \"Avocoder\",\n    id: \"avocoder\"\n  },\n  wheeler: {\n    name: \"Wheeler\",\n    id: \"wheeler\"\n  },\n  palmer: {\n    name: \"Palmer\",\n    id: \"palmer\"\n  },\n  juwan: {\n    name: \"Juwan\",\n    id: \"juwan\"\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    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    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.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 = 300;\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.bacon.id,\n  name: Characters.bacon.name,\n  index: Characters.bacon.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, StyleSheet, TouchableOpacity as TouchableBounce } from 'react-native';\n\nimport AudioManager from '../../src/AudioManager';\n\nexport default function Button({ onPress, style, imageStyle, source }) {\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      <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 from 'react';\nimport { Animated, StyleSheet, Text, View } from 'react-native';\n\nimport useDimensions from '../../src/hooks/useDimensions';\nimport Button from '../Button';\n\nexport default function Banner(props) {\n  const renderButton = ({ onPress, source, style }, key) => (\n    <Button\n      key={key}\n      onPress={onPress}\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        <Text style={styles.text} numberOfLines={2}>\n          {props.title}\n        </Text>\n        {props.button && renderButton(props.button, 0)}\n      </Animated.View>\n    </Animated.View>\n  );\n\n}\n\nconst styles = StyleSheet.create({\n  text: {\n    fontSize: 18,\n    color: 'white',\n    fontFamily: 'retro',\n    textAlign: 'center',\n  },\n  banner: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  container: {\n    alignItems: 'center',\n    justifyContent: 'center',\n    flexDirection: 'row',\n    backgroundColor: 'red',\n    height: 56,\n    paddingHorizontal: 8,\n    marginVertical: 8,\n  },\n  button: {\n    height: 56,\n    marginLeft: 24,\n  },\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\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 Bouncy Bacon by @baconbrix`,\n      url: 'https://crossyroad.netlify.com',\n      title: 'Bouncy Bacon',\n    },\n    {\n      dialogTitle: 'Share Bouncy Bacon',\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      <Button\n        onPress={() => {\n          showSettings()\n        }}\n        imageStyle={[styles.button, { aspectRatio: 1.25 }]}\n        source={Images.button.settings}\n      />\n      {canShare && <Button\n        onPress={shareAsync}\n        imageStyle={[styles.button, { marginRight: 4, aspectRatio: 1.9 }]}\n        source={Images.button.share}\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      <Button\n        onPress={() => {\n          console.log('Game Center'); //TODO: Add GC\n        }}\n        imageStyle={[styles.button, { aspectRatio: 1.25 }]}\n        source={Images.button.rank}\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// import { setGameState } from '../src/actions/game';\n\n//TODO: Make this dynamic\nconst banner = [\n  {\n    color: '#3640eb',\n    title: '输了? 还玩吗？',\n  },\n  {\n    color: '#368FEB',\n    title: '不如去玩飞盘吧',\n  },\n  {\n    color: '#36D6EB',\n    title: '试试联系Abe?',\n    button: {\n      onPress: _ => {\n        Alert.alert(\n          \"请联系abe.li@maersk.com\",\n          [\n            { text: 'Cancel', onPress: () => console.log('Cancel Pressed!') },\n            { text: 'OK', onPress: () => console.log('OK Pressed!') },\n          ],\n          {\n            cancelable: false,\n          },\n        );\n      },\n      source: Images.button.mail,\n      style: { aspectRatio: 1.85, height: 40 },\n    },\n  },\n];\n\n// const AnimatedBanner = Animated.createAnimatedComponent(Banner);\n\nfunction GameOver({ ...props }) {\n\n  const { window: { width } } = useDimensions();\n  const [currentIndex, setCurrentIndex] = React.useState(0);\n  const [characters, setCharacters] = React.useState(Object.keys(Characters).map(val => Characters[val]));\n  const [animations, setAnimations] = React.useState(banner.map(val => new Animated.Value(0)));\n\n  const dismiss = () => {\n    // props.navigation.goBack();\n    props.onRestart();\n  };\n\n  const pickRandom = () => {\n    const randomIndex = Math.floor(Math.random() * (characters.length - 1));\n    const randomCharacter = characters[randomIndex];\n    // props.setCharacter(randomCharacter);\n    dismiss();\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        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\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 style={[styles.container, { paddingTop: top || 12, paddingBottom: bottom || 8 }, props.style]}>\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            title={val.title}\n            button={val.button}\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});\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 { Picker, StyleSheet, TouchableWithoutFeedback } from 'react-native';\n\nimport GameContext from '../context/GameContext';\nimport Characters from '../src/Characters';\n\n\nexport default function CharacterPicker(props) {\n    const { setCharacter, character } = React.useContext(GameContext)\n\n    return (\n        <TouchableWithoutFeedback onPress={() => { }}>\n            <Picker\n                selectedValue={character}\n                style={styles.picker}\n                onValueChange={(itemValue, itemIndex) => {\n                    setCharacter(itemValue);\n                }}>\n                {Object.keys(Characters).map(id => (\n                    <Picker.Item key={id} label={Characters[id].name} value={Characters[id].id} />\n                ))}\n            </Picker>\n        </TouchableWithoutFeedback>\n    );\n}\n\n\nconst styles = StyleSheet.create({\n    picker: { \n        height: 48, \n        minWidth: 100, \n        borderWidth: 2, \n        borderColor: 'white', \n        backgroundColor: '#75C5F4', \n        color: 'white', \n        fontFamily: 'retro' \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      <CharacterPicker />\n\n      <View style={{ flex: 1 }} />\n\n      <View style={{ flexDirection: 'column-reverse' }}>\n        <Button\n          onPress={() => {\n            setMenuOpen(!menuOpen);\n          }}\n          style={[{ opacity: menuOpen ? 0.8 : 1.0 }, imageStyle]}\n          imageStyle={imageStyle}\n          source={Images.button.menu}\n        />\n\n        {menuOpen && renderMenu()}\n      </View>\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 Bouncy Bacon by @baconbrix`,\n        url: 'https://crossyroad.netlify.com',\n        title: 'Bouncy Bacon',\n      },\n      {\n        dialogTitle: 'Share Bouncy Bacon',\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  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          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        {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\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: '#87C6FF', 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":""}