| 246 | } |
| 247 | |
| 248 | u16 easeInCubic16(u16 i) { |
| 249 | // Simple cubic ease-in: i³ scaled to 16-bit range |
| 250 | // y = i³ / MAX² |
| 251 | constexpr u32 MAX = 0xFFFF; // 65535 |
| 252 | constexpr fl::u64 DENOM = (fl::u64)MAX * MAX; // 65535² |
| 253 | constexpr fl::u64 ROUND = DENOM >> 1; // for rounding |
| 254 | |
| 255 | fl::u64 ii = i; |
| 256 | fl::u64 cube = ii * ii * ii; // i³ |
| 257 | fl::u64 num = cube + ROUND; |
| 258 | return u16(num / DENOM); |
| 259 | } |
| 260 | |
| 261 | u16 easeOutCubic16(u16 i) { |
| 262 | // ease-out cubic: 1 - (1-t)³ |