From 5427b88829a3a54fbb769795ab148248d38fb583 Mon Sep 17 00:00:00 2001 From: brookee Date: Sun, 11 Feb 2024 03:52:49 -0500 Subject: [PATCH] cleanup --- public/index.html | 5 +- public/modal.css | 90 --------- public/simplex.js | 473 ++++++++++++++++++++++++++++++++++++++++++++++ public/style.css | 92 ++++++++- 4 files changed, 565 insertions(+), 95 deletions(-) delete mode 100644 public/modal.css create mode 100644 public/simplex.js diff --git a/public/index.html b/public/index.html index f4fc9c9..458f5be 100755 --- a/public/index.html +++ b/public/index.html @@ -6,8 +6,7 @@ The Mycelial Network - - + @@ -70,7 +69,7 @@ - + diff --git a/public/modal.css b/public/modal.css deleted file mode 100644 index 11cded2..0000000 --- a/public/modal.css +++ /dev/null @@ -1,90 +0,0 @@ -@charset "UTF-8"; -.modal[open] .modal__toggle { - left: calc(50vw + 200px); - top: calc(15vh - 5px); - position: fixed; - z-index: 11; -} -.modal[open] .modal__toggle:focus { - outline: 2px solid #00f; -} -.modal__toggle::before { - content: 'Donate'; - cursor: pointer; - padding-left: 10px; - padding-right: 10px; - background-color: #241917; - color: #fff; - border-radius: 2px; - border: 2px solid #f3bbae; -} -.modal[open] .modal__toggle::before { - content: '✖'; - color: #fff !important; - font-size: 25px; -} -.modal__toggle { - position: relative; - list-style: none; - font-size: 14px; - font-family: Monaco, monospace; - text-align: left; - z-index: 4; -} -.modal__toggle::-webkit-details-marker { - display: none; -} -.modal__toggle:hover { - cursor: pointer; - opacity: .8; -} -.modal__background { - background-color:rgba(0, 0, 0, 0.65); - display: flex; - height: 100vh; - justify-content: center; - left: 0; - position: fixed; - top: 0; - width: 100vw; - z-index: 3; -} -.modal__body { - border: 2px solid #f3bbae92; - background: rgba(36, 25, 23, 1); - color: #f3bbae; - font-size: 1.6rem; - font-weight: 600; - padding: 20px 20px; - position: fixed; - text-align: left; - top: 15vh; - left: 50%; - transform: translateX(-50%); - width: 80%; - max-width: 400px; - z-index: 10; - word-wrap: break-word; - font-family: Monaco, monospace; -} - -.modal__text { - line-height: 1.6; - margin: 0; - font-size: 12px; -} - -.crypto-address { - word-wrap: break-word; - display: block; - font-size: 12px !important; - background-color: #241917; - color: #fff; - border-radius: 2px; - border: 2px solid #f3bbae; - padding: 5px; -} - -.links { - padding-left: 0.85rem; -} \ No newline at end of file diff --git a/public/simplex.js b/public/simplex.js new file mode 100644 index 0000000..ebd35de --- /dev/null +++ b/public/simplex.js @@ -0,0 +1,473 @@ +/* + * A fast javascript implementation of simplex noise by Jonas Wagner + +Based on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. +Which is based on example code by Stefan Gustavson (stegu@itn.liu.se). +With Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). +Better rank ordering method by Stefan Gustavson in 2012. + + + Copyright (c) 2018 Jonas Wagner + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + (function() { + 'use strict'; + + var F2 = 0.5 * (Math.sqrt(3.0) - 1.0); + var G2 = (3.0 - Math.sqrt(3.0)) / 6.0; + var F3 = 1.0 / 3.0; + var G3 = 1.0 / 6.0; + var F4 = (Math.sqrt(5.0) - 1.0) / 4.0; + var G4 = (5.0 - Math.sqrt(5.0)) / 20.0; + + function SimplexNoise(randomOrSeed) { + var random; + if (typeof randomOrSeed == 'function') { + random = randomOrSeed; + } + else if (randomOrSeed) { + random = alea(randomOrSeed); + } else { + random = Math.random; + } + this.p = buildPermutationTable(random); + this.perm = new Uint8Array(512); + this.permMod12 = new Uint8Array(512); + for (var i = 0; i < 512; i++) { + this.perm[i] = this.p[i & 255]; + this.permMod12[i] = this.perm[i] % 12; + } + + } + SimplexNoise.prototype = { + grad3: new Float32Array([1, 1, 0, + -1, 1, 0, + 1, -1, 0, + + -1, -1, 0, + 1, 0, 1, + -1, 0, 1, + + 1, 0, -1, + -1, 0, -1, + 0, 1, 1, + + 0, -1, 1, + 0, 1, -1, + 0, -1, -1]), + grad4: new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, + 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, + 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1, + -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1, + 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1, + -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1, + 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, + -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]), + noise2D: function(xin, yin) { + var permMod12 = this.permMod12; + var perm = this.perm; + var grad3 = this.grad3; + var n0 = 0; // Noise contributions from the three corners + var n1 = 0; + var n2 = 0; + // Skew the input space to determine which simplex cell we're in + var s = (xin + yin) * F2; // Hairy factor for 2D + var i = Math.floor(xin + s); + var j = Math.floor(yin + s); + var t = (i + j) * G2; + var X0 = i - t; // Unskew the cell origin back to (x,y) space + var Y0 = j - t; + var x0 = xin - X0; // The x,y distances from the cell origin + var y0 = yin - Y0; + // For the 2D case, the simplex shape is an equilateral triangle. + // Determine which simplex we are in. + var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords + if (x0 > y0) { + i1 = 1; + j1 = 0; + } // lower triangle, XY order: (0,0)->(1,0)->(1,1) + else { + i1 = 0; + j1 = 1; + } // upper triangle, YX order: (0,0)->(0,1)->(1,1) + // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and + // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where + // c = (3-sqrt(3))/6 + var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords + var y1 = y0 - j1 + G2; + var x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords + var y2 = y0 - 1.0 + 2.0 * G2; + // Work out the hashed gradient indices of the three simplex corners + var ii = i & 255; + var jj = j & 255; + // Calculate the contribution from the three corners + var t0 = 0.5 - x0 * x0 - y0 * y0; + if (t0 >= 0) { + var gi0 = permMod12[ii + perm[jj]] * 3; + t0 *= t0; + n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient + } + var t1 = 0.5 - x1 * x1 - y1 * y1; + if (t1 >= 0) { + var gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3; + t1 *= t1; + n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1); + } + var t2 = 0.5 - x2 * x2 - y2 * y2; + if (t2 >= 0) { + var gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3; + t2 *= t2; + n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2); + } + // Add contributions from each corner to get the final noise value. + // The result is scaled to return values in the interval [-1,1]. + return 70.0 * (n0 + n1 + n2); + }, + // 3D simplex noise + noise3D: function(xin, yin, zin) { + var permMod12 = this.permMod12; + var perm = this.perm; + var grad3 = this.grad3; + var n0, n1, n2, n3; // Noise contributions from the four corners + // Skew the input space to determine which simplex cell we're in + var s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D + var i = Math.floor(xin + s); + var j = Math.floor(yin + s); + var k = Math.floor(zin + s); + var t = (i + j + k) * G3; + var X0 = i - t; // Unskew the cell origin back to (x,y,z) space + var Y0 = j - t; + var Z0 = k - t; + var x0 = xin - X0; // The x,y,z distances from the cell origin + var y0 = yin - Y0; + var z0 = zin - Z0; + // For the 3D case, the simplex shape is a slightly irregular tetrahedron. + // Determine which simplex we are in. + var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords + var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords + if (x0 >= y0) { + if (y0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } // X Y Z order + else if (x0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 0; + k2 = 1; + } // X Z Y order + else { + i1 = 0; + j1 = 0; + k1 = 1; + i2 = 1; + j2 = 0; + k2 = 1; + } // Z X Y order + } + else { // x0 y0) rankx++; + else ranky++; + if (x0 > z0) rankx++; + else rankz++; + if (x0 > w0) rankx++; + else rankw++; + if (y0 > z0) ranky++; + else rankz++; + if (y0 > w0) ranky++; + else rankw++; + if (z0 > w0) rankz++; + else rankw++; + var i1, j1, k1, l1; // The integer offsets for the second simplex corner + var i2, j2, k2, l2; // The integer offsets for the third simplex corner + var i3, j3, k3, l3; // The integer offsets for the fourth simplex corner + // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. + // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; + j1 = ranky >= 3 ? 1 : 0; + k1 = rankz >= 3 ? 1 : 0; + l1 = rankw >= 3 ? 1 : 0; + // Rank 2 denotes the second largest coordinate. + i2 = rankx >= 2 ? 1 : 0; + j2 = ranky >= 2 ? 1 : 0; + k2 = rankz >= 2 ? 1 : 0; + l2 = rankw >= 2 ? 1 : 0; + // Rank 1 denotes the second smallest coordinate. + i3 = rankx >= 1 ? 1 : 0; + j3 = ranky >= 1 ? 1 : 0; + k3 = rankz >= 1 ? 1 : 0; + l3 = rankw >= 1 ? 1 : 0; + // The fifth corner has all coordinate offsets = 1, so no need to compute that. + var x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords + var y1 = y0 - j1 + G4; + var z1 = z0 - k1 + G4; + var w1 = w0 - l1 + G4; + var x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords + var y2 = y0 - j2 + 2.0 * G4; + var z2 = z0 - k2 + 2.0 * G4; + var w2 = w0 - l2 + 2.0 * G4; + var x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords + var y3 = y0 - j3 + 3.0 * G4; + var z3 = z0 - k3 + 3.0 * G4; + var w3 = w0 - l3 + 3.0 * G4; + var x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords + var y4 = y0 - 1.0 + 4.0 * G4; + var z4 = z0 - 1.0 + 4.0 * G4; + var w4 = w0 - 1.0 + 4.0 * G4; + // Work out the hashed gradient indices of the five simplex corners + var ii = i & 255; + var jj = j & 255; + var kk = k & 255; + var ll = l & 255; + // Calculate the contribution from the five corners + var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; + if (t0 < 0) n0 = 0.0; + else { + var gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4; + t0 *= t0; + n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0); + } + var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; + if (t1 < 0) n1 = 0.0; + else { + var gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4; + t1 *= t1; + n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1); + } + var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; + if (t2 < 0) n2 = 0.0; + else { + var gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4; + t2 *= t2; + n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2); + } + var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; + if (t3 < 0) n3 = 0.0; + else { + var gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4; + t3 *= t3; + n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3); + } + var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; + if (t4 < 0) n4 = 0.0; + else { + var gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4; + t4 *= t4; + n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4); + } + // Sum up and scale the result to cover the range [-1,1] + return 27.0 * (n0 + n1 + n2 + n3 + n4); + } + }; + + function buildPermutationTable(random) { + var i; + var p = new Uint8Array(256); + for (i = 0; i < 256; i++) { + p[i] = i; + } + for (i = 0; i < 255; i++) { + var r = i + ~~(random() * (256 - i)); + var aux = p[i]; + p[i] = p[r]; + p[r] = aux; + } + return p; + } + SimplexNoise._buildPermutationTable = buildPermutationTable; + + function alea() { + // Johannes Baagøe , 2010 + var s0 = 0; + var s1 = 0; + var s2 = 0; + var c = 1; + + var mash = masher(); + s0 = mash(' '); + s1 = mash(' '); + s2 = mash(' '); + + for (var i = 0; i < arguments.length; i++) { + s0 -= mash(arguments[i]); + if (s0 < 0) { + s0 += 1; + } + s1 -= mash(arguments[i]); + if (s1 < 0) { + s1 += 1; + } + s2 -= mash(arguments[i]); + if (s2 < 0) { + s2 += 1; + } + } + mash = null; + return function() { + var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32 + s0 = s1; + s1 = s2; + return s2 = t - (c = t | 0); + }; + } + function masher() { + var n = 0xefc8249d; + return function(data) { + data = data.toString(); + for (var i = 0; i < data.length; i++) { + n += data.charCodeAt(i); + var h = 0.02519603282416938 * n; + n = h >>> 0; + h -= n; + h *= n; + n = h >>> 0; + h -= n; + n += h * 0x100000000; // 2^32 + } + return (n >>> 0) * 2.3283064365386963e-10; // 2^-32 + }; + } + + // amd + if (typeof define !== 'undefined' && define.amd) define(function() {return SimplexNoise;}); + // common js + if (typeof exports !== 'undefined') exports.SimplexNoise = SimplexNoise; + // browser + else if (typeof window !== 'undefined') window.SimplexNoise = SimplexNoise; + // nodejs + if (typeof module !== 'undefined') { + module.exports = SimplexNoise; + } + + })(); \ No newline at end of file diff --git a/public/style.css b/public/style.css index 2445b0d..67dee1c 100755 --- a/public/style.css +++ b/public/style.css @@ -1,5 +1,3 @@ -@import url("//cdn.jsdelivr.net/gh/be5invis/Iosevka@ff81c66/fonts.css"); - :root { --size: calc(100vmin / 1.618033988749895); } @@ -152,4 +150,94 @@ ul.alt-bullet li::before { .alt-bullet { padding-left: 1rem !important; +} + +.modal[open] .modal__toggle { + left: calc(50vw + 200px); + top: calc(15vh - 5px); + position: fixed; + z-index: 11; +} +.modal[open] .modal__toggle:focus { + outline: 2px solid #00f; +} +.modal__toggle::before { + content: 'Donate'; + cursor: pointer; + padding-left: 10px; + padding-right: 10px; + background-color: #241917; + color: #fff; + border-radius: 2px; + border: 2px solid #f3bbae; +} +.modal[open] .modal__toggle::before { + content: '✖'; + color: #fff !important; + font-size: 25px; +} +.modal__toggle { + position: relative; + list-style: none; + font-size: 14px; + font-family: Monaco, monospace; + text-align: left; + z-index: 4; +} +.modal__toggle::-webkit-details-marker { + display: none; +} +.modal__toggle:hover { + cursor: pointer; + opacity: .8; +} +.modal__background { + background-color:rgba(0, 0, 0, 0.65); + display: flex; + height: 100vh; + justify-content: center; + left: 0; + position: fixed; + top: 0; + width: 100vw; + z-index: 3; +} +.modal__body { + border: 2px solid #f3bbae92; + background: rgba(36, 25, 23, 1); + color: #f3bbae; + font-size: 1.6rem; + font-weight: 600; + padding: 20px 20px; + position: fixed; + text-align: left; + top: 15vh; + left: 50%; + transform: translateX(-50%); + width: 80%; + max-width: 400px; + z-index: 10; + word-wrap: break-word; + font-family: Monaco, monospace; +} + +.modal__text { + line-height: 1.6; + margin: 0; + font-size: 12px; +} + +.crypto-address { + word-wrap: break-word; + display: block; + font-size: 12px !important; + background-color: #241917; + color: #fff; + border-radius: 2px; + border: 2px solid #f3bbae; + padding: 5px; +} + +.links { + padding-left: 0.85rem; } \ No newline at end of file