From 341535d0de1214a702439c293d4c769668d1a39c Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 18 Apr 2026 23:45:11 +0300 Subject: feat(aurora): make wild mode dramatically more intense MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Time offset multiplier raised from 7× to 18× (waves churn ~19× faster) - Wave amplitude boosted 3.2× in wild mode (tall, violent ribbon swings) - Camera sways left/right and bobs up/down while wild is active - Ribbons drift vertically independently so they cross and tangle mid-air Co-Authored-By: Claude Sonnet 4.6 --- internal/generator/templates/themes/aurora.tmpl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/internal/generator/templates/themes/aurora.tmpl b/internal/generator/templates/themes/aurora.tmpl index 114b23c..e71c576 100644 --- a/internal/generator/templates/themes/aurora.tmpl +++ b/internal/generator/templates/themes/aurora.tmpl @@ -272,21 +272,30 @@ function animate() { requestAnimationFrame(animate); var realT = clock.getElapsedTime(); - _snoTOffset += (realT - _snoLastT) * (_wild ? 7 : 0); + // Wild mode: accelerate time 18× so waves churn much faster + _snoTOffset += (realT - _snoLastT) * (_wild ? 18 : 0); _snoLastT = realT; var t = realT + _snoTOffset; + var ampMult = _wild ? 3.2 : 1; + // Camera sways left/right and bobs up/down in wild mode + camera.position.x = _wild ? Math.sin(t * 0.28) * 10 : 0; + camera.position.y = _wild ? 5 + Math.cos(t * 0.19) * 4 : 5; + for (var r = 0; r < ribbons.length; r++) { var rb = ribbons[r]; var pos = rb.geo.attributes.position; var count = pos.count; + // In wild mode ribbons also drift vertically so they cross and tangle + var yDrift = _wild ? Math.sin(t * rb.freq * 0.4 + r * 1.1) * 6 : 0; + rb.mesh.position.y = ribbonY[r] + yDrift; // PlaneGeometry vertices: (SEG_W+1)*2 total; top row is every other vertex for (var i = 0; i < count; i++) { var x = pos.getX(i); // Only animate top row (y > 0 in local space) for the waving top edge if (pos.getY(i) > 0) { - pos.setY(i, rb.amp * Math.sin(t * rb.freq + x * 0.08 + rb.phase) - + rb.amp * 0.4 * Math.cos(t * rb.freq * 0.7 + x * 0.05)); + pos.setY(i, rb.amp * ampMult * Math.sin(t * rb.freq + x * 0.08 + rb.phase) + + rb.amp * ampMult * 0.4 * Math.cos(t * rb.freq * 0.7 + x * 0.05)); } } pos.needsUpdate = true; -- cgit v1.2.3