memoscan
← all memos

Memo 0x694fb1e4…dbd5c7 on Ethereum

is.x+R()*this.scale/2,i-l(Math.pow(R(),2),0,1,0,i),e[2]*this.scale+this.z+R()*this.scale/2),h=i-s.y,e=2*i/Math.pow(this.timeToRepeat,2);this.particles.push({initY:i,position:s,particalAcceleration:e,timeElapsed:Math.sqrt(2*h/e),visible:s.y>et.weather.flood.waterDepth})}}updateGeometry(){const t=[];for(var e of this.particles)e.visible&&t.push(e.position.x,e.position.y,e.position.z);this.rainGeo.setAttribute("position",new THREE.Float32BufferAttribute(t,3)),this.rainGeo.attributes.position.needsUpdate=!0}updateParticles(t){for(var e of this.particles){var i=Math.sqrt(2*e.initY/e.particalAcceleration);e.timeElapsed+=t;var s=.5*e.particalAcceleration*Math.pow(e.timeElapsed,2);e.timeElapsed>=i?(i=(e.timeElapsed-i)%i,e.position.y=e.initY-.5*e.particalAcceleration*Math.pow(i,2),e.timeElapsed=i,e.visible=e.position.y>et.weather.flood.waterDepth):(e.position.y=e.initY-s,e.visible=e.position.y>et.weather.flood.waterDepth)}}step(t){this.updateParticles(t),this.updateGeometry()}}class q{constructor(){this.sunX,this.sunY;var t=Rt(p[2]);t<.4?(this.sunX=+n/24,this.sunY=23*n/24,this.directionalColor=16250578,this.groundColor=16757627,this.skyColor=11519487):t<.6?(this.sunX=n,this.sunY=n/2,this.directionalColor=16700785,this.groundColor=12004412,this.skyColor=16700785):t<.8?(this.sunX=-n,this.sunY=n/2,this.directionalColor=16761159,this.skyColor=12730432,this.groundColor=7479690,this.skyColor=13916024,this.groundColor=9455270,$=Math.PI):t<.9?(this.sunX=0,this.sunY=n,this.directionalColor=16777215,this.groundColor=16777215,this.skyColor=16777215):(this.sunX=+n/24,this.sunY=23*n/24,this.directionalColor=11250572,this.skyColor=5532607,this.groundColor=3495352),X.lerp(new THREE.Color(this.skyColor),.5),X.lerp(new THREE.Color(0),.2),B.setClearColor(X);const e=new THREE.DirectionalLight(this.directionalColor,.7);t=new THREE.HemisphereLight(this.skyColor,this.groundColor,.65);e.castShadow=!0,e.target.updateMatrixWorld(),e.shadow.camera.near=.1,e.shadow.camera.far=2*n,e.shadow.camera.left=-n,e.shadow.camera.right=n,e.shadow.camera.top=n,e.shadow.camera.bottom=-n,e.shadow.mapSize.width=4096,e.shadow.mapSize.height=4096,e.position.x=this.sunX,e.position.y=this.sunY,y.add(t),y.add(e)}}class V{constructor(t,e,i,s,h,o=150){this.x=t,this.y=e,this.z=i,this.position=[t,e,i],this.width=s,this.depth=h,this.resolution=o,this.cells={},this.rainCells={},this.cloudLayers=0,this.rain,this.padding=.1,this.blockSize=(this.width-this.padding)/this.resolution,this.lowBound,this.highBound,this.shouldRain=!1,this.snow=!1,this.rainDensity=0,this.flood,this.cloudUuid,this.fog,this.flash=new THREE.PointLight(404873,0,n,2),this.create()}decideWeather(){var t=g;t<.4?(this.lowBound=0,this.highBound=0):t<.6?(this.lowBound=.32,this.highBound=.34,this.cloudLayers=Math.floor(L(1,3)),t<.45&&(this.shouldRain=!0)):t<.8?(this.lowBound=.4,this.highBound=.5,this.cloudLayers=Math.floor(L(2,5)),t<.7&&(this.shouldRain=!0)):(this.lowBound=.4,this.highBound=.6,this.cloudLayers=Math.floor(L(3,6)),t<.95&&(this.shouldRain=!0,.9<t&&(this.lightning=!0))),this.shouldRain&&(this.rainDensity=(e=[.04,.07,.11])[Math.floor(e.length*R())]),Rt(p[4])<.1&&(this.snow=!0,this.lightning=!1),this.lightning&&y.add(this.flash),this.flood=new K(0,0,n-.05,n-.05,this.snow),Rt(p[5])<.125&&(this.fog=!0,y.fog=new THREE.FogExp2(X,.005));var e=Rt(p[16]);this.cloudFallOff=e<.3?(t,e,i)=>{e=e<this.resolution/2?e:this.resolution-e,i=i<this.resolution/2?i:this.resolution-i,i=Math.min(l(Math.pow(Math.min(e,i),1/3),0,Math.pow(this.resolution/16,1/3),0,1),1);return Math.min(l(t,this.resolution/3,this.resolution/2,1,.6),1)*i}:e<.6?t=>t<this.resolution/3?Math.min(Math.max(l(t,this.resolution/8,this.resolution/3,0,1),0),1):Math.min(Math.max(l(t,this.resolution/3,this.resolution/2,1,0),0),1):e<.8?(t,e,i)=>{if(t<this.resolution/3)return Math.min(Math.max(l(t,this.resolution/8,this.resolution/3,0,1),0),1);e=e<this.resolution/2?e:this.resolution-e,i=i<this.resolution/2?i:this.resolution-i;return Math.min(l(Math.pow(Math.min(e,i),1/3),0,Math.pow(this.resolution/4,1/3),0,1),1)}:(t,e,i)=>{e=e<this.resolution/2?e:this.resolution-e,i=i<this.resolution/2?i:this.resolution-i;return Math.min(l(Math.pow(Math.min(e,i),1/3),0,Math.pow(this.resolution/4,1/3),0,1),1)}}initWeather(){let o=0;for(let h=0;h<this.resolution;h++){let s=0;for(let i=0;i<this.cloudLayers;i++){let e=0;for(let t=0;t<this.resolution;t++){var n=Math.PI/2/(this.cloudLayers-1||1)*i,a=l(Math.cos(n),0,1,this.lowBound,this.highBound),n=Math.sqrt(Math.pow(h-this.resolution/2,2)+Math.pow(t-this.resolution/2,2)),n=this.cloudFallOff(n,h,t);(16*r(o,s,e)+8*r(2*o,2*s,2*e)+4*r(4*o,4*s,4*e)+2*r(8*o,8*s,8*e)+r(16*o,16*s,16*e))/30<a*n&&(this.cells[this.key(h,i,t)]={position:[h,i,t],facesHidden:[!1,!1,!1,!1,!1,!1]}),e+=.05}s+=.05}o+=.05}this.prunedVoxels=this.pruneHiddenVoxels_(this.cells)}display(){const t=y.getObjectByProperty("uuid",this.cloudUuid);t&&t.geometry&&t.material&&(t.geometry.dispose(),t.material.dispose(),y.remove(t)),this.makeRain(),this.makeClouds()}makeClouds(){const h=this.buildMeshDataFromVoxels(this.prunedVoxels);[THREE.FrontSide].forEach(t=>{const e=new THREE.MeshPhongMaterial({opacity:a?.4:.5,transparent:!0,color:"#ffffff",side:t});e.depthWrite=!1;const i=new THREE.BufferGeometry,s=new THREE.Mesh(i,e);this.cloudUuid=s.uuid,i.setAttribute("position",new THREE.Float32BufferAttribute(h.positions,3)),i.setAttribute("normal",new THREE.Float32BufferAttribute(h.normals,3)),i.setIndex(new THREE.BufferAttribute(h.indices,1)),i.attributes.position.needsUpdate=!0,i.attributes.normal.needsUpdate=!0,s.receiveShadow=!0,s.castShadow=!0,y.add(s)})}makeRain(){0<Object.keys(this.rainCells).length&&this.shouldRain&&!this.rain&&(this.rain=new U(this.x,this.y,this.z,this.blockSize,this.rainCells,this.rainDensity))}step(t){this.rain&&(this.rain.step(t),.99<R()||100<this.flash.power?(this.flash.power<100&&(t=T(this.rainCells)["position"],this.flash.position.set(t[0]*this.blockSize-this.width/2,this.y+t[1]*this.blockSize,t[2]*this.blockSize-this.depth/2)),this.flash.power=50+500*R()):this.flash.power=0)}key(t,e,i){return t+"."+e+"."+i}pruneHiddenVoxels_(i){const t={};for(var s in i){const n=i[s];var h=[this.key(n.position[0]+1,n.position[1],n.position[2]),this.key(n.position[0]-1,n.position[1],n.position[2]),this.key(n.position[0],n.position[1]+1,n.position[2]),this.key(n.position[0],n.position[1]-1,n.position[2]),this.key(n.position[0],n.position[1],n.position[2]+1),this.key(n.position[0],n.position[1],n.position[2]-1)];let e=!1;for(let t=0;t<6;++t){var o=h[t]in i;(n.facesHidden[t]=o)||(e=!0,3==t&&(this.rainCells[s]=n))}e&&(t[s]=n)}return t}buildMeshDataFromVoxels(t){const e={positions:[],normals:[],indices:[]};for(var i in t){var s=t[i];for(let t=0;t<6;++t)if(!s.facesHidden[t]){var h=e.positions.length/3;const r=[...this.geometries_[t].attributes.position.array];for(let e=0;e<3;++e)for(let t=0;t<4;++t)r[3*t+e]+=s.position[e]*this.blockSize+this.position[e]+this.blockSize/2+this.padding/2;e.positions.push(...r),e.normals.push(...this.geometries_[t].attributes.normal.array);const l=[...this.geometries_[t].index.array];for(let t=0;t<l.length;++t)l[t]+=h;e.indices.push(...l)}}const o=new Float32Array(4*e.positions.length),n=new Float32Array(4*e.normals.length),a=new Uint32Array(4*e.indices.length);return o.set(e.positions,0),n.set(e.normals,0),a.set(e.indices,0),{positions:e.positions,normals:n,indices:a}}create(){var t=this.blockSize;const e=new THREE.PlaneBufferGeometry(t,t);e.rotateY(Math.PI/2),e.translate(t/2,0,0);const i=new THREE.PlaneBufferGeometry(t,t);i.rotateY(-Math.PI/2),i.translate(-t/2,0,0);const s=new THREE.PlaneBufferGeometry(t,t);s.rotateX(-Math.PI/2),s.translate(0,t/2,0);const h=new THREE.PlaneBufferGeometry(t,t);h.rotateX(Math.PI/2),h.translate(0,-t/2,0);const o=new THREE.PlaneBufferGeometry(t,t);o.translate(0,0,t/2);const n=new THREE.PlaneBufferGeometry(t,t);n.rotateY(Math.PI),n.translate(0,0,-t/2),this.geometries_=[e,i,s,h,o,n]}}class K{constructor(t,e,i,s,h){if(this.x=t,this.z=e,this.width=i,this.depth=s,this.waterDepth=0,this.snow=h,this.snowHeight=0,.95<Rt(p[6])&&(this.waterDepth=tt.type===Q.MONOLITH?L(6.5,10):L(1,6)),(!et.weather.shouldRain||this.snow)&&0<this.waterDepth&&Rt(p[7])<.5&&(this.frozen=!0,this.waterDepth=tt.type===Q.MONOLITH?L(6.5,10):L(1,4)),0<this.waterDepth){var o=new THREE.BoxBufferGeometry(this.width,this.waterDepth,this.depth);const n=new THREE.MeshPhongMaterial({transparent:!0,opacity:this.frozen?.8:.5});n.depthWrite=!1;const a=new THREE.Mesh(o,n);a.position.set(this.x,this.waterDepth/2,this.z),y.add(a)}if(this.snow&&(0===this.waterDepth||this.frozen)){this.snowHeight=L(.06,.1);h=new THREE.BoxBufferGeometry(this.width,this.snowHeight,this.depth),o=new THREE.MeshPhongMaterial;const r=new THREE.Mesh(h,o);r.receiveShadow=!0,r.position.set(this.x,this.waterDepth+this.snowHeight/2,this.z),y.add(r)}}}const Q={TRADITONAL:"traditional",SHORT:"short",TALL:"tall",BIGGER_IN_CENTER:"biggerInCenter",AGRIDUSTRIAL:"agridustrial",SMALLER_IN_CENTER:"smallerInCenter",MONOLITH:"monolith",CHAOS:"chaos",PETE_REPEAT:"peteRepeat"};function J(t,e,i,s,h=!0){s=e+s;const o=h?Math.min:Math.max;i=o(t,0,-(t+i)),s=o(e,0,-s);return Math.sqrt(i*i+s*s)}let $=0;const tt=new class{constructor(){this.typePercentages=[.16,.3025,.445,.5625,.68,.7725,.865,.9325,1],this.decideType(),this.biomes={streetSizeGenerator:{traditional:t=>5<t?.5:0===t?L(2,4):1,agridustrial:t=>0===t&&R()<.8?L(2,6):L(.05,.3),monolith:t=>0,biggerInCenter:t=>5<t?.5:0===t?2:1,smallerInCenter:t=>5<t?.5:0===t?2:1,short:t=>0===t?1:.5,tall:t=>0===t?1.9:1,chaos:t=>L(.2,1),peteRepeat:t=>5<t?.5:0===t?L(2,4):1},streetGenerationChances:{traditional:(t,e,i,s,h,o)=>{var n=1-Math.pow(h/8,2),h=.95*n/(i+s);return{splitWidthChance:h*i,splitDepthChance:h*s,splitRepeatChance:.05*n,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}},agridustrial:(t,e,i,s,h,o)=>{var n=.84/(i+s);return{splitWidthChance:n*i,splitDepthChance:n*s,splitRepeatChance:.03,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}},monolith:(t,e,i,s,h,o)=>({splitWidthChance:0,splitDepthChance:0,splitRepeatChance:0,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}),biggerInCenter:(t,e,i,s,h,o)=>{var n=1-Math.pow(h/8,2),a=(4<h?.95*n:n)/(i+s);return{splitWidthChance:a*i,splitDepthChance:a*s,splitRepeatChance:4<h?.05*n:0,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}},smallerInCenter:(t,e,i,s,h,o)=>{var n=1-Math.pow(h/8,2),a=(4<h?.95*n:n)/(i+s);return{splitWidthChance:a*i,splitDepthChance:a*s,splitRepeatChance:4<h?.05*n:0,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}},short:(t,e,i,s,h,o)=>{var n=1-Math.pow(h/8,2),h=.95*n/(i+s);return{splitWidthChance:h*i,splitDepthChance:h*s,splitRepeatChance:.05*n,splitChoic