diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-18 23:45:11 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-18 23:45:11 +0300 |
| commit | 341535d0de1214a702439c293d4c769668d1a39c (patch) | |
| tree | 10d9d1f9065023eed06c7142bb0bae696d8a532f | |
| parent | 58e9a8abbc808a8ff3f034cecdb810d96c3ed5fe (diff) | |
feat(aurora): make wild mode dramatically more intense
- 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 <noreply@anthropic.com>
| -rw-r--r-- | internal/generator/templates/themes/aurora.tmpl | 15 |
1 files 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; |
