| 259 | } |
| 260 | |
| 261 | u16 easeOutCubic16(u16 i) { |
| 262 | // ease-out cubic: 1 - (1-t)³ |
| 263 | // For 16-bit: y = MAX - (MAX-i)³ / MAX² |
| 264 | constexpr u32 MAX = 0xFFFF; // 65535 |
| 265 | constexpr fl::u64 DENOM = (fl::u64)MAX * MAX; // 65535² |
| 266 | constexpr fl::u64 ROUND = DENOM >> 1; // for rounding |
| 267 | |
| 268 | fl::u64 d = MAX - i; // (MAX - i) |
| 269 | fl::u64 cube = d * d * d; // (MAX-i)³ |
| 270 | fl::u64 num = cube + ROUND; |
| 271 | return u16(MAX - (num / DENOM)); |
| 272 | } |
| 273 | |
| 274 | u16 easeInSine16(u16 i) { |
| 275 | // ease-in sine: 1 - cos(t * π/2) |