-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
1 lines (1 loc) · 9.61 KB
/
app.js
1
const createSplit=(e,f,c)=>({...e,type:"split",split:f,children:c}),createRepeat=(e,f,c)=>({...e,type:"repeat",repeat:f,child:c}),flatten=e=>e.reduce((e,f)=>[...e,...f],[]),toBlock=(e,f,c,a)=>({origin:{x:e[0],y:e[1]},extent:{x:f[0],y:f[1]},color:c,height:a}),treeToBlocks=(e,c=[-1,-1],a=[1,1])=>{if(!e)return[];var d=a[0]-c[0],t=a[1]-c[1],{axis:b,height:r,color:o}=e;if("split"===e.type){var{split:f,children:n}=e,i=[c,"x"===b?[c[0]+d*f,c[1]]:[c[0],c[1]+t*f]],f=["x"===b?[c[0]+d*f,a[1]]:[a[0],c[1]+t*f],a],f=n?[n[1]?treeToBlocks(n[1],i[1],f[1]):[toBlock(i[1],f[1],o,r)],n[0]?treeToBlocks(n[0],i[0],f[0]):[toBlock(i[0],f[0],o,r)]]:[[toBlock(i[0],f[0],o,r)],[toBlock(i[1],f[1],o,r)]];return flatten(f)}{var{repeat:l,child:s}=e;const h=[...Array(l)].map((e,f)=>"x"===b?[c[0]+d*(l-1-f)/l,c[1]]:[c[0],c[1]+t*(l-1-f)/l]);var g=[...Array(l)].map((e,f)=>"x"===b?[c[0]+d*(l-f)/l,a[1]]:[a[0],c[1]+t*(l-f)/l]),e=s?h.map((e,f)=>treeToBlocks(s,e,g[f])):h.map((e,f)=>[toBlock(e,g[f],o,r)]);return flatten(e)}},generate=a=>{var d=e=>Math.floor(e*a());let t=0;const b=(e=0,f=0)=>{if(50<t||6<e)return null;if(a()<t/100)return null;t;var c=f?f*(1+d(20)/100):d(30)/100,f=e+1,e={axis:a()<.5?"x":"y",color:d(5),height:c};return a()<.8?createSplit(e,(d(20)+5)/30,[b(f,c),b(f,c)]):createRepeat(e,d(10)+1,b(f,c)||void 0)};let e=b();for(;null===e;)e=b();return treeToBlocks(e)},a=6364136223846793005n,c=1442695040888963407n,m=1n<<64n;function createLCGenerator(e){if(e<0n)throw Error("`seed` must be positive");if(e>=m)throw Error("`seed` must be smaller than `modulus`");let f=e;var d=()=>{var e=f*a+c;return f=e-(e>>64n<<64n),f};return{rand:()=>Number(d()*(1n<<24n)/m)/(1<<24),randBigInt:d}}const root6Recip=1/Math.sqrt(6),root2Recip=1/Math.sqrt(2),isoProject=(e,f,c)=>[root2Recip*(e-f),root6Recip*(e+f+2*c)],render=async(e,f,c=!1,a=!1,d)=>{e=e.map(f=>({top:[[f.origin.x,f.origin.y],[f.origin.x,f.extent.y],[f.extent.x,f.extent.y],[f.extent.x,f.origin.y]].map(e=>isoProject(...e,f.height)),right:[[f.origin.x,f.origin.y,0],[f.origin.x,f.origin.y,f.height],[f.extent.x,f.origin.y,f.height],[f.extent.x,f.origin.y,0]].map(e=>isoProject(...e)),left:[[f.origin.x,f.origin.y,0],[f.origin.x,f.origin.y,f.height],[f.origin.x,f.extent.y,f.height],[f.origin.x,f.extent.y,0]].map(e=>isoProject(...e)),color:f.color}));return toCanvas(e,f,c,a,d)};function*chunk(e,f){let c=f;for(;c.length;)yield c.slice(0,e),c=c.slice(e)}async function*chunkAsync(e,f){for(var c of chunk(e,f))yield c,await new Promise(e=>setTimeout(e,0))}const toCanvas=async(e,d,t,b,f)=>{const c=document.getElementById("canvas");var r=c.getAttribute("width"),o=c.getAttribute("height");c.setAttribute("width",r),c.setAttribute("height",o);const n=c.getContext("2d");n.strokeStyle="black",n.lineWidth=2,n.lineJoin="round",n.fillRect(0,0,r,o);var a,i=(e,f)=>{n.fillStyle=f;var[c,a,f,e]=e.map(([e,f])=>[(e+.5)*r,(.5-f)*o]);n.beginPath(),n.moveTo(...c),n.lineTo(...a),n.lineTo(...f),n.lineTo(...e),n.stroke(),n.fill()};for await(a of chunkAsync(5e3,e))a.forEach(({top:e,left:f,right:c,color:a})=>{i(e,d[a]),i(f,b?d[a]:"black"),i(c,t?d[a]:"black")}),n.beginPath(),n.moveTo(0,0),n.lineTo(0,o),n.lineTo(r,o),n.lineTo(r,0),n.closePath(),n.moveTo(.1*r,.1*o),n.lineTo(.9*r,.1*o),n.lineTo(.9*r,.9*o),n.lineTo(.1*r,.9*o),n.closePath(),n.fillStyle=d[1],n.fill(),n.lineWidth=2,n.lineJoin="miter",n.strokeRect(.1*r,.1*o,.8*r,.8*o)},colors=[["#69d2e7","#a7dbd8","#e0e4cc","#f38630","#fa6900"],["#fe4365","#fc9d9a","#f9cdad","#c8c8a9","#83af9b"],["#ecd078","#d95b43","#c02942","#542437","#53777a"],["#556270","#4ecdc4","#c7f464","#ff6b6b","#c44d58"],["#774f38","#e08e79","#f1d4af","#ece5ce","#c5e0dc"],["#e8ddcb","#cdb380","#036564","#033649","#031634"],["#490a3d","#bd1550","#e97f02","#f8ca00","#8a9b0f"],["#594f4f","#547980","#45ada8","#9de0ad","#e5fcc2"],["#00a0b0","#6a4a3c","#cc333f","#eb6841","#edc951"],["#e94e77","#d68189","#c6a49a","#c6e5d9","#f4ead5"],["#3fb8af","#7fc7af","#dad8a7","#ff9e9d","#ff3d7f"],["#d9ceb2","#948c75","#d5ded9","#7a6a53","#99b2b7"],["#ffffff","#cbe86b","#f2e9e1","#1c140d","#cbe86b"],["#efffcd","#dce9be","#555152","#2e2633","#99173c"],["#343838","#005f6b","#008c9e","#00b4cc","#00dffc"],["#413e4a","#73626e","#b38184","#f0b49e","#f7e4be"],["#ff4e50","#fc913a","#f9d423","#ede574","#e1f5c4"],["#99b898","#fecea8","#ff847c","#e84a5f","#2a363b"],["#655643","#80bca3","#f6f7bd","#e6ac27","#bf4d28"],["#00a8c6","#40c0cb","#f9f2e7","#aee239","#8fbe00"],["#351330","#424254","#64908a","#e8caa4","#cc2a41"],["#554236","#f77825","#d3ce3d","#f1efa5","#60b99a"],["#5d4157","#838689","#a8caba","#cad7b2","#ebe3aa"],["#8c2318","#5e8c6a","#88a65e","#bfb35a","#f2c45a"],["#fad089","#ff9c5b","#f5634a","#ed303c","#3b8183"],["#ff4242","#f4fad2","#d4ee5e","#e1edb9","#f0f2eb"],["#f8b195","#f67280","#c06c84","#6c5b7b","#355c7d"],["#d1e751","#ffffff","#000000","#4dbce9","#26ade4"],["#1b676b","#519548","#88c425","#bef202","#eafde6"],["#5e412f","#fcebb6","#78c0a8","#f07818","#f0a830"],["#bcbdac","#cfbe27","#f27435","#f02475","#3b2d38"],["#452632","#91204d","#e4844a","#e8bf56","#e2f7ce"],["#eee6ab","#c5bc8e","#696758","#45484b","#36393b"],["#f0d8a8","#3d1c00","#86b8b1","#f2d694","#fa2a00"],["#2a044a","#0b2e59","#0d6759","#7ab317","#a0c55f"],["#f04155","#ff823a","#f2f26f","#fff7bd","#95cfb7"],["#b9d7d9","#668284","#2a2829","#493736","#7b3b3b"],["#bbbb88","#ccc68d","#eedd99","#eec290","#eeaa88"],["#b3cc57","#ecf081","#ffbe40","#ef746f","#ab3e5b"],["#a3a948","#edb92e","#f85931","#ce1836","#009989"],["#300030","#480048","#601848","#c04848","#f07241"],["#67917a","#170409","#b8af03","#ccbf82","#e33258"],["#aab3ab","#c4cbb7","#ebefc9","#eee0b7","#e8caaf"],["#e8d5b7","#0e2430","#fc3a51","#f5b349","#e8d5b9"],["#ab526b","#bca297","#c5ceae","#f0e2a4","#f4ebc3"],["#607848","#789048","#c0d860","#f0f0d8","#604848"],["#b6d8c0","#c8d9bf","#dadabd","#ecdbbc","#fedcba"],["#a8e6ce","#dcedc2","#ffd3b5","#ffaaa6","#ff8c94"],["#3e4147","#fffedf","#dfba69","#5a2e2e","#2a2c31"],["#fc354c","#29221f","#13747d","#0abfbc","#fcf7c5"],["#cc0c39","#e6781e","#c8cf02","#f8fcc1","#1693a7"],["#1c2130","#028f76","#b3e099","#ffeaad","#d14334"],["#a7c5bd","#e5ddcb","#eb7b59","#cf4647","#524656"],["#dad6ca","#1bb0ce","#4f8699","#6a5e72","#563444"],["#5c323e","#a82743","#e15e32","#c0d23e","#e5f04c"],["#edebe6","#d6e1c7","#94c7b6","#403b33","#d3643b"],["#fdf1cc","#c6d6b8","#987f69","#e3ad40","#fcd036"],["#230f2b","#f21d41","#ebebbc","#bce3c5","#82b3ae"],["#b9d3b0","#81bda4","#b28774","#f88f79","#f6aa93"],["#3a111c","#574951","#83988e","#bcdea5","#e6f9bc"],["#5e3929","#cd8c52","#b7d1a3","#dee8be","#fcf7d3"],["#1c0113","#6b0103","#a30006","#c21a01","#f03c02"],["#000000","#9f111b","#b11623","#292c37","#cccccc"],["#382f32","#ffeaf2","#fcd9e5","#fbc5d8","#f1396d"],["#e3dfba","#c8d6bf","#93ccc6","#6cbdb5","#1a1f1e"],["#f6f6f6","#e8e8e8","#333333","#990100","#b90504"],["#1b325f","#9cc4e4","#e9f2f9","#3a89c9","#f26c4f"],["#a1dbb2","#fee5ad","#faca66","#f7a541","#f45d4c"],["#c1b398","#605951","#fbeec2","#61a6ab","#accec0"],["#5e9fa3","#dcd1b4","#fab87f","#f87e7b","#b05574"],["#951f2b","#f5f4d7","#e0dfb1","#a5a36c","#535233"],["#8dccad","#988864","#fea6a2","#f9d6ac","#ffe9af"],["#2d2d29","#215a6d","#3ca2a2","#92c7a3","#dfece6"],["#413d3d","#040004","#c8ff00","#fa023c","#4b000f"],["#eff3cd","#b2d5ba","#61ada0","#248f8d","#605063"],["#ffefd3","#fffee4","#d0ecea","#9fd6d2","#8b7a5e"],["#cfffdd","#b4dec1","#5c5863","#a85163","#ff1f4c"],["#9dc9ac","#fffec7","#f56218","#ff9d2e","#919167"],["#4e395d","#827085","#8ebe94","#ccfc8e","#dc5b3e"],["#a8a7a7","#cc527a","#e8175d","#474747","#363636"],["#f8edd1","#d88a8a","#474843","#9d9d93","#c5cfc6"],["#046d8b","#309292","#2fb8ac","#93a42a","#ecbe13"],["#f38a8a","#55443d","#a0cab5","#cde9ca","#f1edd0"],["#a70267","#f10c49","#fb6b41","#f6d86b","#339194"],["#ff003c","#ff8a00","#fabe28","#88c100","#00c176"],["#ffedbf","#f7803c","#f54828","#2e0d23","#f8e4c1"],["#4e4d4a","#353432","#94ba65","#2790b0","#2b4e72"],["#0ca5b0","#4e3f30","#fefeeb","#f8f4e4","#a5b3aa"],["#4d3b3b","#de6262","#ffb88c","#ffd0b3","#f5e0d3"],["#fffbb7","#a6f6af","#66b6ab","#5b7c8d","#4f2958"],["#edf6ee","#d1c089","#b3204d","#412e28","#151101"],["#9d7e79","#ccac95","#9a947c","#748b83","#5b756c"],["#fcfef5","#e9ffe1","#cdcfb7","#d6e6c3","#fafbe3"],["#9cddc8","#bfd8ad","#ddd9ab","#f7af63","#633d2e"],["#30261c","#403831","#36544f","#1f5f61","#0b8185"],["#aaff00","#ffaa00","#ff00aa","#aa00ff","#00aaff"],["#d1313d","#e5625c","#f9bf76","#8eb2c5","#615375"],["#ffe181","#eee9e5","#fad3b2","#ffba7f","#ff9c97"],["#73c8a9","#dee1b6","#e1b866","#bd5532","#373b44"],["#805841","#dcf7f3","#fffcdd","#ffd8d8","#f5a2a2"]],blocksVersion="0.2",__default=(e,f)=>`blocks@${blocksVersion}:${e.toString(16)}${f&&":"+f}`,toBigIntSafe=e=>{try{return BigInt(e)}catch(e){}try{return BigInt(`0x${e}`)}catch(e){}return null},urlParams=new URLSearchParams(window.location.search),getSeedFromText=async e=>{const f=Array.from(new Uint8Array(await window.crypto.subtle.digest("sha-256",(new TextEncoder).encode(e))));return f.slice(0,8).reduce((e,f)=>(e<<8n)+BigInt(f),0n)};let name=void 0;const rootSeedPromise=(async e=>{if(null===e)return BigInt((new Date).getTime());if(""===e)return getSeedFromText(e);var f=toBigIntSafe(e);return null!==f?f:(name=e,getSeedFromText(e))})(urlParams.get("seed")),interval=(e=>e&&!isNaN(e)?e:1e4)(Number(urlParams.get("interval"))),main=async()=>{let t=await rootSeedPromise,b=!1,r=[];window.showHistory=()=>console.log(r.map(e=>e.toString(16)));var e=async e=>{if(!b){b=!0;const{rand:a,randBigInt:d}=createLCGenerator(t);var f,c=generate(a);await render(c,colors[f=colors.length,Math.floor(f*a())],a()<.5,a()<.5,__default(t,e)),window.document.getElementById("seed").innerHTML=`${t.toString(16)} ${e&&` (${e})`||""}`,r.push(t),1e3<r.length&&(r=r.slice(r.length/2)),t=d(),b=!1}};await e(name),console.error("showHistory() 4 history"),window.setInterval(()=>e(),interval)};main();