From 65cdc570d79f1c600bd7a74d13a6227eb1aeb80d Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 18 Apr 2026 23:49:51 +0300 Subject: feat(cosmos): make wild mode dramatically more intense MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Speed multiplier raised from 10× to 22× - Planet rings now counter-spin and tilt independently in wild mode - Asteroid orbits breathe in/out and scatter vertically (radial + y sine waves) - Camera swings 20 units left/right, bobs 10 units, dives ±14 units in z - FOV pulses 42°–78° giving a dramatic zoom-in/zoom-out feel Co-Authored-By: Claude Sonnet 4.6 --- internal/generator/templates/themes/cosmos.tmpl | 32 +++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/internal/generator/templates/themes/cosmos.tmpl b/internal/generator/templates/themes/cosmos.tmpl index 79d054d..594796c 100644 --- a/internal/generator/templates/themes/cosmos.tmpl +++ b/internal/generator/templates/themes/cosmos.tmpl @@ -289,21 +289,39 @@ requestAnimationFrame(animate); var t = clock.getElapsedTime(); - var sm = _wild ? 10 : 1; + var sm = _wild ? 22 : 1; planet.rotation.y += 0.0015 * sm; - // Update asteroid belt — warp speed in wild mode + // Planet rings tilt and counter-spin wildly + for (var ri = 0; ri < planetRings.length; ri++) { + planetRings[ri].rotation.y += 0.002 * sm; + planetRings[ri].rotation.z += 0.001 * sm * (ri % 2 === 0 ? 1 : -1); + } + + // Asteroid belt: warp-speed orbit + radial breathing + vertical scatter in wild var pos = asteroids.geometry.attributes.position; for (var i = 0; i < ASTEROID_COUNT; i++) { asteroidAngles[i] += asteroidSpeeds[i] * sm; - var a = asteroidAngles[i], r = asteroidRadii[i]; - pos.setXYZ(i, Math.cos(a) * r, asteroidY[i], Math.sin(a) * r); + var a = asteroidAngles[i]; + var r = asteroidRadii[i] + (_wild ? Math.sin(t * 2.1 + i * 0.3) * 9 : 0); + var y = asteroidY[i] + (_wild ? Math.sin(t * 3.0 + i * 0.7) * 2.5 : 0); + pos.setXYZ(i, Math.cos(a) * r, y, Math.sin(a) * r); } pos.needsUpdate = true; - // Camera orbits gently - camera.position.x = Math.sin(t * 0.06) * 6; - camera.position.y = 6 + Math.sin(t * 0.04) * 2; + // Camera: chaotic deep-space flight in wild, gentle orbit otherwise + if (_wild) { + camera.position.x = Math.sin(t * 0.38) * 20; + camera.position.y = 6 + Math.sin(t * 0.29) * 10; + camera.position.z = 38 + Math.sin(t * 0.21) * 14; + camera.fov = 60 + Math.sin(t * 0.47) * 18; + } else { + camera.position.x = Math.sin(t * 0.06) * 6; + camera.position.y = 6 + Math.sin(t * 0.04) * 2; + camera.position.z = 38; + camera.fov = 60; + } + camera.updateProjectionMatrix(); renderer.render(scene, camera); } -- cgit v1.2.3