1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | //These functions assume 'position' is of the _scale_ (0.0 to 1.0), though they can be outside that _range_. //For consistency, this 'Coverts' an EaseIn function to... an EaseIn function. It doesn't actually do anything. inline float DoEaseIn(EaseFunction easeFunction, float position) { return easeFunction(position); } //Converts a EaseIn function to an EaseOut function. float DoEaseOut(EaseFunction easeFunction, float position) { float result = easeFunction(1.0f - position); return (1.0f - result); } //Converts a EaseIn function to an EaseInOut function. float DoEaseInOut(EaseFunction easeFunction, float position) { //If less than halfway, Ease-In. if(position < 0.5f) { //Doubles the positon to scales it from (0.0 - 0.5) to (0.0 - 1.0) float result = easeFunction(position * 2.0f); //Scale to (0.0 - 0.5), by halfing the result. return (result * 0.5f); } //If more than halfway, Ease-Out. else { //Scales the position from (0.5 - 1.0) to (0.0 - 1.0) float result = DoEaseOut(easeFunction, (position * 2.0f) - 1.0f); //Scale to (0.5 - 1.0), by halfing the result and then adding half. return (result * 0.5f) + 0.5f; } } //Converts an EaseIn function to an EaseOutIn function. float DoEaseOutIn(EaseFunction easeFunction, float position) { //If less than halfway, Ease-Out. if(position < 0.5f) { //Doubles the positon to scales it from (0.0 - 0.5) to (0.0 - 1.0) float result = DoEaseOut(easeFunction, position * 2.0f); //Scale to (0.0 - 0.5), by halfing the result. return (result * 0.5f); } //If more than halfway, Ease-In. else { //Scales the position from (0.5 - 1.0) to (0.0 - 1.0) float result = easeFunction((position * 2.0f) - 1.0f); //Scale to (0.5 - 1.0), by halfing the result and then adding half. return (result * 0.5f) + 0.5f; } } |
Ly9UaGVzZSBmdW5jdGlvbnMgYXNzdW1lICdwb3NpdGlvbicgaXMgb2YgdGhlIF9zY2FsZV8gKDAuMCB0byAxLjApLCB0aG91Z2ggdGhleSBjYW4gYmUgb3V0c2lkZSB0aGF0IF9yYW5nZV8uCgovL0ZvciBjb25zaXN0ZW5jeSwgdGhpcyAnQ292ZXJ0cycgYW4gRWFzZUluIGZ1bmN0aW9uIHRvLi4uIGFuIEVhc2VJbiBmdW5jdGlvbi4gSXQgZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZy4KaW5saW5lIGZsb2F0IERvRWFzZUluKEVhc2VGdW5jdGlvbiBlYXNlRnVuY3Rpb24sIGZsb2F0IHBvc2l0aW9uKSB7IHJldHVybiBlYXNlRnVuY3Rpb24ocG9zaXRpb24pOyB9CgovL0NvbnZlcnRzIGEgRWFzZUluIGZ1bmN0aW9uIHRvIGFuIEVhc2VPdXQgZnVuY3Rpb24uCmZsb2F0IERvRWFzZU91dChFYXNlRnVuY3Rpb24gZWFzZUZ1bmN0aW9uLCBmbG9hdCBwb3NpdGlvbikKewogICAgZmxvYXQgcmVzdWx0ID0gZWFzZUZ1bmN0aW9uKDEuMGYgLSBwb3NpdGlvbik7CiAgICByZXR1cm4gKDEuMGYgLSByZXN1bHQpOwp9CgovL0NvbnZlcnRzIGEgRWFzZUluIGZ1bmN0aW9uIHRvIGFuIEVhc2VJbk91dCBmdW5jdGlvbi4KZmxvYXQgRG9FYXNlSW5PdXQoRWFzZUZ1bmN0aW9uIGVhc2VGdW5jdGlvbiwgZmxvYXQgcG9zaXRpb24pCnsKICAgIC8vSWYgbGVzcyB0aGFuIGhhbGZ3YXksIEVhc2UtSW4uCiAgICBpZihwb3NpdGlvbiA8IDAuNWYpCiAgICB7CiAgICAgICAgLy9Eb3VibGVzIHRoZSBwb3NpdG9uIHRvIHNjYWxlcyBpdCBmcm9tICgwLjAgLSAwLjUpIHRvICgwLjAgLSAxLjApCiAgICAgICAgZmxvYXQgcmVzdWx0ID0gZWFzZUZ1bmN0aW9uKHBvc2l0aW9uICogMi4wZik7IAogICAgICAgIAogICAgICAgIC8vU2NhbGUgdG8gKDAuMCAtIDAuNSksIGJ5IGhhbGZpbmcgdGhlIHJlc3VsdC4KICAgICAgICByZXR1cm4gKHJlc3VsdCAqIDAuNWYpOwogICAgfQogICAgLy9JZiBtb3JlIHRoYW4gaGFsZndheSwgRWFzZS1PdXQuCiAgICBlbHNlCiAgICB7CiAgICAgICAgLy9TY2FsZXMgdGhlIHBvc2l0aW9uIGZyb20gKDAuNSAtIDEuMCkgdG8gKDAuMCAtIDEuMCkKICAgICAgICBmbG9hdCByZXN1bHQgPSBEb0Vhc2VPdXQoZWFzZUZ1bmN0aW9uLCAocG9zaXRpb24gKiAyLjBmKSAtIDEuMGYpOwogICAgICAgIAogICAgICAgIC8vU2NhbGUgdG8gKDAuNSAtIDEuMCksIGJ5IGhhbGZpbmcgdGhlIHJlc3VsdCBhbmQgdGhlbiBhZGRpbmcgaGFsZi4KICAgICAgICByZXR1cm4gKHJlc3VsdCAqIDAuNWYpICsgMC41ZjsKICAgIH0KfQoKLy9Db252ZXJ0cyBhbiBFYXNlSW4gZnVuY3Rpb24gdG8gYW4gRWFzZU91dEluIGZ1bmN0aW9uLiAKZmxvYXQgRG9FYXNlT3V0SW4oRWFzZUZ1bmN0aW9uIGVhc2VGdW5jdGlvbiwgZmxvYXQgcG9zaXRpb24pCnsKICAgIC8vSWYgbGVzcyB0aGFuIGhhbGZ3YXksIEVhc2UtT3V0LgogICAgaWYocG9zaXRpb24gPCAwLjVmKQogICAgewogICAgICAgIC8vRG91YmxlcyB0aGUgcG9zaXRvbiB0byBzY2FsZXMgaXQgZnJvbSAoMC4wIC0gMC41KSB0byAoMC4wIC0gMS4wKQogICAgICAgIGZsb2F0IHJlc3VsdCA9IERvRWFzZU91dChlYXNlRnVuY3Rpb24sIHBvc2l0aW9uICogMi4wZik7CiAgICAgICAgCiAgICAgICAgLy9TY2FsZSB0byAoMC4wIC0gMC41KSwgYnkgaGFsZmluZyB0aGUgcmVzdWx0LgogICAgICAgIHJldHVybiAocmVzdWx0ICogMC41Zik7CiAgICB9CiAgICAvL0lmIG1vcmUgdGhhbiBoYWxmd2F5LCBFYXNlLUluLgogICAgZWxzZQogICAgewogICAgICAgIC8vU2NhbGVzIHRoZSBwb3NpdGlvbiBmcm9tICgwLjUgLSAxLjApIHRvICgwLjAgLSAxLjApCiAgICAgICAgZmxvYXQgcmVzdWx0ID0gZWFzZUZ1bmN0aW9uKChwb3NpdGlvbiAqIDIuMGYpIC0gMS4wZik7CiAgICAgICAgCiAgICAgICAgLy9TY2FsZSB0byAoMC41IC0gMS4wKSwgYnkgaGFsZmluZyB0aGUgcmVzdWx0IGFuZCB0aGVuIGFkZGluZyBoYWxmLgogICAgICAgIHJldHVybiAocmVzdWx0ICogMC41ZikgKyAwLjVmOwogICAgfQp9


