| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197 |
- /*
- * Copyright 2011-2018 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
- */
- #ifndef BX_EASING_H_HEADER_GUARD
- #define BX_EASING_H_HEADER_GUARD
- #include "math.h"
- // Reference:
- // http://easings.net/
- // http://robertpenner.com/easing/
- namespace bx
- {
- ///
- struct Easing
- {
- enum Enum
- {
- Linear,
- Step,
- SmoothStep,
- InQuad,
- OutQuad,
- InOutQuad,
- OutInQuad,
- InCubic,
- OutCubic,
- InOutCubic,
- OutInCubic,
- InQuart,
- OutQuart,
- InOutQuart,
- OutInQuart,
- InQuint,
- OutQuint,
- InOutQuint,
- OutInQuint,
- InSine,
- OutSine,
- InOutSine,
- OutInSine,
- InExpo,
- OutExpo,
- InOutExpo,
- OutInExpo,
- InCirc,
- OutCirc,
- InOutCirc,
- OutInCirc,
- InElastic,
- OutElastic,
- InOutElastic,
- OutInElastic,
- InBack,
- OutBack,
- InOutBack,
- OutInBack,
- InBounce,
- OutBounce,
- InOutBounce,
- OutInBounce,
- Count
- };
- };
- ///
- typedef float (*EaseFn)(float _t);
- ///
- EaseFn getEaseFunc(Easing::Enum _enum);
- /// Linear.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *******
- /// | *******
- /// | ********
- /// | *******
- /// | *******
- /// | ********
- /// | *******
- /// | ********
- /// | *******
- /// +*******--------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeLinear(float _t);
- /// Step.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | ********************************
- /// |
- /// |
- /// |
- /// |
- /// |
- /// |
- /// |
- /// |
- /// |
- /// +********************************-------------------------------->
- /// |
- /// |
- /// |
- /// |
- /// |
- ///
- float easeStep(float _t);
- /// Smooth step.
- ///
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *************
- /// | *******
- /// | ******
- /// | *****
- /// | *****
- /// | *****
- /// | *****
- /// | ******
- /// | *******
- /// +*************--------------------------------------------------->
- /// |
- /// |
- /// |
- /// |
- /// |
- ///
- float easeSmoothStep(float _t);
- /// Quad.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ****
- /// | ****
- /// | *****
- /// | *****
- /// | *****
- /// | ******
- /// | ******
- /// | ********
- /// | *********
- /// +*********************------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInQuad(float _t);
- /// Out quad.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *********************
- /// | *********
- /// | *******
- /// | ******
- /// | ******
- /// | *****
- /// | *****
- /// | *****
- /// | ****
- /// +****------------------------------------------------------------>
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutQuad(float _t);
- /// In out quad.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ***************
- /// | *******
- /// | *****
- /// | *****
- /// | ****
- /// | *****
- /// | *****
- /// | *****
- /// | *******
- /// +***************------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutQuad(float _t);
- /// Out in quad.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ****
- /// | *****
- /// | *****
- /// | *******
- /// | ***************
- /// | ****************
- /// | *******
- /// | *****
- /// | *****
- /// +****------------------------------------------------------------>
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInQuad(float _t);
- /// In cubic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ***
- /// | ***
- /// | ****
- /// | ***
- /// | ****
- /// | ****
- /// | ******
- /// | ******
- /// | *********
- /// +******************************---------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInCubic(float _t);
- /// Out cubic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | ******************************
- /// | *********
- /// | ******
- /// | ******
- /// | ****
- /// | ****
- /// | ****
- /// | ****
- /// | ***
- /// +***------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutCubic(float _t);
- /// In out cubic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | *******************
- /// | ******
- /// | ****
- /// | ****
- /// | ***
- /// | ****
- /// | ***
- /// | ****
- /// | ******
- /// +*******************--------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutCubic(float _t);
- /// Out in cubic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ***
- /// | ***
- /// | ****
- /// | ******
- /// | *******************
- /// | ********************
- /// | ******
- /// | ****
- /// | ****
- /// +***------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInCubic(float _t);
- /// In quart.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | **
- /// | ***
- /// | ***
- /// | ***
- /// | ****
- /// | ****
- /// | ****
- /// | ******
- /// | *******
- /// +************************************---------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInQuart(float _t);
- /// Out quart.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | ************************************
- /// | ********
- /// | ******
- /// | ****
- /// | ****
- /// | ****
- /// | ***
- /// | ***
- /// | ***
- /// +**-------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutQuart(float _t);
- /// In out quart.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **********************
- /// | *****
- /// | ****
- /// | ***
- /// | **
- /// | ***
- /// | ***
- /// | ****
- /// | *****
- /// +**********************------------------------------------------>
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutQuart(float _t);
- /// Out in quart.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | **
- /// | ***
- /// | ****
- /// | *****
- /// | ***********************
- /// | ***********************
- /// | *****
- /// | ****
- /// | ***
- /// +**-------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInQuart(float _t);
- /// In quint.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | **
- /// | **
- /// | ***
- /// | ***
- /// | ***
- /// | ***
- /// | ****
- /// | *****
- /// | *******
- /// +*****************************************----------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInQuint(float _t);
- /// Out quint.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | **
- /// | *****************************************
- /// | *******
- /// | *****
- /// | ****
- /// | ***
- /// | ***
- /// | ***
- /// | ***
- /// | **
- /// +**-------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutQuint(float _t);
- /// In out quint.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | **
- /// | ************************
- /// | ****
- /// | ***
- /// | ***
- /// | **
- /// | ***
- /// | ***
- /// | ***
- /// | ****
- /// +************************---------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutQuint(float _t);
- /// Out in quint.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | **
- /// | ***
- /// | ***
- /// | ****
- /// | *************************
- /// | **************************
- /// | ****
- /// | ***
- /// | ***
- /// +**-------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInQuint(float _t);
- /// In sine.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ****
- /// | *****
- /// | *****
- /// | *****
- /// | ******
- /// | ******
- /// | ******
- /// | *******
- /// | *********
- /// +*******************--------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInSine(float _t);
- /// Out sine.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *******************
- /// | *********
- /// | *******
- /// | ******
- /// | ******
- /// | ******
- /// | *****
- /// | *****
- /// | *****
- /// +*****----------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutSine(float _t);
- /// In out sine.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | **************
- /// | ******
- /// | ******
- /// | *****
- /// | *****
- /// | ******
- /// | *****
- /// | ******
- /// | ******
- /// +**************-------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutSine(float _t);
- /// Out in sine.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *****
- /// | *****
- /// | ******
- /// | ******
- /// | **************
- /// | ***************
- /// | ******
- /// | ******
- /// | *****
- /// +*****----------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInSine(float _t);
- /// In exponential.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **
- /// | **
- /// | **
- /// | ***
- /// | ***
- /// | ***
- /// | ****
- /// | ********
- /// +*******************************************--------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInExpo(float _t);
- /// Out exponential.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | *******************************************
- /// | ********
- /// | ****
- /// | ****
- /// | ***
- /// | ***
- /// | **
- /// | **
- /// | **
- /// +*--------------------------------------------------------------->
- /// |
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutExpo(float _t);
- /// In out exponential.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | *************************
- /// | ****
- /// | ***
- /// | **
- /// | **
- /// | *
- /// | **
- /// | ***
- /// | ****
- /// +*************************--------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutExpo(float _t);
- /// Out in exponential.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **
- /// | ***
- /// | ****
- /// | **************************
- /// | **************************
- /// | ****
- /// | ***
- /// | **
- /// +**-------------------------------------------------------------->
- /// |
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInExpo(float _t);
- /// In circle.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **
- /// | **
- /// | ****
- /// | ****
- /// | *****
- /// | *******
- /// | ********
- /// | ************
- /// +****************************------------------------------------>
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInCirc(float _t);
- /// Out circle.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ****************************
- /// | ************
- /// | ********
- /// | *******
- /// | *****
- /// | ****
- /// | ***
- /// | **
- /// |**
- /// +*--------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutCirc(float _t);
- /// In out circle.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ********************
- /// | *******
- /// | *****
- /// | ***
- /// | *
- /// | **
- /// | ***
- /// | *****
- /// | *******
- /// +********************-------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutCirc(float _t);
- /// Out in circle.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | ***
- /// | *****
- /// | *******
- /// | ********************
- /// | *********************
- /// | *******
- /// | *****
- /// |***
- /// +*--------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInCirc(float _t);
- /// Out elastic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **
- /// | *
- /// | **
- /// | *
- /// | *
- /// | *
- /// | *
- /// | ***** **
- /// +-***********--------***********---------****---***---------*---->
- /// |** ********** *********** ** **
- /// | ** *
- /// | ** *
- /// | *****
- /// |
- ///
- float easeOutElastic(float _t);
- /// In elastic.
- ///
- /// ^
- /// |
- /// | *****
- /// | * **
- /// | ** **
- /// | ** ** ********** ********** **
- /// | * *** ***** *********** ***********
- /// | ** *****
- /// | *
- /// | *
- /// | **
- /// | *
- /// | **
- /// | *
- /// |**
- /// +*--------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInElastic(float _t);
- /// In out elastic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// | ***
- /// | ** ** ***** ****** *
- /// | * ****** ****** ******
- /// | *
- /// | *
- /// | **
- /// | *
- /// | **
- /// | *
- /// | *
- /// | *
- /// +******----******----*****----**--------------------------------->
- /// |* ****** ****** *** *
- /// | ***
- /// |
- /// |
- /// |
- ///
- float easeInOutElastic(float _t);
- /// Out in elastic.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | *
- /// | *
- /// | *** *
- /// | ** ** ***** ****** ******* ****** ***** **
- /// | * ****** ****** ******* ****** ****** *** *
- /// | * ***
- /// | *
- /// |**
- /// +*--------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInElastic(float _t);
- /// In back.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// +*-------------------------------------------------***----------->
- /// |************* ***
- /// | ******* ****
- /// | ******* *****
- /// | ******************
- /// |
- ///
- float easeInBack(float _t);
- /// Out back.
- ///
- /// ^
- /// |
- /// | ******************
- /// | ***** *******
- /// | **** *******
- /// | *** *************
- /// | ***
- /// | **
- /// | ***
- /// | **
- /// | ***
- /// | **
- /// | **
- /// | **
- /// | **
- /// +**-------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutBack(float _t);
- /// In out back.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// | **************
- /// | **** **********
- /// | **
- /// | ***
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// | **
- /// +*------------------------**------------------------------------->
- /// |********** ****
- /// | **************
- /// |
- /// |
- /// |
- ///
- float easeInOutBack(float _t);
- /// Out in back.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **
- /// | **
- /// | ************** **
- /// | **** *********** **
- /// | ** ********** ****
- /// | *** **************
- /// | **
- /// | **
- /// +**-------------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInBack(float _t);
- /// Out bounce.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ********
- /// | ****
- /// | ***
- /// | ***
- /// | ***
- /// | **
- /// | **
- /// | ************** **
- /// | **** **** **
- /// +********************------------------****---------------------->
- /// |* *
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutBounce(float _t);
- /// In bounce.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | **** ********************
- /// | *** **** ****
- /// | ** **************
- /// | **
- /// | ***
- /// | ***
- /// | ***
- /// | ***
- /// | ****
- /// +********-------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInBounce(float _t);
- /// In out bounce.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// | *
- /// | ***** ************
- /// | ** *******
- /// | ***
- /// | ***
- /// | ******
- /// | *******
- /// | ***
- /// | **
- /// | ******* **
- /// +************------****------------------------------------------>
- /// |* *
- /// |
- /// |
- /// |
- /// |
- ///
- float easeInOutBounce(float _t);
- /// Out in bounce.
- ///
- /// ^
- /// |
- /// |
- /// |
- /// |
- /// |
- /// | ******
- /// | ***
- /// | **
- /// | ******* **
- /// | * ************ ****
- /// | ***** ************* *
- /// | ** *******
- /// | ***
- /// | ***
- /// +******---------------------------------------------------------->
- /// |*
- /// |
- /// |
- /// |
- /// |
- ///
- float easeOutInBounce(float _t);
- } // namespace bx
- #include "inline/easing.inl"
- #endif // BX_EASING_H_HEADER_GUARD
|