double t = (double)frameNumber / totalFrames; // 0..1 double waveCycle = Math.Sin(t * Math.PI * 2); // full cycle per 60s
// Wave offset: -12px to +15px int waveAmplitude = (int)(waveCycle * 13.5); windows vista animated desktop background
| Time (s) | Element | Action | |----------|---------|--------| | 0.0β5.0 | Wave | Slight upward bend (amplitude +15px) | | 5.0β15.0 | Wave | Smoothly returns to neutral | | 15.0β25.0 | Wave | Slight downward bend (amplitude -12px) | | 25.0β30.0 | Wave | Returns to neutral | | 30.0β32.0 | Light beam | Sweeps RβL, 2 sec duration | | 0β60 | Orbs (x3) | Each orb expands to 150% size over 10s, contracts over 10s, offset phases | | 0β60 | Particles | Drift from bottom-right to top-left, fade in/out, random speeds (0.5β2px/frame) | double t = (double)frameNumber / totalFrames; // 0