pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/easing/bounce.go (about) 1 package easing 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 // BounceIn accelerating from zero velocity 11 // https://easings.net/#easeInBounce 12 func BounceIn(t, b, c, d float64) float64 { 13 if t > d { 14 return c 15 } 16 17 return c - BounceOut(d-t, 0.0, c, d) + b 18 } 19 20 // BounceOut Decelerating to zero velocity 21 // https://easings.net/#easeOutBounce 22 func BounceOut(t, b, c, d float64) float64 { 23 if t > d { 24 return c 25 } 26 27 t /= d 28 29 switch { 30 case t < 1/2.75: 31 return c*(7.5625*t*t) + b 32 case t < 2/2.75: 33 t -= 1.5 / 2.75 34 return c*(7.5625*t*t+0.75) + b 35 case t < 2.5/2.75: 36 t -= 2.25 / 2.75 37 return c*(7.5625*t*t+0.9375) + b 38 } 39 40 t -= 2.625 / 2.75 41 return c*(7.5625*t*t+0.984375) + b 42 } 43 44 // BounceInOut acceleration until halfway, then deceleration 45 // https://easings.net/#easeInOutBounce 46 func BounceInOut(t, b, c, d float64) float64 { 47 if t > d { 48 return c 49 } 50 51 if t < d/2 { 52 return BounceIn(t*2, 0.0, c, d)*0.5 + b 53 } 54 55 return BounceOut(t*2-d, 0.0, c, d)*0.5 + c*0.5 + b 56 }