{"version":3,"sources":["3d/Stars.js","images/earth.jpg","images/moon.png","3d/Planets.js","3d/Effects.js","audio/laser.mp3","audio/engine.mp3","audio/engine2.mp3","audio/bg.mp3","audio/warp.mp3","audio/click.mp3","audio/explosion.mp3","audio/index.js","store.js","3d/Particles.js","3d/Enemies.js","3d/Rocks.js","3d/Explosions.js","3d/Rings.js","3d/Track.js","3d/Ship.js","3d/Rig.js","Hud.js","App.js","index.js"],"names":["Stars","count","positions","useMemo","i","r","theta","Math","PI","random","phi","acos","x","cos","sin","y","z","push","Float32Array","attachObject","length","array","itemSize","size","sizeAttenuation","color","fog","Planets","ref","useRef","useLoader","THREE","earthImg","moonImg","texture","moon","scale","position","args","map","roughness","distance","intensity","Effects","composer","useThree","scene","gl","camera","useEffect","current","setSize","width","height","useFrame","render","attachArray","undefined","extend","EffectComposer","ShaderPass","RenderPass","UnrealBloomPass","FilmPass","mp3","explosion","explosionAudio","zap","Audio","zapAudio","engine","engineAudio","engine2","engine2Audio","bg","bgAudio","warp","warpAudio","click","clickAudio","guid","useStore","create","set","get","spline","Curves","GrannyKnot","track","cancelLaserTO","cancelExplosionTO","box","sound","points","health","lasers","explosions","rocks","randomData","enemies","mutation","t","startTime","Date","now","fov","hits","rings","randomRings","particles","looptime","binormal","normal","clock","mouse","dummy","ray","actions","init","start","toggleSound","addEffect","time","parameters","path","getPointAt","multiplyScalar","warping","playAudio","audio","filter","test","e","a","concat","previous","updates","data","state","clearTimeout","setTimeout","rock","find","enemy","shoot","updateMouse","clientX","clientY","window","innerWidth","innerHeight","min","copy","offset","max","expandByScalar","hit","result","intersectBox","origin","distanceTo","radius","Array","fill","pos","clone","add","speed","temp","pickt","tangents","pick","floor","lookAt","getLength","matrix","binormals","toArray","volume","loop","getState","currentTime","play","pause","Particles","instancedMesh","forEach","particle","rotation","updateMatrix","setMatrixAt","instanceMatrix","needsUpdate","frustumCulled","Enemies","Drone","setFromCenterAndSize","glowMaterial","bodyMaterial","React","memo","GLTFLoader","nodes","materials","getElapsedTime","material","name","geometry","Sphere_DroneGlowmat_0","DroneGlowmat","Sphere_Body_0","Rocks","gltf","Rock","key","node_id4_Material_52_0","Material_52","make","createRef","normalize","Explosions","Explosion","group","type","mesh","children","vec","opacity","index","transparent","side","Rings","f","onUpdate","self","quaternion","setFromRotationMatrix","Track","lightgreen","hotpink","laserMaterial","crossMaterial","direction","Ship","main","laserGroup","laserLight","exhaust","cross","target","getWorldPosition","getWorldDirection","negate","visible","renderOrder","Rig","rig","segments","pickNext","subVectors","dir","getTangentAt","updateProjectionMatrix","lightPos","Hud","toggle","seconds","setInterval","innerText","toFixed","clearInterval","score","UpperLeft","onClick","LowerLeft","Global","LowerRight","style","base","css","styled","div","createGlobalStyle","App","onPointerMove","linear","mode","dpr","antialias","near","far","onCreated","toneMapping","setClearColor","attach","fallback","ReactDOM","document","getElementById"],"mappings":"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","file":"static/js/main.ba1e7417.chunk.js","sourcesContent":["import React, { useMemo } from 'react'\n\nexport default function Stars({ count = 2000 }) {\n const positions = useMemo(() => {\n let positions = []\n for (let i = 0; i < count; i++) {\n const r = 4000\n const theta = 2 * Math.PI * Math.random()\n const phi = Math.acos(2 * Math.random() - 1)\n const x = r * Math.cos(theta) * Math.sin(phi) + (-2000 + Math.random() * 4000)\n const y = r * Math.sin(theta) * Math.sin(phi) + (-2000 + Math.random() * 4000)\n const z = r * Math.cos(phi) + (-1000 + Math.random() * 2000)\n positions.push(x)\n positions.push(y)\n positions.push(z)\n }\n return new Float32Array(positions)\n }, [count])\n return (\n \n \n \n \n \n \n )\n}\n","export default __webpack_public_path__ + \"static/media/earth.45ed3b77.jpg\";","export default __webpack_public_path__ + \"static/media/moon.27019542.png\";","import * as THREE from 'three'\nimport React, { useRef } from 'react'\nimport { useLoader } from '@react-three/fiber'\nimport earthImg from '../images/earth.jpg'\nimport moonImg from '../images/moon.png'\n\nexport default function Planets() {\n const ref = useRef()\n const [texture, moon] = useLoader(THREE.TextureLoader, [earthImg, moonImg])\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React, { useRef, useEffect } from 'react'\nimport { extend, useThree, useFrame } from '@react-three/fiber'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass'\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass'\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass'\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass'\n\nextend({ EffectComposer, ShaderPass, RenderPass, UnrealBloomPass, FilmPass })\n\nexport default function Effects() {\n const composer = useRef()\n const { scene, gl, size, camera } = useThree()\n useEffect(() => void composer.current.setSize(size.width, size.height), [size])\n useFrame(() => composer.current.render(), 2)\n return (\n \n \n \n \n )\n}\n","export default __webpack_public_path__ + \"static/media/laser.373d639d.mp3\";","export default __webpack_public_path__ + \"static/media/engine.75bbe12e.mp3\";","export default __webpack_public_path__ + \"static/media/engine2.87c3c40a.mp3\";","export default __webpack_public_path__ + \"static/media/bg.898c3fe7.mp3\";","export default __webpack_public_path__ + \"static/media/warp.1f9bec85.mp3\";","export default __webpack_public_path__ + \"static/media/click.db461987.mp3\";","export default __webpack_public_path__ + \"static/media/explosion.615cfd43.mp3\";","import zapAudio from './laser.mp3'\nimport engineAudio from './engine.mp3'\nimport engine2Audio from './engine2.mp3'\nimport bgAudio from './bg.mp3'\nimport warpAudio from './warp.mp3'\nimport clickAudio from './click.mp3'\nimport explosionAudio from './explosion.mp3'\n\nconst mp3 = { explosion: explosionAudio }\n\nconst zap = new Audio(zapAudio)\nconst engine = new Audio(engineAudio)\nconst engine2 = new Audio(engine2Audio)\nconst bg = new Audio(bgAudio)\nconst warp = new Audio(warpAudio)\nconst click = new Audio(clickAudio)\nconst explosion = new Audio(explosionAudio)\n\nexport { zap, engine, engine2, bg, warp, click, explosion, mp3 }\n","import * as THREE from 'three'\nimport { Curves } from 'three/examples/jsm/curves/CurveExtras'\nimport { addEffect } from '@react-three/fiber'\nimport create from 'zustand'\nimport * as audio from './audio'\n\nlet guid = 1\n\nconst useStore = create((set, get) => {\n let spline = new Curves.GrannyKnot()\n let track = new THREE.TubeBufferGeometry(spline, 250, 0.2, 10, true)\n let cancelLaserTO = undefined\n let cancelExplosionTO = undefined\n const box = new THREE.Box3()\n\n return {\n sound: false,\n camera: undefined,\n points: 0,\n health: 100,\n lasers: [],\n explosions: [],\n rocks: randomData(100, track, 150, 8, () => 1 + Math.random() * 2.5),\n enemies: randomData(10, track, 20, 15, 1),\n\n mutation: {\n t: 0,\n position: new THREE.Vector3(),\n startTime: Date.now(),\n\n track,\n scale: 15,\n fov: 70,\n hits: false,\n rings: randomRings(30, track),\n particles: randomData(1500, track, 100, 1, () => 0.5 + Math.random() * 0.8),\n looptime: 40 * 1000,\n binormal: new THREE.Vector3(),\n normal: new THREE.Vector3(),\n clock: new THREE.Clock(false),\n mouse: new THREE.Vector2(-250, 50),\n\n // Re-usable objects\n dummy: new THREE.Object3D(),\n ray: new THREE.Ray(),\n box: new THREE.Box3()\n },\n\n actions: {\n init(camera) {\n const { mutation, actions } = get()\n\n set({ camera })\n mutation.clock.start()\n actions.toggleSound(get().sound)\n\n addEffect(() => {\n const { rocks, enemies } = get()\n\n const time = Date.now()\n const t = (mutation.t = ((time - mutation.startTime) % mutation.looptime) / mutation.looptime)\n mutation.position = track.parameters.path.getPointAt(t)\n mutation.position.multiplyScalar(mutation.scale)\n\n // test for wormhole/warp\n let warping = false\n if (t > 0.3 && t < 0.4) {\n if (!warping) {\n warping = true\n playAudio(audio.warp)\n }\n } else if (t > 0.5) warping = false\n\n // test for hits\n const r = rocks.filter(actions.test)\n const e = enemies.filter(actions.test)\n const a = r.concat(e)\n const previous = mutation.hits\n mutation.hits = a.length\n if (previous === 0 && mutation.hits) playAudio(audio.click)\n const lasers = get().lasers\n if (mutation.hits && lasers.length && time - lasers[lasers.length - 1] < 100) {\n const updates = a.map((data) => ({ time: Date.now(), ...data }))\n set((state) => ({ explosions: [...state.explosions, ...updates] }))\n clearTimeout(cancelExplosionTO)\n cancelExplosionTO = setTimeout(() => set((state) => ({ explosions: state.explosions.filter(({ time }) => Date.now() - time <= 1000) })), 1000)\n set((state) => ({\n points: state.points + r.length * 100 + e.length * 200,\n rocks: state.rocks.filter((rock) => !r.find((r) => r.guid === rock.guid)),\n enemies: state.enemies.filter((enemy) => !e.find((e) => e.guid === enemy.guid))\n }))\n }\n //if (a.some(data => data.distance < 15)) set(state => ({ health: state.health - 1 }))\n })\n },\n shoot() {\n set((state) => ({ lasers: [...state.lasers, Date.now()] }))\n clearTimeout(cancelLaserTO)\n cancelLaserTO = setTimeout(() => set((state) => ({ lasers: state.lasers.filter((t) => Date.now() - t <= 1000) })), 1000)\n playAudio(audio.zap, 0.5)\n },\n toggleSound(sound = !get().sound) {\n set({ sound })\n playAudio(audio.engine, 1, true)\n playAudio(audio.engine2, 0.3, true)\n playAudio(audio.bg, 1, true)\n },\n updateMouse({ clientX: x, clientY: y }) {\n get().mutation.mouse.set(x - window.innerWidth / 2, y - window.innerHeight / 2)\n },\n test(data) {\n box.min.copy(data.offset)\n box.max.copy(data.offset)\n box.expandByScalar(data.size * data.scale)\n data.hit.set(10000, 10000, 10000)\n const result = get().mutation.ray.intersectBox(box, data.hit)\n data.distance = get().mutation.ray.origin.distanceTo(data.hit)\n return result\n }\n }\n }\n})\n\nfunction randomData(count, track, radius, size, scale) {\n return new Array(count).fill().map(() => {\n const t = Math.random()\n const pos = track.parameters.path.getPointAt(t)\n pos.multiplyScalar(15)\n const offset = pos\n .clone()\n .add(new THREE.Vector3(-radius + Math.random() * radius * 2, -radius + Math.random() * radius * 2, -radius + Math.random() * radius * 2))\n const speed = 0.1 + Math.random()\n return { guid: guid++, scale: typeof scale === 'function' ? scale() : scale, size, offset, pos, speed, radius, t, hit: new THREE.Vector3(), distance: 1000 }\n })\n}\n\nfunction randomRings(count, track) {\n let temp = []\n let t = 0.4\n for (let i = 0; i < count; i++) {\n t += 0.003\n const pos = track.parameters.path.getPointAt(t)\n pos.multiplyScalar(15)\n const segments = track.tangents.length\n const pickt = t * segments\n const pick = Math.floor(pickt)\n const lookAt = track.parameters.path.getPointAt((t + 1 / track.parameters.path.getLength()) % 1).multiplyScalar(15)\n const matrix = new THREE.Matrix4().lookAt(pos, lookAt, track.binormals[pick])\n temp.push([pos.toArray(), matrix])\n }\n return temp\n}\n\nfunction playAudio(audio, volume = 1, loop = false) {\n if (useStore.getState().sound) {\n audio.currentTime = 0\n audio.volume = volume\n audio.loop = loop\n audio.play()\n } else audio.pause()\n}\n\nexport default useStore\nexport { audio, playAudio }\n","import React, { useRef, useEffect } from 'react'\nimport useStore from '../store'\n\nexport default function Particles() {\n const instancedMesh = useRef()\n const { particles, dummy } = useStore((state) => state.mutation)\n\n useEffect(() => {\n particles.forEach((particle, i) => {\n const { offset, scale } = particle\n dummy.position.copy(offset)\n dummy.scale.set(scale, scale, scale)\n dummy.rotation.set(Math.sin(Math.random()) * Math.PI, Math.sin(Math.random()) * Math.PI, Math.cos(Math.random()) * Math.PI)\n dummy.updateMatrix()\n instancedMesh.current.setMatrixAt(i, dummy.matrix)\n })\n instancedMesh.current.instanceMatrix.needsUpdate = true\n }, [])\n\n return (\n \n \n \n \n )\n}\n","import * as THREE from 'three'\nimport React, { useRef } from 'react'\nimport { useLoader, useFrame } from '@react-three/fiber'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\nimport useStore from '../store'\n\nexport default function Enemies() {\n const enemies = useStore((state) => state.enemies)\n return enemies.map((data, i) => )\n}\n\nconst box = new THREE.Box3()\nbox.setFromCenterAndSize(new THREE.Vector3(0, 0, 1), new THREE.Vector3(3, 3, 3))\nconst glowMaterial = new THREE.MeshBasicMaterial({ color: new THREE.Color('lightblue') })\nconst bodyMaterial = new THREE.MeshPhongMaterial({ color: new THREE.Color('black') })\n\nconst Drone = React.memo(({ data }) => {\n const { clock } = useStore((state) => state.mutation)\n const { nodes, materials } = useLoader(GLTFLoader, '/drone.gltf')\n const ref = useRef()\n\n useFrame(() => {\n const r = Math.cos((clock.getElapsedTime() / 2) * data.speed) * Math.PI\n ref.current.position.copy(data.offset)\n ref.current.rotation.set(r, r, r)\n })\n\n return (\n \n \n \n \n \n \n \n )\n})\n","import React, { useRef } from 'react'\nimport { useFrame, useLoader } from '@react-three/fiber'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\nimport useStore from '../store'\n\nexport default function Rocks() {\n const gltf = useLoader(GLTFLoader, '/rock.gltf')\n const rocks = useStore((state) => state.rocks)\n return rocks.map((data) => )\n}\n\nconst Rock = React.memo(({ nodes, materials, data }) => {\n const ref = useRef()\n const { clock } = useStore((state) => state.mutation)\n useFrame(() => {\n const r = Math.cos((clock.getElapsedTime() / 2) * data.speed) * Math.PI\n ref.current.rotation.set(r, r, r)\n })\n return (\n \n \n \n \n \n )\n})\n","import * as THREE from 'three'\nimport React, { useRef, useMemo, useEffect } from 'react'\nimport { useFrame } from '@react-three/fiber'\nimport useStore, { audio, playAudio } from '../store'\n\nfunction make(color, speed) {\n return {\n ref: React.createRef(),\n color,\n data: new Array(20)\n .fill()\n .map(() => [\n new THREE.Vector3(),\n new THREE.Vector3(-1 + Math.random() * 2, -1 + Math.random() * 2, -1 + Math.random() * 2).normalize().multiplyScalar(speed * 0.75)\n ])\n }\n}\n\nexport default function Explosions() {\n const explosions = useStore((state) => state.explosions)\n return explosions.map(({ guid, offset, scale }) => )\n}\n\nfunction Explosion({ position, scale }) {\n const group = useRef()\n const { dummy } = useStore((state) => state.mutation)\n const particles = useMemo(() => [make('white', 0.8), make('orange', 0.6)], [])\n\n useEffect(() => void playAudio(new Audio(audio.mp3.explosion), 0.5), [])\n\n useFrame(() => {\n particles.forEach(({ data }, type) => {\n const mesh = group.current.children[type]\n data.forEach(([vec, normal], i) => {\n vec.add(normal)\n dummy.position.copy(vec)\n dummy.updateMatrix()\n mesh.setMatrixAt(i, dummy.matrix)\n })\n mesh.material.opacity -= 0.025\n mesh.instanceMatrix.needsUpdate = true\n })\n })\n\n return (\n \n {particles.map(({ color, data }, index) => (\n \n \n \n \n ))}\n \n )\n}\n","import * as THREE from 'three'\nimport React from 'react'\nimport useStore from '../store'\n\nconst geometry = new THREE.RingBufferGeometry(1, 1.01, 64)\nconst material = new THREE.MeshBasicMaterial({ color: new THREE.Color('lightgreen'), side: THREE.DoubleSide })\n\nexport default function Rings() {\n const { rings } = useStore(state => state.mutation)\n return rings.map(([pos, matrix], i) => {\n const f = (Math.sin(i / 10) * Math.PI) / 2\n return (\n self.quaternion.setFromRotationMatrix(matrix)}\n geometry={geometry}\n material={material}\n />\n )\n })\n}\n","import React from 'react'\nimport useStore from '../store'\n\nexport default function Track() {\n const { scale, track } = useStore((state) => state.mutation)\n return (\n \n \n \n )\n}\n","import * as THREE from 'three'\nimport React, { useRef } from 'react'\nimport { useLoader, useFrame } from '@react-three/fiber'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\nimport useStore from '../store'\n\nconst geometry = new THREE.BoxBufferGeometry(1, 1, 40)\nconst lightgreen = new THREE.Color('lightgreen')\nconst hotpink = new THREE.Color('hotpink')\nconst laserMaterial = new THREE.MeshBasicMaterial({ color: lightgreen })\nconst crossMaterial = new THREE.MeshBasicMaterial({ color: hotpink, fog: false })\nconst position = new THREE.Vector3()\nconst direction = new THREE.Vector3()\n\nexport default function Ship() {\n const { nodes } = useLoader(GLTFLoader, '/ship.gltf')\n const mutation = useStore((state) => state.mutation)\n const { clock, mouse, ray } = mutation\n const lasers = useStore((state) => state.lasers)\n const main = useRef()\n const laserGroup = useRef()\n const laserLight = useRef()\n const exhaust = useRef()\n const cross = useRef()\n const target = useRef()\n\n useFrame(() => {\n main.current.position.z = Math.sin(clock.getElapsedTime() * 40) * Math.PI * 0.2\n main.current.rotation.z += (mouse.x / 500 - main.current.rotation.z) * 0.2\n main.current.rotation.x += (-mouse.y / 1200 - main.current.rotation.x) * 0.2\n main.current.rotation.y += (-mouse.x / 1200 - main.current.rotation.y) * 0.2\n main.current.position.x += (mouse.x / 10 - main.current.position.x) * 0.2\n main.current.position.y += (25 + -mouse.y / 10 - main.current.position.y) * 0.2\n exhaust.current.scale.x = 1 + Math.sin(clock.getElapsedTime() * 200)\n exhaust.current.scale.y = 1 + Math.sin(clock.getElapsedTime() * 200)\n for (let i = 0; i < lasers.length; i++) {\n const group = laserGroup.current.children[i]\n group.position.z -= 20\n }\n laserLight.current.intensity += ((lasers.length && Date.now() - lasers[lasers.length - 1] < 100 ? 20 : 0) - laserLight.current.intensity) * 0.3\n\n // Get ships orientation and save it to the stores ray\n main.current.getWorldPosition(position)\n main.current.getWorldDirection(direction)\n ray.origin.copy(position)\n ray.direction.copy(direction.negate())\n\n // ...\n crossMaterial.color = mutation.hits ? lightgreen : hotpink\n cross.current.visible = !mutation.hits\n target.current.visible = !!mutation.hits\n })\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {lasers.map((t, i) => (\n \n \n \n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React, { useRef } from 'react'\nimport { useThree, useFrame } from '@react-three/fiber'\nimport useStore from '../store'\n\nlet offset = 0\nexport default function Rig({ children }) {\n const group = useRef()\n const rig = useRef()\n const mutation = useStore((state) => state.mutation)\n const { fov, scale, binormal, normal, track, mouse } = mutation\n const { camera } = useThree()\n\n useFrame(() => {\n const t = mutation.t\n const pos = mutation.position.clone()\n const segments = track.tangents.length\n const pickt = t * segments\n const pick = Math.floor(pickt)\n const pickNext = (pick + 1) % segments\n binormal.subVectors(track.binormals[pickNext], track.binormals[pick])\n binormal.multiplyScalar(pickt - pick).add(track.binormals[pick])\n const dir = track.parameters.path.getTangentAt(t)\n offset += (Math.max(15, 15 + -mouse.y / 20) - offset) * 0.05\n normal.copy(binormal).cross(dir)\n pos.add(normal.clone().multiplyScalar(offset))\n camera.position.copy(pos)\n const lookAt = track.parameters.path.getPointAt((t + 30 / track.parameters.path.getLength()) % 1).multiplyScalar(scale)\n camera.matrix.lookAt(camera.position, lookAt, normal)\n camera.quaternion.setFromRotationMatrix(camera.matrix)\n camera.fov += ((t > 0.4 && t < 0.45 ? 120 : fov) - camera.fov) * 0.05\n camera.updateProjectionMatrix()\n const lightPos = track.parameters.path.getPointAt((t + 1 / track.parameters.path.getLength()) % 1).multiplyScalar(scale)\n group.current.position.copy(lightPos)\n group.current.quaternion.setFromRotationMatrix(camera.matrix)\n })\n\n return (\n \n \n \n {children}\n \n \n )\n}\n","import React, { useMemo, useRef, useEffect } from 'react'\nimport styled, { css, createGlobalStyle } from 'styled-components'\nimport useStore from './store'\n\nexport default function Hud() {\n const points = useStore((state) => state.points)\n const health = useStore((state) => state.health)\n const sound = useStore((state) => state.sound)\n const toggle = useStore((state) => state.actions.toggleSound)\n\n const seconds = useRef()\n useEffect(() => {\n const t = Date.now()\n const i = setInterval(() => (seconds.current.innerText = ((Date.now() - t) / 1000).toFixed(1)), 100)\n return () => clearInterval(i)\n }, [])\n\n const score = useMemo(() => (points >= 1000 ? (points / 1000).toFixed(1) + 'K' : points), [points])\n return (\n <>\n toggle()}>\n sound\n
\n {sound ? 'off' : 'on'}\n
\n \n

0.0

\n

{score}

\n
\n \n \n
\n \n \n )\n}\n\nconst base = css`\n font-family: 'Teko', sans-serif;\n position: absolute;\n text-transform: uppercase;\n font-weight: 900;\n font-variant-numeric: slashed-zero tabular-nums;\n line-height: 1em;\n pointer-events: none;\n color: indianred;\n`\n\nconst UpperLeft = styled.div`\n ${base}\n top: 40px;\n left: 50px;\n font-size: 2em;\n transform: skew(5deg, 5deg);\n pointer-events: all;\n cursor: pointer;\n @media only screen and (max-width: 900px) {\n font-size: 1.5em;\n }\n`\n\nconst UpperRight = styled.div`\n ${base}\n text-align: right;\n top: 40px;\n right: 50px;\n font-size: 2em;\n transform: skew(-5deg, -5deg);\n pointer-events: all;\n cursor: pointer;\n & > a {\n color: indianred;\n text-decoration: none;\n }\n @media only screen and (max-width: 900px) {\n font-size: 1.5em;\n }\n`\n\nconst LowerLeft = styled.div`\n ${base}\n bottom: 5px;\n left: 50px;\n transform: skew(-5deg, -5deg);\n width: 200px;\n & > h1 {\n margin: 0;\n font-size: 10em;\n line-height: 1em;\n }\n & > h2 {\n margin: 0;\n font-size: 4em;\n line-height: 1em;\n }\n @media only screen and (max-width: 900px) {\n bottom: 30px;\n & > h1 {\n font-size: 6em !important;\n }\n & > h2 {\n font-size: 3em !important;\n }\n }\n`\n\nconst LowerRight = styled.div`\n ${base}\n bottom: 70px;\n right: 50px;\n transform: skew(5deg, 5deg);\n height: 40px;\n width: 150px;\n background: black;\n & > div {\n height: 100%;\n background: indianred;\n }\n\n @media only screen and (max-width: 900px) {\n bottom: 50px;\n height: 40px;\n width: 150px;\n }\n`\n\nconst Global = createGlobalStyle`\n * {\n box-sizing: border-box;\n }\n\n html,\n body,\n #root {\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n user-select: none;\n overflow: hidden;\n }\n\n #root {\n overflow: auto;\n padding: 0px;\n }\n\n body {\n position: fixed;\n overflow: hidden;\n overscroll-behavior-y: none;\n font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif;\n color: black;\n background: white;\n }\n`\n","import * as THREE from 'three'\nimport React, { Suspense } from 'react'\nimport { Canvas } from '@react-three/fiber'\nimport Stars from './3d/Stars'\nimport Planets from './3d/Planets'\nimport Effects from './3d/Effects'\nimport Particles from './3d/Particles'\nimport Enemies from './3d/Enemies'\nimport Rocks from './3d/Rocks'\nimport Explosions from './3d/Explosions'\nimport Rings from './3d/Rings'\nimport Track from './3d/Track'\nimport Ship from './3d/Ship'\nimport Rig from './3d/Rig'\nimport Hud from './Hud'\nimport useStore from './store'\n\nexport default function App() {\n const { fov } = useStore((state) => state.mutation)\n const actions = useStore((state) => state.actions)\n return (\n
\n {\n actions.init(camera)\n gl.toneMapping = THREE.CustomToneMapping\n gl.setClearColor(new THREE.Color('#020209'))\n }}>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './styles.css'\nimport App from './App'\n\nReactDOM.render(, document.getElementById('root'))\n"],"sourceRoot":""}