| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- /*
- * Copyright (c), Recep Aslantas.
- *
- * MIT License (MIT), http://opensource.org/licenses/MIT
- * Full license can be found in the LICENSE file
- */
- #ifndef cglm_ease_h
- #define cglm_ease_h
- #include "common.h"
- CGLM_INLINE
- float
- glm_ease_linear(float t) {
- return t;
- }
- CGLM_INLINE
- float
- glm_ease_sine_in(float t) {
- return sinf((t - 1.0f) * GLM_PI_2f) + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_sine_out(float t) {
- return sinf(t * GLM_PI_2f);
- }
- CGLM_INLINE
- float
- glm_ease_sine_inout(float t) {
- return 0.5f * (1.0f - cosf(t * GLM_PIf));
- }
- CGLM_INLINE
- float
- glm_ease_quad_in(float t) {
- return t * t;
- }
- CGLM_INLINE
- float
- glm_ease_quad_out(float t) {
- return -(t * (t - 2.0f));
- }
- CGLM_INLINE
- float
- glm_ease_quad_inout(float t) {
- float tt;
- tt = t * t;
- if (t < 0.5f)
- return 2.0f * tt;
- return (-2.0f * tt) + (4.0f * t) - 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_cubic_in(float t) {
- return t * t * t;
- }
- CGLM_INLINE
- float
- glm_ease_cubic_out(float t) {
- float f;
- f = t - 1.0f;
- return f * f * f + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_cubic_inout(float t) {
- float f;
- if (t < 0.5f)
- return 4.0f * t * t * t;
- f = 2.0f * t - 2.0f;
- return 0.5f * f * f * f + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_quart_in(float t) {
- float f;
- f = t * t;
- return f * f;
- }
- CGLM_INLINE
- float
- glm_ease_quart_out(float t) {
- float f;
- f = t - 1.0f;
- return f * f * f * (1.0f - t) + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_quart_inout(float t) {
- float f, g;
- if (t < 0.5f) {
- f = t * t;
- return 8.0f * f * f;
- }
- f = t - 1.0f;
- g = f * f;
- return -8.0f * g * g + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_quint_in(float t) {
- float f;
- f = t * t;
- return f * f * t;
- }
- CGLM_INLINE
- float
- glm_ease_quint_out(float t) {
- float f, g;
- f = t - 1.0f;
- g = f * f;
- return g * g * f + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_quint_inout(float t) {
- float f, g;
- if (t < 0.5f) {
- f = t * t;
- return 16.0f * f * f * t;
- }
- f = 2.0f * t - 2.0f;
- g = f * f;
- return 0.5f * g * g * f + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_exp_in(float t) {
- if (t == 0.0f)
- return t;
- return powf(2.0f, 10.0f * (t - 1.0f));
- }
- CGLM_INLINE
- float
- glm_ease_exp_out(float t) {
- if (t == 1.0f)
- return t;
- return 1.0f - powf(2.0f, -10.0f * t);
- }
- CGLM_INLINE
- float
- glm_ease_exp_inout(float t) {
- if (t == 0.0f || t == 1.0f)
- return t;
- if (t < 0.5f)
- return 0.5f * powf(2.0f, (20.0f * t) - 10.0f);
- return -0.5f * powf(2.0f, (-20.0f * t) + 10.0f) + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_circ_in(float t) {
- return 1.0f - sqrtf(1.0f - (t * t));
- }
- CGLM_INLINE
- float
- glm_ease_circ_out(float t) {
- return sqrtf((2.0f - t) * t);
- }
- CGLM_INLINE
- float
- glm_ease_circ_inout(float t) {
- if (t < 0.5f)
- return 0.5f * (1.0f - sqrtf(1.0f - 4.0f * (t * t)));
- return 0.5f * (sqrtf(-((2.0f * t) - 3.0f) * ((2.0f * t) - 1.0f)) + 1.0f);
- }
- CGLM_INLINE
- float
- glm_ease_back_in(float t) {
- float o, z;
- o = 1.70158f;
- z = ((o + 1.0f) * t) - o;
- return t * t * z;
- }
- CGLM_INLINE
- float
- glm_ease_back_out(float t) {
- float o, z, n;
- o = 1.70158f;
- n = t - 1.0f;
- z = (o + 1.0f) * n + o;
- return n * n * z + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_back_inout(float t) {
- float o, z, n, m, s, x;
- o = 1.70158f;
- s = o * 1.525f;
- x = 0.5;
- n = t / 0.5f;
- if (n < 1.0f) {
- z = (s + 1) * n - s;
- m = n * n * z;
- return x * m;
- }
- n -= 2.0f;
- z = (s + 1.0f) * n + s;
- m = (n * n * z) + 2;
- return x * m;
- }
- CGLM_INLINE
- float
- glm_ease_elast_in(float t) {
- return sinf(13.0f * GLM_PI_2f * t) * powf(2.0f, 10.0f * (t - 1.0f));
- }
- CGLM_INLINE
- float
- glm_ease_elast_out(float t) {
- return sinf(-13.0f * GLM_PI_2f * (t + 1.0f)) * powf(2.0f, -10.0f * t) + 1.0f;
- }
- CGLM_INLINE
- float
- glm_ease_elast_inout(float t) {
- float a;
- a = 2.0f * t;
- if (t < 0.5f)
- return 0.5f * sinf(13.0f * GLM_PI_2f * a)
- * powf(2.0f, 10.0f * (a - 1.0f));
- return 0.5f * (sinf(-13.0f * GLM_PI_2f * a)
- * powf(2.0f, -10.0f * (a - 1.0f)) + 2.0f);
- }
- CGLM_INLINE
- float
- glm_ease_bounce_out(float t) {
- float tt;
- tt = t * t;
- if (t < (4.0f / 11.0f))
- return (121.0f * tt) / 16.0f;
- if (t < 8.0f / 11.0f)
- return ((363.0f / 40.0f) * tt) - ((99.0f / 10.0f) * t) + (17.0f / 5.0f);
- if (t < (9.0f / 10.0f))
- return (4356.0f / 361.0f) * tt
- - (35442.0f / 1805.0f) * t
- + (16061.0f / 1805.0f);
- return ((54.0f / 5.0f) * tt) - ((513.0f / 25.0f) * t) + (268.0f / 25.0f);
- }
- CGLM_INLINE
- float
- glm_ease_bounce_in(float t) {
- return 1.0f - glm_ease_bounce_out(1.0f - t);
- }
- CGLM_INLINE
- float
- glm_ease_bounce_inout(float t) {
- if (t < 0.5f)
- return 0.5f * (1.0f - glm_ease_bounce_out(t * 2.0f));
- return 0.5f * glm_ease_bounce_out(t * 2.0f - 1.0f) + 0.5f;
- }
- #endif /* cglm_ease_h */
|