From 1e03985e5793c04b32071219a79b8062de4a9c64 Mon Sep 17 00:00:00 2001 From: Lauro Gripa Date: Thu, 25 Jan 2024 18:52:23 -0300 Subject: [PATCH] Updates --- asset-manifest.json | 6 +++--- index.html | 2 +- ... precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js | 8 ++++---- service-worker.js | 2 +- static/js/main.34083205.chunk.js | 2 -- static/js/main.34083205.chunk.js.map | 1 - static/js/main.4f81cb4a.chunk.js | 2 ++ static/js/main.4f81cb4a.chunk.js.map | 1 + 8 files changed, 12 insertions(+), 12 deletions(-) rename precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js => precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js (75%) delete mode 100644 static/js/main.34083205.chunk.js delete mode 100644 static/js/main.34083205.chunk.js.map create mode 100644 static/js/main.4f81cb4a.chunk.js create mode 100644 static/js/main.4f81cb4a.chunk.js.map diff --git a/asset-manifest.json b/asset-manifest.json index dc2a3fc..6647e73 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,7 +1,7 @@ { "main.css": "/meme-mine/static/css/main.cf959df9.chunk.css", - "main.js": "/meme-mine/static/js/main.34083205.chunk.js", - "main.js.map": "/meme-mine/static/js/main.34083205.chunk.js.map", + "main.js": "/meme-mine/static/js/main.4f81cb4a.chunk.js", + "main.js.map": "/meme-mine/static/js/main.4f81cb4a.chunk.js.map", "static/js/1.eac24e97.chunk.js": "/meme-mine/static/js/1.eac24e97.chunk.js", "static/js/1.eac24e97.chunk.js.map": "/meme-mine/static/js/1.eac24e97.chunk.js.map", "runtime~main.js": "/meme-mine/static/js/runtime~main.2437c755.js", @@ -10,6 +10,6 @@ "static/media/index.mjs": "/meme-mine/static/media/index.a045c5b8.mjs", "static/css/main.cf959df9.chunk.css.map": "/meme-mine/static/css/main.cf959df9.chunk.css.map", "index.html": "/meme-mine/index.html", - "precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js": "/meme-mine/precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js", + "precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js": "/meme-mine/precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js", "service-worker.js": "/meme-mine/service-worker.js" } \ No newline at end of file diff --git a/index.html b/index.html index 93e2922..05a922e 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -canary in a meme mine
\ No newline at end of file +canary in a meme mine
\ No newline at end of file diff --git a/precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js b/precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js similarity index 75% rename from precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js rename to precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js index ce6ee23..dfa4e60 100644 --- a/precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js +++ b/precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js @@ -1,11 +1,11 @@ self.__precacheManifest = [ { - "revision": "340832052a73054f00a5", + "revision": "4f81cb4aa5d3ea249bc0", "url": "/meme-mine/static/css/main.cf959df9.chunk.css" }, { - "revision": "340832052a73054f00a5", - "url": "/meme-mine/static/js/main.34083205.chunk.js" + "revision": "4f81cb4aa5d3ea249bc0", + "url": "/meme-mine/static/js/main.4f81cb4a.chunk.js" }, { "revision": "eac24e97a7846b8841bc", @@ -24,7 +24,7 @@ self.__precacheManifest = [ "url": "/meme-mine/static/media/index.a045c5b8.mjs" }, { - "revision": "42bca19101c716f33fea729656ec8688", + "revision": "f8eeb3b7e88c8c7efbb9a647cdb12079", "url": "/meme-mine/index.html" } ]; \ No newline at end of file diff --git a/service-worker.js b/service-worker.js index e493200..587d18f 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js"); importScripts( - "/meme-mine/precache-manifest.b0d91b6fed79e9335a06ca12833c5b71.js" + "/meme-mine/precache-manifest.41462a2b3a8c2a715f5675830e96fb25.js" ); workbox.clientsClaim(); diff --git a/static/js/main.34083205.chunk.js b/static/js/main.34083205.chunk.js deleted file mode 100644 index add178d..0000000 --- a/static/js/main.34083205.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{44:function(e,t,n){e.exports=n(62)},60:function(e,t,n){},62:function(e,t,n){"use strict";n.r(t);var a=n(2),o=n(3),r=n(5),i=n(1),c=n(6),l=n(4),s=n.n(l),u=n(36),m=n(21),f=n(9),p=n(65),d=n(10),h=n(18),b=n(30),g=n.n(b),j=n(23),E=n(0);function O(){var e=Object(d.d)(),t=e.camera,n=e.set,a=Object(l.useState)(!1),o=Object(f.a)(a,2),r=o[0],i=o[1],c=new E.PerspectiveCamera(50,16/9,.1,1e3);return Object(l.useEffect)(function(){var e=function(e){"Space"===e.code&&i(!r)};return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[r]),Object(l.useEffect)(function(){r?(c.position.set(-20,0,0),c.lookAt(20,0,0),n({camera:c})):(c.position.set(0,.8,-3),c.lookAt(0,0,0),n({camera:c}))},[r]),Object(d.b)(function(){t.lookAt(-100,200,500),t.updateProjectionMatrix()}),null}var y,v,w,x,S=n(66),k={objectUrl:{hop:"".concat("/meme-mine","/assets/canary_hop.glb"),idle:"".concat("/meme-mine","/assets/canary_idle.glb"),walk:"".concat("/meme-mine","/assets/canary_walk.glb")},nodeCoords:"canary.geometry.attributes.position",nodeSigns:[1,-1,-1],nodeScale:2.5,nodeGroupScale:.02,meshColorIndex:"ciano",meshScale:1,debug:!1,model:{material:"Default_OBJ",scale:.02,metalness:.2,roughness:2,opacity:1,color:"white"},gridPosition:[0,-.52,.28],cameraPosition:[-20,0,0],pointColorIndex:{primary:"ciano",hovered:"magenta",active:"magenta"},pointLight:{position:[0,0,0],intensity:[2,2,2],distance:15,color:["ciano","magenta","magenta"]},bloom:{kernelSize:1,luminanceThreshold:.1,luminanceSmoothing:.05,intensity:.1},glitch:{delay:[20,30],duration:[.3,.5],strength:[.1,.3]},lights:{front:{color:"ciano"},left:{color:"white"},right:{color:"magenta"}}},L={ciano:"#01ffff",magenta:"#e6007a",white:"#ffffff",black:"#000000"},M=s.a.forwardRef(function(e,t){var n=e.position?e.position:[0,0,0],a=Object(l.useState)(n),o=Object(f.a)(a,2),r=o[0],i=o[1],c=Object(l.useState)(!1),u=Object(f.a)(c,2),m=u[0],p=u[1],h=k.objectUrl[e.animation],b=Object(S.a)(h),g=b.scene,j=b.nodes,O=b.materials,y=b.animations,v=Object(l.useRef)();return Object(l.useEffect)(function(){t.current&&(v.current=new E.AnimationMixer(t.current))},[t]),Object(l.useEffect)(function(){return v.current&&y&&y.forEach(function(t){var n=v.current.clipAction(t);n.timeScale=e.speed,n.play()}),function(){v.current&&v.current.stopAllAction()}},[y]),Object(l.useEffect)(function(){var e=function(e){"ArrowRight"===e.key?i(function(e){return[e[0]-1,e[1],e[2]]}):"ArrowLeft"===e.key&&i(function(e){return[e[0]+1,e[1],e[2]]}),"ArrowUp"!==e.key||m||0!==r[1]||p(!0)};return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[r]),Object(d.b)(function(e,t){v.current&&v.current.update(t),i(m?function(e){var n=e[1]+10*t;return n>=2&&p(!1),[e[0],n<=0?0:n,e[2]]}:function(e){return[e[0],Math.max(0,e[1]-10*t),e[2]]})}),Object(l.useLayoutEffect)(function(){e.meshScale&&j.canary&&j.canary.scale.set(4,4,4),g.traverse(function(e){"Mesh"===e.type&&(e.receiveShadow=e.castShadow=!0)}),Object.assign(O[e.model.material],{wireframe:!1,metalness:e.model.metalness,roughness:e.model.moughness,opacity:e.model.opacity,color:new E.Color(L[e.model.color])})},[g,j,O]),s.a.createElement("mesh",{position:r},s.a.createElement("primitive",Object.assign({ref:t,object:g},e)))}),R=n(64),P=function(e){var t=e.config,n=Object(l.useRef)(),a=Object(l.useRef)(),o=Object(l.useRef)(),r=Object(l.useRef)(),i=Object(l.useRef)(),c=Object(l.useRef)();return Object(d.b)(function(e){var t=e.clock.getElapsedTime(),r=15;parseInt(t)%4===1&&(r=15*Math.random()|0),n.current.position.x=Math.sin(t)/4*r,n.current.position.y=Math.cos(t)/4*r,n.current.position.z=Math.cos(t)/4*r,a.current.position.x=Math.cos(t)/4*10,a.current.position.y=Math.sin(t)/4*10,a.current.position.z=Math.sin(t)/4*10,o.current.position.x=Math.sin(t)/4*10,o.current.position.y=Math.cos(t)/4*10,o.current.position.z=Math.sin(t)/4*10}),!0===t.debug&&(Object(R.a)(r,E.PointLightHelper),Object(R.a)(i,E.PointLightHelper),Object(R.a)(c,E.PointLightHelper)),s.a.createElement(s.a.Fragment,null,s.a.createElement("group",{ref:n},s.a.createElement("pointLight",{ref:r,color:L[t.pointLight.color[0]],position:t.pointLight.position,distance:t.pointLight.distance,intensity:t.pointLight.intensity[0]})),s.a.createElement("group",{ref:a},s.a.createElement("pointLight",{ref:i,color:L[t.pointLight.color[1]],position:t.pointLight.position,distance:t.pointLight.distance,intensity:t.pointLight.intensity[1]})),s.a.createElement("group",{ref:o},s.a.createElement("pointLight",{ref:c,color:L[t.pointLight.color[2]],position:t.pointLight.position,distance:t.pointLight.distance,intensity:t.pointLight.intensity[2]})))},T=n(13),A=s.a.forwardRef(function(e,t){var n=e.positionZ,a=e.side,o=Object(d.c)(E.TextureLoader,"".concat("/meme-mine","/assets/sbf.jpeg"));return s.a.createElement("mesh",{position:[a,0,n],rotation:[0,0,0],ref:t},s.a.createElement("planeGeometry",{args:[1.2,1.2]}),s.a.createElement("meshBasicMaterial",{map:o,side:E.DoubleSide}))}),z=s.a.forwardRef(function(e,t){var n=Object(l.useState)([]),a=Object(f.a)(n,2),o=a[0],r=a[1],i=Object(l.useState)(0),c=Object(f.a)(i,2),u=c[0],m=c[1],p=Object(l.useRef)(),h=Object(l.useRef)({elapsedTime:0,delta:0});return Object(d.b)(function(e){var n,a,i=e.clock;if(h.current.delta=i.getElapsedTime()-h.current.elapsedTime,t.current){h.current.delta>=.05&&(h.current.elapsedTime=i.getElapsedTime(),m(function(e){return e+1}),r(function(e){return e.map(function(e){return{z:e.z-1,side:e.side}})}));var c=p.current?p.current.position.z:0;if(o.length<5||u%5>c){var l={z:c+(n=10,a=50,Math.floor(Math.random()*(a-n))+n),side:Math.floor(3*Math.random())-1};r(function(e){return[].concat(Object(T.a)(e),[l])})}o.length>5&&r(function(e){return e.slice(1)})}}),s.a.createElement(s.a.Fragment,null,o.map(function(e,t){var n=e.z,a=e.side;return s.a.createElement(A,{key:t,positionZ:n,side:a,ref:t===o.length-1?p:void 0})}))}),I=s.a.forwardRef(function(e,t){var n=e.positionZ;return s.a.createElement("mesh",{position:[0,-.52,n],rotation:[Math.PI/2,0,0],ref:t},s.a.createElement("planeGeometry",{args:[.1,5]}),s.a.createElement("meshBasicMaterial",{color:16777215,side:E.DoubleSide}))}),C=s.a.forwardRef(function(e,t){var n=Object(l.useState)([]),a=Object(f.a)(n,2),o=a[0],r=a[1],i=Object(l.useState)(0),c=Object(f.a)(i,2),u=c[0],m=c[1],p=Object(l.useRef)(),h=Object(l.useRef)({elapsedTime:0,delta:0});return Object(d.b)(function(e){var n=e.clock;if(h.current.delta=n.getElapsedTime()-h.current.elapsedTime,t.current){h.current.delta>=.05&&(h.current.elapsedTime=n.getElapsedTime(),m(function(e){return e+1}),r(function(e){return e.map(function(e){return e-1})}));var a=p.current?p.current.position.z:0;if(o.length<5||u%5>a){var i=a+20;r(function(e){return[].concat(Object(T.a)(e),[i])})}o.length>5&&r(function(e){return e.slice(1)})}}),s.a.createElement(s.a.Fragment,null,o.map(function(e,t){return s.a.createElement(I,{key:t,positionZ:e,ref:t===o.length-1?p:void 0})}))}),F=function(){var e=Object(l.useRef)();return s.a.createElement(d.a,{shadows:!0,dpr:[1,2],camera:{position:k.cameraPosition,fov:50},performance:{min:.1}},s.a.createElement(O,null),s.a.createElement(P,{config:k}),s.a.createElement(C,{ref:e}),s.a.createElement(z,{ref:e}),s.a.createElement(l.Suspense,{fallback:null},s.a.createElement(M,{animation:"walk",speed:"3",scale:k.model.scale,meshColorIndex:k.meshColorIndex,meshScale:k.meshScale,model:k.model,ref:e}),s.a.createElement(h.b,{multisampling:16},s.a.createElement(h.a,{kernelSize:k.bloom.kernelSize,luminanceThreshold:k.bloom.luminanceThreshold,luminanceSmoothing:k.bloom.luminanceSmoothing,intensity:k.bloom.intensity}))),s.a.createElement(p.a,{minPolarAngle:Math.PI/2.8,maxPolarAngle:Math.PI/1.8}))},B=function(){var e=Object(l.useState)(!0),t=Object(f.a)(e,2),n=t[0],a=t[1];Object(l.useEffect)(function(){var e=function(e){"Enter"===e.key&&a(!1)};return document.addEventListener("keydown",e),function(){document.removeEventListener("keydown",e)}},[]);var o=Object(l.useRef)();return n?s.a.createElement(s.a.Fragment,null,s.a.createElement(d.a,{shadows:!0,dpr:[1,2],camera:{position:[3,1,3],fov:50},performance:{min:.1}},s.a.createElement(P,{config:k}),s.a.createElement(l.Suspense,{fallback:null},s.a.createElement(M,{animation:"idle",speed:"1",position:[0,.2,0],scale:k.model.scale,meshColorIndex:k.meshColorIndex,meshScale:k.meshScale,model:k.model,ref:o}),s.a.createElement(h.b,{multisampling:16},s.a.createElement(h.a,{kernelSize:k.bloom.kernelSize,luminanceThreshold:k.bloom.luminanceThreshold,luminanceSmoothing:k.bloom.luminanceSmoothing,intensity:k.bloom.intensity}))),s.a.createElement(p.a,{minPolarAngle:Math.PI/2.8,maxPolarAngle:Math.PI/1.8})),g.a.createPortal(s.a.createElement(Z,null,s.a.createElement(_,null,"canary in a meme mine"),s.a.createElement(G,null,"press enter to start")),document.body)):s.a.createElement(F,null)},D=Object(j.b)(y||(y=Object(m.a)(["\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n"]))),Z=j.a.div(v||(v=Object(m.a)(["\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n"]))),_=j.a.h1(w||(w=Object(m.a)(["\n color: #fff;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n"]))),G=j.a.h2(x||(x=Object(m.a)(["\n color: #fff;\n margin-top: 100px;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n animation: "," 1500ms linear infinite;\n"])),D),H=(n(60),function(e){function t(){return Object(a.a)(this,t),Object(r.a)(this,Object(i.a)(t).apply(this,arguments))}return Object(c.a)(t,e),Object(o.a)(t,[{key:"render",value:function(){return s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{className:"App",style:{display:"flex",flexDirection:"column",alignItems:"center",height:"100%"}},s.a.createElement(B,null)))}}]),t}(s.a.Component)),J=document.getElementById("root");Object(u.createRoot)(J).render(s.a.createElement(H,null))}},[[44,2,1]]]); -//# sourceMappingURL=main.34083205.chunk.js.map \ No newline at end of file diff --git a/static/js/main.34083205.chunk.js.map b/static/js/main.34083205.chunk.js.map deleted file mode 100644 index f3f6661..0000000 --- a/static/js/main.34083205.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["components/CameraController.js","config.js","components/Canary.js","components/Lights.js","components/Obstacle.js","components/Path.js","lib/Game.js","lib/StartScreen.js","index.js"],"names":["CameraController","_useThree","useThree","camera","set","_useState","useState","_useState2","Object","slicedToArray","is2D","setIs2D","perspCamera","THREE","useEffect","toggleCamera","event","code","window","addEventListener","removeEventListener","position","lookAt","useFrame","updateProjectionMatrix","canaryConfig","objectUrl","hop","concat","process","idle","walk","nodeCoords","nodeSigns","nodeScale","nodeGroupScale","meshColorIndex","meshScale","debug","model","material","scale","metalness","roughness","opacity","color","gridPosition","cameraPosition","pointColorIndex","primary","hovered","active","pointLight","intensity","distance","bloom","kernelSize","luminanceThreshold","luminanceSmoothing","glitch","delay","duration","strength","lights","front","left","right","brandPalette","ciano","magenta","white","black","Canary","React","forwardRef","props","ref","initialPosition","setPosition","_useState3","_useState4","isJumping","setIsJumping","glb","animation","_useGLTF","useGLTF","scene","nodes","materials","animations","mixerRef","useRef","current","forEach","clip","action","clipAction","timeScale","speed","play","stopAllAction","handleKeyDown","key","prevPosition","_","delta","update","newY","Math","max","useLayoutEffect","canary","traverse","obj","type","receiveShadow","castShadow","assign","wireframe","moughness","react_default","a","createElement","object","Lights","_ref","config","groupL","groupR","lightL","lightR","lightF","state","t","clock","getElapsedTime","currentPosition","parseInt","random","x","sin","y","cos","z","useHelper","Fragment","ObstacleSegment","positionZ","side","texture","useLoader","TextureLoader","rotation","args","map","Obstacle","playerRef","obstacles","setObstacles","gamePosition","setGamePosition","lastSegmentRef","clockRef","elapsedTime","min","prevObstacles","segment","lastSegmentZ","length","newSegmentZ","floor","toConsumableArray","slice","_ref2","index","undefined","PathSegment","PI","Path","segments","setSegments","prevSegments","Game","react_three_fiber_esm","shadows","dpr","fov","performance","Lights_Lights","react","fallback","dist","multisampling","OrbitControls","minPolarAngle","maxPolarAngle","StartScreen","showStartScreen","setShowStartScreen","handleKeyPress","document","ReactDOM","createPortal","OverlayContainer","Title","Subtitle","body","Game_Game","blinkAnimation","keyframes","_templateObject","taggedTemplateLiteral","styled","div","_templateObject2","h1","_templateObject3","h2","_templateObject4","App","className","style","display","flexDirection","alignItems","height","StartScreen_StartScreen","Component","rootElement","getElementById","createRoot","render","src_App"],"mappings":"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","file":"static/js/main.34083205.chunk.js","sourcesContent":["import { useThree, useFrame } from '@react-three/fiber'\nimport { useState, useEffect } from 'react'\nimport * as THREE from 'three'\n\nfunction CameraController() {\n const { camera, set } = useThree()\n const [is2D, setIs2D] = useState(false)\n const perspCamera = new THREE.PerspectiveCamera(50, 16 / 9, 0.1, 1000)\n\n useEffect(() => {\n const toggleCamera = event => {\n if (event.code === 'Space') {\n setIs2D(!is2D)\n }\n }\n\n window.addEventListener('keydown', toggleCamera)\n\n return () => {\n window.removeEventListener('keydown', toggleCamera)\n }\n }, [is2D])\n\n useEffect(() => {\n if (is2D) {\n perspCamera.position.set(-20, 0, 0)\n perspCamera.lookAt(20, 0, 0)\n set({ camera: perspCamera })\n } else {\n perspCamera.position.set(0, 0.8, -3)\n perspCamera.lookAt(0, 0, 0)\n set({ camera: perspCamera })\n }\n }, [is2D])\n\n useFrame(() => {\n camera.lookAt(-100, 200, 500)\n camera.updateProjectionMatrix()\n })\n\n return null\n}\n\nexport { CameraController }\n","const canaryConfig = {\n objectUrl: {\n hop: `${process.env.PUBLIC_URL}/assets/canary_hop.glb`,\n idle: `${process.env.PUBLIC_URL}/assets/canary_idle.glb`,\n walk: `${process.env.PUBLIC_URL}/assets/canary_walk.glb`\n },\n nodeCoords: 'canary.geometry.attributes.position',\n nodeSigns: [1, -1, -1],\n nodeScale: 2.5,\n nodeGroupScale: 0.02,\n meshColorIndex: 'ciano',\n meshScale: 1,\n debug: false,\n model: {\n material: 'Default_OBJ',\n scale: 0.02,\n metalness: 0.2,\n roughness: 2,\n opacity: 1,\n color: 'white'\n },\n gridPosition: [0, -0.52, 0.28],\n cameraPosition: [-20, 0, 0],\n pointColorIndex: {\n primary: 'ciano',\n hovered: 'magenta',\n active: 'magenta'\n },\n pointLight: {\n position: [0, 0, 0],\n intensity: [2, 2, 2],\n distance: 15,\n color: ['ciano', 'magenta', 'magenta']\n },\n bloom: {\n kernelSize: 1,\n luminanceThreshold: 0.1,\n luminanceSmoothing: 0.05,\n intensity: 0.1\n },\n glitch: {\n delay: [20, 30],\n duration: [0.3, 0.5],\n strength: [0.1, 0.3]\n },\n lights: {\n front: {\n color: 'ciano'\n },\n left: {\n color: 'white'\n },\n right: {\n color: 'magenta'\n }\n }\n}\n\nconst brandPalette = {\n ciano: '#01ffff',\n magenta: '#e6007a',\n white: '#ffffff',\n black: '#000000'\n}\n\nexport { brandPalette, canaryConfig }\n","import { useGLTF } from '@react-three/drei'\nimport { useFrame } from '@react-three/fiber'\nimport React, { useState, useRef, useEffect, useLayoutEffect } from 'react'\nimport * as THREE from 'three'\nimport { brandPalette, canaryConfig } from '../config'\n\nconst Canary = React.forwardRef((props, ref) => {\n const initialPosition = props.position ? props.position : [0, 0, 0]\n const [position, setPosition] = useState(initialPosition)\n const [isJumping, setIsJumping] = useState(false)\n\n const glb = canaryConfig.objectUrl[props.animation]\n const { scene, nodes, materials, animations } = useGLTF(glb)\n\n const mixerRef = useRef()\n\n useEffect(() => {\n if (ref.current) {\n mixerRef.current = new THREE.AnimationMixer(ref.current)\n }\n }, [ref])\n\n useEffect(() => {\n if (mixerRef.current && animations) {\n animations.forEach(clip => {\n const action = mixerRef.current.clipAction(clip)\n action.timeScale = props.speed\n action.play()\n })\n }\n\n return () => {\n if (mixerRef.current) {\n mixerRef.current.stopAllAction()\n }\n }\n }, [animations])\n\n useEffect(() => {\n const handleKeyDown = event => {\n if (event.key === 'ArrowRight') {\n setPosition(prevPosition => [prevPosition[0] - 1, prevPosition[1], prevPosition[2]])\n } else if (event.key === 'ArrowLeft') {\n setPosition(prevPosition => [prevPosition[0] + 1, prevPosition[1], prevPosition[2]])\n }\n if (event.key === 'ArrowUp' && !isJumping && position[1] === 0) {\n setIsJumping(true)\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [position])\n\n useFrame((_, delta) => {\n if (mixerRef.current) {\n mixerRef.current.update(delta)\n }\n\n if (isJumping) {\n // Simple jump animation: move up then down\n setPosition(prevPosition => {\n const newY = prevPosition[1] + delta * 10\n // Check if the model has reached the peak of the jump\n if (newY >= 2) {\n setIsJumping(false) // Start falling\n }\n return [prevPosition[0], newY <= 0 ? 0 : newY, prevPosition[2]] // Reset Y position after jump\n })\n } else {\n // Bring the model back down if it's in the air\n setPosition(prevPosition => [prevPosition[0], Math.max(0, prevPosition[1] - delta * 10), prevPosition[2]])\n }\n })\n\n useLayoutEffect(() => {\n if (props.meshScale) {\n if (nodes.canary) {\n nodes.canary.scale.set(4, 4, 4)\n }\n }\n\n scene.traverse(obj => {\n obj.type === 'Mesh' && (obj.receiveShadow = obj.castShadow = true)\n })\n\n Object.assign(materials[props.model.material], {\n wireframe: false,\n metalness: props.model.metalness,\n roughness: props.model.moughness,\n opacity: props.model.opacity,\n color: new THREE.Color(brandPalette[props.model.color])\n })\n }, [scene, nodes, materials])\n\n return (\n \n \n \n )\n})\n\nexport { Canary }\n","/* eslint-disable react/no-unknown-property */\n/* eslint-disable react/prop-types */\nimport { useHelper } from '@react-three/drei'\nimport { useFrame } from '@react-three/fiber'\nimport React, { useRef } from 'react'\nimport * as THREE from 'three'\nimport { brandPalette } from '../config'\n\nconst Lights = ({ config }) => {\n const groupL = useRef()\n const groupR = useRef()\n const front = useRef()\n const lightL = useRef()\n const lightR = useRef()\n const lightF = useRef()\n\n useFrame(state => {\n const t = state.clock.getElapsedTime()\n\n // storm effect\n let currentPosition = 15\n if (parseInt(t) % 4 === 1) {\n currentPosition = (Math.random() * 15) | 0\n }\n\n groupL.current.position.x = (Math.sin(t) / 4) * currentPosition\n groupL.current.position.y = (Math.cos(t) / 4) * currentPosition\n groupL.current.position.z = (Math.cos(t) / 4) * currentPosition\n\n groupR.current.position.x = (Math.cos(t) / 4) * 10\n groupR.current.position.y = (Math.sin(t) / 4) * 10\n groupR.current.position.z = (Math.sin(t) / 4) * 10\n\n front.current.position.x = (Math.sin(t) / 4) * 10\n front.current.position.y = (Math.cos(t) / 4) * 10\n front.current.position.z = (Math.sin(t) / 4) * 10\n })\n\n if (config.debug === true) {\n useHelper(lightL, THREE.PointLightHelper)\n useHelper(lightR, THREE.PointLightHelper)\n useHelper(lightF, THREE.PointLightHelper)\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { Lights }\n","import { useLoader, useFrame } from '@react-three/fiber'\nimport React, { useState, useRef } from 'react'\nimport * as THREE from 'three'\nimport { TextureLoader } from 'three'\n\nconst random = (min, max) => Math.floor(Math.random() * (max - min)) + min\n\nconst ObstacleSegment = React.forwardRef(({ positionZ, side }, ref) => {\n const texture = useLoader(TextureLoader, `${process.env.PUBLIC_URL}/assets/sbf.jpeg`)\n\n return (\n \n \n \n \n )\n})\n\nconst Obstacle = React.forwardRef((_, playerRef) => {\n const [obstacles, setObstacles] = useState([])\n const [gamePosition, setGamePosition] = useState(0)\n\n const visibleObstacles = 5\n const lastSegmentRef = useRef()\n const clockRef = useRef({ elapsedTime: 0, delta: 0 })\n\n useFrame(state => {\n const { clock } = state\n clockRef.current.delta = clock.getElapsedTime() - clockRef.current.elapsedTime\n\n if (playerRef.current) {\n if (clockRef.current.delta >= 0.05) {\n clockRef.current.elapsedTime = clock.getElapsedTime()\n setGamePosition(gamePosition => gamePosition + 1)\n setObstacles(prevObstacles => prevObstacles.map(segment => ({ z: segment.z - 1, side: segment.side })))\n }\n\n const lastSegmentZ = lastSegmentRef.current ? lastSegmentRef.current.position.z : 0\n\n if (obstacles.length < visibleObstacles || gamePosition % visibleObstacles > lastSegmentZ) {\n const segmentGap = random(10, 50)\n const Obstacleside = Math.floor(Math.random() * 3) - 1\n const newSegmentZ = { z: lastSegmentZ + segmentGap, side: Obstacleside }\n setObstacles(prevObstacles => [...prevObstacles, newSegmentZ])\n }\n\n if (obstacles.length > visibleObstacles) {\n setObstacles(prevObstacles => prevObstacles.slice(1))\n }\n }\n })\n\n return (\n <>\n {obstacles.map(({ z, side }, index) => (\n \n ))}\n \n )\n})\n\nexport { Obstacle }\n","import { useFrame } from '@react-three/fiber'\nimport React, { useState, useRef } from 'react'\nimport * as THREE from 'three'\n\nconst PathSegment = React.forwardRef(({ positionZ }, ref) => {\n return (\n \n \n \n \n )\n})\n\nconst Path = React.forwardRef((_, playerRef) => {\n const [segments, setSegments] = useState([])\n const [gamePosition, setGamePosition] = useState(0)\n\n const visibleSegments = 5\n const lastSegmentRef = useRef()\n const clockRef = useRef({ elapsedTime: 0, delta: 0 })\n\n useFrame(state => {\n const { clock } = state\n clockRef.current.delta = clock.getElapsedTime() - clockRef.current.elapsedTime\n\n if (playerRef.current) {\n if (clockRef.current.delta >= 0.05) {\n clockRef.current.elapsedTime = clock.getElapsedTime()\n setGamePosition(gamePosition => gamePosition + 1)\n setSegments(prevSegments => prevSegments.map(segment => segment - 1))\n }\n\n const lastSegmentZ = lastSegmentRef.current ? lastSegmentRef.current.position.z : 0\n\n // Generate new segments if needed\n if (segments.length < visibleSegments || gamePosition % visibleSegments > lastSegmentZ) {\n const segmentGap = 20\n const newSegmentZ = lastSegmentZ + segmentGap\n setSegments(prevSegments => [...prevSegments, newSegmentZ])\n }\n\n // Remove segments that are far behind the player\n if (segments.length > visibleSegments) {\n setSegments(prevSegments => prevSegments.slice(1))\n }\n }\n })\n\n return (\n <>\n {segments.map((z, index) => (\n \n ))}\n \n )\n})\n\nexport { Path }\n","import { OrbitControls } from '@react-three/drei'\nimport { Canvas } from '@react-three/fiber'\nimport { EffectComposer, Bloom } from '@react-three/postprocessing'\nimport React, { useRef, Suspense } from 'react'\nimport { CameraController } from '../components/CameraController'\nimport { Canary } from '../components/Canary'\nimport { Lights } from '../components/Lights'\nimport { Obstacle } from '../components/Obstacle'\nimport { Path } from '../components/Path'\nimport { canaryConfig as config } from '../config'\n\nconst Game = () => {\n const playerRef = useRef()\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\nexport { Game }\n","import { OrbitControls } from '@react-three/drei'\nimport { Canvas } from '@react-three/fiber'\nimport { EffectComposer, Bloom } from '@react-three/postprocessing'\nimport React, { useState, useEffect, useRef, Suspense } from 'react'\nimport ReactDOM from 'react-dom'\nimport styled, { keyframes } from 'styled-components'\nimport { Game } from './Game'\nimport { Canary } from '../components/Canary'\nimport { Lights } from '../components/Lights'\nimport { canaryConfig as config } from '../config'\n\nconst StartScreen = () => {\n const [showStartScreen, setShowStartScreen] = useState(true)\n\n useEffect(() => {\n const handleKeyPress = event => {\n if (event.key === 'Enter') {\n setShowStartScreen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyPress)\n\n return () => {\n document.removeEventListener('keydown', handleKeyPress)\n }\n }, [])\n\n const playerRef = useRef()\n\n return showStartScreen ? (\n <>\n \n \n\n \n \n\n \n \n \n \n\n \n \n {ReactDOM.createPortal(\n \n canary in a meme mine\n press enter to start\n ,\n document.body\n )}\n \n ) : (\n \n )\n}\n\nconst blinkAnimation = keyframes`\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n`\n\nconst OverlayContainer = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n`\n\nconst Title = styled.h1`\n color: #fff;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n`\n\nconst Subtitle = styled.h2`\n color: #fff;\n margin-top: 100px;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n animation: ${blinkAnimation} 1500ms linear infinite;\n`\n\nexport { StartScreen }\n","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { StartScreen } from './lib/StartScreen'\n\nimport './styles.css'\n\nclass App extends React.Component {\n render() {\n return (\n <>\n \n \n \n \n )\n }\n}\n\nconst rootElement = document.getElementById('root')\nconst root = createRoot(rootElement)\nroot.render()\n"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.4f81cb4a.chunk.js b/static/js/main.4f81cb4a.chunk.js new file mode 100644 index 0000000..3aee38a --- /dev/null +++ b/static/js/main.4f81cb4a.chunk.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{44:function(e,t,n){e.exports=n(62)},60:function(e,t,n){},62:function(e,t,n){"use strict";n.r(t);var a=n(2),o=n(3),r=n(5),i=n(1),c=n(6),l=n(4),s=n.n(l),u=n(36),m=n(21),f=n(9),p=n(65),d=n(10),h=n(18),b=n(30),g=n.n(b),j=n(23),E=n(0);function O(){var e=Object(d.d)(),t=e.camera,n=e.set,a=Object(l.useState)(!1),o=Object(f.a)(a,2),r=o[0],i=o[1],c=new E.PerspectiveCamera(50,16/9,.1,1e3);return Object(l.useEffect)(function(){var e=function(e){"Space"===e.code&&i(!r)};return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[r]),Object(l.useEffect)(function(){r?(c.position.set(-20,0,0),c.lookAt(20,0,0),n({camera:c})):(c.position.set(0,.8,-3),c.lookAt(0,0,0),n({camera:c}))},[r]),Object(d.b)(function(){t.lookAt(-100,200,500),t.updateProjectionMatrix()}),null}var y=n(66),v={objectUrl:{hop:"canary_hop.glb",idle:"canary_idle.glb",walk:"canary_walk.glb"},nodeCoords:"canary.geometry.attributes.position",nodeSigns:[1,-1,-1],nodeScale:2.5,nodeGroupScale:.02,meshColorIndex:"ciano",meshScale:1,debug:!1,model:{material:"Default_OBJ",scale:.02,metalness:.2,roughness:2,opacity:1,color:"white"},gridPosition:[0,-.52,.28],cameraPosition:[-20,0,0],pointColorIndex:{primary:"ciano",hovered:"magenta",active:"magenta"},pointLight:{position:[0,0,0],intensity:[2,2,2],distance:15,color:["ciano","magenta","magenta"]},bloom:{kernelSize:1,luminanceThreshold:.1,luminanceSmoothing:.05,intensity:.1},glitch:{delay:[20,30],duration:[.3,.5],strength:[.1,.3]},lights:{front:{color:"ciano"},left:{color:"white"},right:{color:"magenta"}}},w={ciano:"#01ffff",magenta:"#e6007a",white:"#ffffff",black:"#000000"};function x(e){return"".concat("/meme-mine","/assets/").concat(e)}var S,k,L,M,R=s.a.forwardRef(function(e,t){var n=e.position?e.position:[0,0,0],a=Object(l.useState)(n),o=Object(f.a)(a,2),r=o[0],i=o[1],c=Object(l.useState)(!1),u=Object(f.a)(c,2),m=u[0],p=u[1],h=v.objectUrl[e.animation],b=Object(y.a)(x(h)),g=b.scene,j=b.nodes,O=b.materials,S=b.animations,k=Object(l.useRef)();return Object(l.useEffect)(function(){t.current&&(k.current=new E.AnimationMixer(t.current))},[t]),Object(l.useEffect)(function(){return k.current&&S&&S.forEach(function(t){var n=k.current.clipAction(t);n.timeScale=e.speed,n.play()}),function(){k.current&&k.current.stopAllAction()}},[S]),Object(l.useEffect)(function(){var e=function(e){"ArrowRight"===e.key?i(function(e){return[e[0]-1,e[1],e[2]]}):"ArrowLeft"===e.key&&i(function(e){return[e[0]+1,e[1],e[2]]}),"ArrowUp"!==e.key||m||0!==r[1]||p(!0)};return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[r]),Object(d.b)(function(e,t){k.current&&k.current.update(t),i(m?function(e){var n=e[1]+10*t;return n>=2&&p(!1),[e[0],n<=0?0:n,e[2]]}:function(e){return[e[0],Math.max(0,e[1]-10*t),e[2]]})}),Object(l.useLayoutEffect)(function(){e.meshScale&&j.canary&&j.canary.scale.set(4,4,4),g.traverse(function(e){"Mesh"===e.type&&(e.receiveShadow=e.castShadow=!0)}),Object.assign(O[e.model.material],{wireframe:!1,metalness:e.model.metalness,roughness:e.model.moughness,opacity:e.model.opacity,color:new E.Color(w[e.model.color])})},[g,j,O]),s.a.createElement("mesh",{position:r},s.a.createElement("primitive",Object.assign({ref:t,object:g},e)))}),P=n(64),T=function(e){var t=e.config,n=Object(l.useRef)(),a=Object(l.useRef)(),o=Object(l.useRef)(),r=Object(l.useRef)(),i=Object(l.useRef)(),c=Object(l.useRef)();return Object(d.b)(function(e){var t=e.clock.getElapsedTime(),r=15;parseInt(t)%4===1&&(r=15*Math.random()|0),n.current.position.x=Math.sin(t)/4*r,n.current.position.y=Math.cos(t)/4*r,n.current.position.z=Math.cos(t)/4*r,a.current.position.x=Math.cos(t)/4*10,a.current.position.y=Math.sin(t)/4*10,a.current.position.z=Math.sin(t)/4*10,o.current.position.x=Math.sin(t)/4*10,o.current.position.y=Math.cos(t)/4*10,o.current.position.z=Math.sin(t)/4*10}),!0===t.debug&&(Object(P.a)(r,E.PointLightHelper),Object(P.a)(i,E.PointLightHelper),Object(P.a)(c,E.PointLightHelper)),s.a.createElement(s.a.Fragment,null,s.a.createElement("group",{ref:n},s.a.createElement("pointLight",{ref:r,color:w[t.pointLight.color[0]],position:t.pointLight.position,distance:t.pointLight.distance,intensity:t.pointLight.intensity[0]})),s.a.createElement("group",{ref:a},s.a.createElement("pointLight",{ref:i,color:w[t.pointLight.color[1]],position:t.pointLight.position,distance:t.pointLight.distance,intensity:t.pointLight.intensity[1]})),s.a.createElement("group",{ref:o},s.a.createElement("pointLight",{ref:c,color:w[t.pointLight.color[2]],position:t.pointLight.position,distance:t.pointLight.distance,intensity:t.pointLight.intensity[2]})))},A=n(13),z=s.a.forwardRef(function(e,t){var n=e.positionZ,a=e.side,o=Object(d.c)(E.TextureLoader,x("sbf.jpeg"));return s.a.createElement("mesh",{position:[a,0,n],rotation:[0,0,0],ref:t},s.a.createElement("planeGeometry",{args:[1.2,1.2]}),s.a.createElement("meshBasicMaterial",{map:o,side:E.DoubleSide}))}),I=s.a.forwardRef(function(e,t){var n=Object(l.useState)([]),a=Object(f.a)(n,2),o=a[0],r=a[1],i=Object(l.useState)(0),c=Object(f.a)(i,2),u=c[0],m=c[1],p=Object(l.useRef)(),h=Object(l.useRef)({elapsedTime:0,delta:0});return Object(d.b)(function(e){var n,a,i=e.clock;if(h.current.delta=i.getElapsedTime()-h.current.elapsedTime,t.current){h.current.delta>=.05&&(h.current.elapsedTime=i.getElapsedTime(),m(function(e){return e+1}),r(function(e){return e.map(function(e){return{z:e.z-1,side:e.side}})}));var c=p.current?p.current.position.z:0;if(o.length<5||u%5>c){var l={z:c+(n=10,a=50,Math.floor(Math.random()*(a-n))+n),side:Math.floor(3*Math.random())-1};r(function(e){return[].concat(Object(A.a)(e),[l])})}o.length>5&&r(function(e){return e.slice(1)})}}),s.a.createElement(s.a.Fragment,null,o.map(function(e,t){var n=e.z,a=e.side;return s.a.createElement(z,{key:t,positionZ:n,side:a,ref:t===o.length-1?p:void 0})}))}),C=s.a.forwardRef(function(e,t){var n=e.positionZ;return s.a.createElement("mesh",{position:[0,-.52,n],rotation:[Math.PI/2,0,0],ref:t},s.a.createElement("planeGeometry",{args:[.1,5]}),s.a.createElement("meshBasicMaterial",{color:16777215,side:E.DoubleSide}))}),F=s.a.forwardRef(function(e,t){var n=Object(l.useState)([]),a=Object(f.a)(n,2),o=a[0],r=a[1],i=Object(l.useState)(0),c=Object(f.a)(i,2),u=c[0],m=c[1],p=Object(l.useRef)(),h=Object(l.useRef)({elapsedTime:0,delta:0});return Object(d.b)(function(e){var n=e.clock;if(h.current.delta=n.getElapsedTime()-h.current.elapsedTime,t.current){h.current.delta>=.05&&(h.current.elapsedTime=n.getElapsedTime(),m(function(e){return e+1}),r(function(e){return e.map(function(e){return e-1})}));var a=p.current?p.current.position.z:0;if(o.length<5||u%5>a){var i=a+20;r(function(e){return[].concat(Object(A.a)(e),[i])})}o.length>5&&r(function(e){return e.slice(1)})}}),s.a.createElement(s.a.Fragment,null,o.map(function(e,t){return s.a.createElement(C,{key:t,positionZ:e,ref:t===o.length-1?p:void 0})}))}),B=function(){var e=Object(l.useRef)();return s.a.createElement(d.a,{shadows:!0,dpr:[1,2],camera:{position:v.cameraPosition,fov:50},performance:{min:.1}},s.a.createElement(O,null),s.a.createElement(T,{config:v}),s.a.createElement(F,{ref:e}),s.a.createElement(I,{ref:e}),s.a.createElement(l.Suspense,{fallback:null},s.a.createElement(R,{animation:"walk",speed:"3",scale:v.model.scale,meshColorIndex:v.meshColorIndex,meshScale:v.meshScale,model:v.model,ref:e}),s.a.createElement(h.b,{multisampling:16},s.a.createElement(h.a,{kernelSize:v.bloom.kernelSize,luminanceThreshold:v.bloom.luminanceThreshold,luminanceSmoothing:v.bloom.luminanceSmoothing,intensity:v.bloom.intensity}))),s.a.createElement(p.a,{minPolarAngle:Math.PI/2.8,maxPolarAngle:Math.PI/1.8}))},D=function(){var e=Object(l.useState)(!0),t=Object(f.a)(e,2),n=t[0],a=t[1];Object(l.useEffect)(function(){var e=function(e){"Enter"===e.key&&a(!1)};return document.addEventListener("keydown",e),function(){document.removeEventListener("keydown",e)}},[]);var o=Object(l.useRef)();return n?s.a.createElement(s.a.Fragment,null,s.a.createElement(d.a,{shadows:!0,dpr:[1,2],camera:{position:[3,1,3],fov:50},performance:{min:.1}},s.a.createElement(T,{config:v}),s.a.createElement(l.Suspense,{fallback:null},s.a.createElement(R,{animation:"idle",speed:"1",position:[0,.2,0],scale:v.model.scale,meshColorIndex:v.meshColorIndex,meshScale:v.meshScale,model:v.model,ref:o}),s.a.createElement(h.b,{multisampling:16},s.a.createElement(h.a,{kernelSize:v.bloom.kernelSize,luminanceThreshold:v.bloom.luminanceThreshold,luminanceSmoothing:v.bloom.luminanceSmoothing,intensity:v.bloom.intensity}))),s.a.createElement(p.a,{minPolarAngle:Math.PI/2.8,maxPolarAngle:Math.PI/1.8})),g.a.createPortal(s.a.createElement(_,null,s.a.createElement(G,null,"canary in a meme mine"),s.a.createElement(H,null,"press enter to start")),document.body)):s.a.createElement(B,null)},Z=Object(j.b)(S||(S=Object(m.a)(["\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n"]))),_=j.a.div(k||(k=Object(m.a)(["\n position: absolute;\n top: 25px;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n"]))),G=j.a.h1(L||(L=Object(m.a)(["\n color: #fff;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n"]))),H=j.a.h2(M||(M=Object(m.a)(["\n color: #fff;\n margin-top: 125px;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n animation: "," 1500ms linear infinite;\n"])),Z),J=(n(60),function(e){function t(){return Object(a.a)(this,t),Object(r.a)(this,Object(i.a)(t).apply(this,arguments))}return Object(c.a)(t,e),Object(o.a)(t,[{key:"render",value:function(){return s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{className:"App",style:{display:"flex",flexDirection:"column",alignItems:"center",height:"100%"}},s.a.createElement(D,null)))}}]),t}(s.a.Component)),U=document.getElementById("root");Object(u.createRoot)(U).render(s.a.createElement(J,null))}},[[44,2,1]]]); +//# sourceMappingURL=main.4f81cb4a.chunk.js.map \ No newline at end of file diff --git a/static/js/main.4f81cb4a.chunk.js.map b/static/js/main.4f81cb4a.chunk.js.map new file mode 100644 index 0000000..3dcd345 --- /dev/null +++ b/static/js/main.4f81cb4a.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["components/CameraController.js","config.js","helpers/url.js","components/Canary.js","components/Lights.js","components/Obstacle.js","components/Path.js","lib/Game.js","lib/StartScreen.js","index.js"],"names":["CameraController","_useThree","useThree","camera","set","_useState","useState","_useState2","Object","slicedToArray","is2D","setIs2D","perspCamera","THREE","useEffect","toggleCamera","event","code","window","addEventListener","removeEventListener","position","lookAt","useFrame","updateProjectionMatrix","canaryConfig","objectUrl","hop","idle","walk","nodeCoords","nodeSigns","nodeScale","nodeGroupScale","meshColorIndex","meshScale","debug","model","material","scale","metalness","roughness","opacity","color","gridPosition","cameraPosition","pointColorIndex","primary","hovered","active","pointLight","intensity","distance","bloom","kernelSize","luminanceThreshold","luminanceSmoothing","glitch","delay","duration","strength","lights","front","left","right","brandPalette","ciano","magenta","white","black","assetURL","path","concat","process","Canary","React","forwardRef","props","ref","initialPosition","setPosition","_useState3","_useState4","isJumping","setIsJumping","glb","animation","_useGLTF","useGLTF","scene","nodes","materials","animations","mixerRef","useRef","current","forEach","clip","action","clipAction","timeScale","speed","play","stopAllAction","handleKeyDown","key","prevPosition","_","delta","update","newY","Math","max","useLayoutEffect","canary","traverse","obj","type","receiveShadow","castShadow","assign","wireframe","moughness","react_default","a","createElement","object","Lights","_ref","config","groupL","groupR","lightL","lightR","lightF","state","t","clock","getElapsedTime","currentPosition","parseInt","random","x","sin","y","cos","z","useHelper","Fragment","ObstacleSegment","positionZ","side","texture","useLoader","TextureLoader","rotation","args","map","Obstacle","playerRef","obstacles","setObstacles","gamePosition","setGamePosition","lastSegmentRef","clockRef","elapsedTime","min","prevObstacles","segment","lastSegmentZ","length","newSegmentZ","floor","toConsumableArray","slice","_ref2","index","undefined","PathSegment","PI","Path","segments","setSegments","prevSegments","Game","react_three_fiber_esm","shadows","dpr","fov","performance","Lights_Lights","react","fallback","dist","multisampling","OrbitControls","minPolarAngle","maxPolarAngle","StartScreen","showStartScreen","setShowStartScreen","handleKeyPress","document","ReactDOM","createPortal","OverlayContainer","Title","Subtitle","body","Game_Game","blinkAnimation","keyframes","_templateObject","taggedTemplateLiteral","styled","div","_templateObject2","h1","_templateObject3","h2","_templateObject4","App","className","style","display","flexDirection","alignItems","height","StartScreen_StartScreen","Component","rootElement","getElementById","createRoot","render","src_App"],"mappings":"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","file":"static/js/main.4f81cb4a.chunk.js","sourcesContent":["import { useThree, useFrame } from '@react-three/fiber'\nimport { useState, useEffect } from 'react'\nimport * as THREE from 'three'\n\nfunction CameraController() {\n const { camera, set } = useThree()\n const [is2D, setIs2D] = useState(false)\n const perspCamera = new THREE.PerspectiveCamera(50, 16 / 9, 0.1, 1000)\n\n useEffect(() => {\n const toggleCamera = event => {\n if (event.code === 'Space') {\n setIs2D(!is2D)\n }\n }\n\n window.addEventListener('keydown', toggleCamera)\n\n return () => {\n window.removeEventListener('keydown', toggleCamera)\n }\n }, [is2D])\n\n useEffect(() => {\n if (is2D) {\n perspCamera.position.set(-20, 0, 0)\n perspCamera.lookAt(20, 0, 0)\n set({ camera: perspCamera })\n } else {\n perspCamera.position.set(0, 0.8, -3)\n perspCamera.lookAt(0, 0, 0)\n set({ camera: perspCamera })\n }\n }, [is2D])\n\n useFrame(() => {\n camera.lookAt(-100, 200, 500)\n camera.updateProjectionMatrix()\n })\n\n return null\n}\n\nexport { CameraController }\n","const canaryConfig = {\n objectUrl: {\n hop: 'canary_hop.glb',\n idle: 'canary_idle.glb',\n walk: 'canary_walk.glb'\n },\n nodeCoords: 'canary.geometry.attributes.position',\n nodeSigns: [1, -1, -1],\n nodeScale: 2.5,\n nodeGroupScale: 0.02,\n meshColorIndex: 'ciano',\n meshScale: 1,\n debug: false,\n model: {\n material: 'Default_OBJ',\n scale: 0.02,\n metalness: 0.2,\n roughness: 2,\n opacity: 1,\n color: 'white'\n },\n gridPosition: [0, -0.52, 0.28],\n cameraPosition: [-20, 0, 0],\n pointColorIndex: {\n primary: 'ciano',\n hovered: 'magenta',\n active: 'magenta'\n },\n pointLight: {\n position: [0, 0, 0],\n intensity: [2, 2, 2],\n distance: 15,\n color: ['ciano', 'magenta', 'magenta']\n },\n bloom: {\n kernelSize: 1,\n luminanceThreshold: 0.1,\n luminanceSmoothing: 0.05,\n intensity: 0.1\n },\n glitch: {\n delay: [20, 30],\n duration: [0.3, 0.5],\n strength: [0.1, 0.3]\n },\n lights: {\n front: {\n color: 'ciano'\n },\n left: {\n color: 'white'\n },\n right: {\n color: 'magenta'\n }\n }\n}\n\nconst brandPalette = {\n ciano: '#01ffff',\n magenta: '#e6007a',\n white: '#ffffff',\n black: '#000000'\n}\n\nexport { brandPalette, canaryConfig }\n","function assetURL(path) {\n const isDevelopment = process.env.NODE_ENV === 'development'\n const assetPrefix = isDevelopment ? '' : process.env.PUBLIC_URL\n\n return `${assetPrefix}/assets/${path}`\n}\n\nexport { assetURL }\n","import { useGLTF } from '@react-three/drei'\nimport { useFrame } from '@react-three/fiber'\nimport React, { useState, useRef, useEffect, useLayoutEffect } from 'react'\nimport * as THREE from 'three'\nimport { brandPalette, canaryConfig } from '../config'\nimport { assetURL } from '../helpers/url'\n\nconst Canary = React.forwardRef((props, ref) => {\n const initialPosition = props.position ? props.position : [0, 0, 0]\n const [position, setPosition] = useState(initialPosition)\n const [isJumping, setIsJumping] = useState(false)\n\n const glb = canaryConfig.objectUrl[props.animation]\n const { scene, nodes, materials, animations } = useGLTF(assetURL(glb))\n\n const mixerRef = useRef()\n\n useEffect(() => {\n if (ref.current) {\n mixerRef.current = new THREE.AnimationMixer(ref.current)\n }\n }, [ref])\n\n useEffect(() => {\n if (mixerRef.current && animations) {\n animations.forEach(clip => {\n const action = mixerRef.current.clipAction(clip)\n action.timeScale = props.speed\n action.play()\n })\n }\n\n return () => {\n if (mixerRef.current) {\n mixerRef.current.stopAllAction()\n }\n }\n }, [animations])\n\n useEffect(() => {\n const handleKeyDown = event => {\n if (event.key === 'ArrowRight') {\n setPosition(prevPosition => [prevPosition[0] - 1, prevPosition[1], prevPosition[2]])\n } else if (event.key === 'ArrowLeft') {\n setPosition(prevPosition => [prevPosition[0] + 1, prevPosition[1], prevPosition[2]])\n }\n if (event.key === 'ArrowUp' && !isJumping && position[1] === 0) {\n setIsJumping(true)\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [position])\n\n useFrame((_, delta) => {\n if (mixerRef.current) {\n mixerRef.current.update(delta)\n }\n\n if (isJumping) {\n // Simple jump animation: move up then down\n setPosition(prevPosition => {\n const newY = prevPosition[1] + delta * 10\n // Check if the model has reached the peak of the jump\n if (newY >= 2) {\n setIsJumping(false) // Start falling\n }\n return [prevPosition[0], newY <= 0 ? 0 : newY, prevPosition[2]] // Reset Y position after jump\n })\n } else {\n // Bring the model back down if it's in the air\n setPosition(prevPosition => [prevPosition[0], Math.max(0, prevPosition[1] - delta * 10), prevPosition[2]])\n }\n })\n\n useLayoutEffect(() => {\n if (props.meshScale) {\n if (nodes.canary) {\n nodes.canary.scale.set(4, 4, 4)\n }\n }\n\n scene.traverse(obj => {\n obj.type === 'Mesh' && (obj.receiveShadow = obj.castShadow = true)\n })\n\n Object.assign(materials[props.model.material], {\n wireframe: false,\n metalness: props.model.metalness,\n roughness: props.model.moughness,\n opacity: props.model.opacity,\n color: new THREE.Color(brandPalette[props.model.color])\n })\n }, [scene, nodes, materials])\n\n return (\n \n \n \n )\n})\n\nexport { Canary }\n","/* eslint-disable react/no-unknown-property */\n/* eslint-disable react/prop-types */\nimport { useHelper } from '@react-three/drei'\nimport { useFrame } from '@react-three/fiber'\nimport React, { useRef } from 'react'\nimport * as THREE from 'three'\nimport { brandPalette } from '../config'\n\nconst Lights = ({ config }) => {\n const groupL = useRef()\n const groupR = useRef()\n const front = useRef()\n const lightL = useRef()\n const lightR = useRef()\n const lightF = useRef()\n\n useFrame(state => {\n const t = state.clock.getElapsedTime()\n\n // storm effect\n let currentPosition = 15\n if (parseInt(t) % 4 === 1) {\n currentPosition = (Math.random() * 15) | 0\n }\n\n groupL.current.position.x = (Math.sin(t) / 4) * currentPosition\n groupL.current.position.y = (Math.cos(t) / 4) * currentPosition\n groupL.current.position.z = (Math.cos(t) / 4) * currentPosition\n\n groupR.current.position.x = (Math.cos(t) / 4) * 10\n groupR.current.position.y = (Math.sin(t) / 4) * 10\n groupR.current.position.z = (Math.sin(t) / 4) * 10\n\n front.current.position.x = (Math.sin(t) / 4) * 10\n front.current.position.y = (Math.cos(t) / 4) * 10\n front.current.position.z = (Math.sin(t) / 4) * 10\n })\n\n if (config.debug === true) {\n useHelper(lightL, THREE.PointLightHelper)\n useHelper(lightR, THREE.PointLightHelper)\n useHelper(lightF, THREE.PointLightHelper)\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { Lights }\n","import { useLoader, useFrame } from '@react-three/fiber'\nimport React, { useState, useRef } from 'react'\nimport * as THREE from 'three'\nimport { TextureLoader } from 'three'\nimport { assetURL } from '../helpers/url'\n\nconst random = (min, max) => Math.floor(Math.random() * (max - min)) + min\n\nconst ObstacleSegment = React.forwardRef(({ positionZ, side }, ref) => {\n const texture = useLoader(TextureLoader, assetURL('sbf.jpeg'))\n\n return (\n \n \n \n \n )\n})\n\nconst Obstacle = React.forwardRef((_, playerRef) => {\n const [obstacles, setObstacles] = useState([])\n const [gamePosition, setGamePosition] = useState(0)\n\n const visibleObstacles = 5\n const lastSegmentRef = useRef()\n const clockRef = useRef({ elapsedTime: 0, delta: 0 })\n\n useFrame(state => {\n const { clock } = state\n clockRef.current.delta = clock.getElapsedTime() - clockRef.current.elapsedTime\n\n if (playerRef.current) {\n if (clockRef.current.delta >= 0.05) {\n clockRef.current.elapsedTime = clock.getElapsedTime()\n setGamePosition(gamePosition => gamePosition + 1)\n setObstacles(prevObstacles => prevObstacles.map(segment => ({ z: segment.z - 1, side: segment.side })))\n }\n\n const lastSegmentZ = lastSegmentRef.current ? lastSegmentRef.current.position.z : 0\n\n if (obstacles.length < visibleObstacles || gamePosition % visibleObstacles > lastSegmentZ) {\n const segmentGap = random(10, 50)\n const Obstacleside = Math.floor(Math.random() * 3) - 1\n const newSegmentZ = { z: lastSegmentZ + segmentGap, side: Obstacleside }\n setObstacles(prevObstacles => [...prevObstacles, newSegmentZ])\n }\n\n if (obstacles.length > visibleObstacles) {\n setObstacles(prevObstacles => prevObstacles.slice(1))\n }\n }\n })\n\n return (\n <>\n {obstacles.map(({ z, side }, index) => (\n \n ))}\n \n )\n})\n\nexport { Obstacle }\n","import { useFrame } from '@react-three/fiber'\nimport React, { useState, useRef } from 'react'\nimport * as THREE from 'three'\n\nconst PathSegment = React.forwardRef(({ positionZ }, ref) => {\n return (\n \n \n \n \n )\n})\n\nconst Path = React.forwardRef((_, playerRef) => {\n const [segments, setSegments] = useState([])\n const [gamePosition, setGamePosition] = useState(0)\n\n const visibleSegments = 5\n const lastSegmentRef = useRef()\n const clockRef = useRef({ elapsedTime: 0, delta: 0 })\n\n useFrame(state => {\n const { clock } = state\n clockRef.current.delta = clock.getElapsedTime() - clockRef.current.elapsedTime\n\n if (playerRef.current) {\n if (clockRef.current.delta >= 0.05) {\n clockRef.current.elapsedTime = clock.getElapsedTime()\n setGamePosition(gamePosition => gamePosition + 1)\n setSegments(prevSegments => prevSegments.map(segment => segment - 1))\n }\n\n const lastSegmentZ = lastSegmentRef.current ? lastSegmentRef.current.position.z : 0\n\n // Generate new segments if needed\n if (segments.length < visibleSegments || gamePosition % visibleSegments > lastSegmentZ) {\n const segmentGap = 20\n const newSegmentZ = lastSegmentZ + segmentGap\n setSegments(prevSegments => [...prevSegments, newSegmentZ])\n }\n\n // Remove segments that are far behind the player\n if (segments.length > visibleSegments) {\n setSegments(prevSegments => prevSegments.slice(1))\n }\n }\n })\n\n return (\n <>\n {segments.map((z, index) => (\n \n ))}\n \n )\n})\n\nexport { Path }\n","import { OrbitControls } from '@react-three/drei'\nimport { Canvas } from '@react-three/fiber'\nimport { EffectComposer, Bloom } from '@react-three/postprocessing'\nimport React, { useRef, Suspense } from 'react'\nimport { CameraController } from '../components/CameraController'\nimport { Canary } from '../components/Canary'\nimport { Lights } from '../components/Lights'\nimport { Obstacle } from '../components/Obstacle'\nimport { Path } from '../components/Path'\nimport { canaryConfig as config } from '../config'\n\nconst Game = () => {\n const playerRef = useRef()\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\nexport { Game }\n","import { OrbitControls } from '@react-three/drei'\nimport { Canvas } from '@react-three/fiber'\nimport { EffectComposer, Bloom } from '@react-three/postprocessing'\nimport React, { useState, useEffect, useRef, Suspense } from 'react'\nimport ReactDOM from 'react-dom'\nimport styled, { keyframes } from 'styled-components'\nimport { Game } from './Game'\nimport { Canary } from '../components/Canary'\nimport { Lights } from '../components/Lights'\nimport { canaryConfig as config } from '../config'\n\nconst StartScreen = () => {\n const [showStartScreen, setShowStartScreen] = useState(true)\n\n useEffect(() => {\n const handleKeyPress = event => {\n if (event.key === 'Enter') {\n setShowStartScreen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyPress)\n\n return () => {\n document.removeEventListener('keydown', handleKeyPress)\n }\n }, [])\n\n const playerRef = useRef()\n\n return showStartScreen ? (\n <>\n \n \n\n \n \n\n \n \n \n \n\n \n \n {ReactDOM.createPortal(\n \n canary in a meme mine\n press enter to start\n ,\n document.body\n )}\n \n ) : (\n \n )\n}\n\nconst blinkAnimation = keyframes`\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n`\n\nconst OverlayContainer = styled.div`\n position: absolute;\n top: 25px;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n`\n\nconst Title = styled.h1`\n color: #fff;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n`\n\nconst Subtitle = styled.h2`\n color: #fff;\n margin-top: 125px;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n animation: ${blinkAnimation} 1500ms linear infinite;\n`\n\nexport { StartScreen }\n","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { StartScreen } from './lib/StartScreen'\n\nimport './styles.css'\n\nclass App extends React.Component {\n render() {\n return (\n <>\n \n \n \n \n )\n }\n}\n\nconst rootElement = document.getElementById('root')\nconst root = createRoot(rootElement)\nroot.render()\n"],"sourceRoot":""} \ No newline at end of file