|
|
|
@@ -384,6 +384,10 @@ function setup() { |
|
|
|
console.log("Done"); |
|
|
|
} |
|
|
|
|
|
|
|
function ease(t, k) { |
|
|
|
return 1 - Math.pow(2, -k * (1 - t)); |
|
|
|
} |
|
|
|
|
|
|
|
function updateOverlay(points, clicked) { |
|
|
|
|
|
|
|
const overlay = document.querySelector("#overlay"); |
|
|
|
@@ -412,8 +416,13 @@ function updateOverlay(points, clicked) { |
|
|
|
overlayCtx.ellipse(x, y, radius * scale, radius * scale, 0, 0, 2 * Math.PI); |
|
|
|
|
|
|
|
const gradient = overlayCtx.createRadialGradient(x, y, 0, x, y, Math.floor(radius * scale)); |
|
|
|
gradient.addColorStop((100-softness)/100, '#000000FF'); |
|
|
|
gradient.addColorStop(1, '#00000000'); |
|
|
|
|
|
|
|
const maxOpacity = ease(0, 1 / (0.001 + softness / 100)); |
|
|
|
|
|
|
|
for (let t=0 ; t <= 20; t+= 1) { |
|
|
|
let eased = ease(t/20.0, 1 / (0.001 + softness / 100)) / maxOpacity; |
|
|
|
gradient.addColorStop(t/20.0, `rgba(0, 0, 0, ${eased}`); |
|
|
|
} |
|
|
|
overlayCtx.fillStyle = gradient; |
|
|
|
|
|
|
|
overlayCtx.fill(); |
|
|
|
|