//Convience functions that scale the result for you, scaling both the duration and the value.
float ScaledEase(const EaseFunction &easeFunction, float currentTime, float startPos, float stopPos, float startTime, float stopTime)
{
//Get the range of the values.
float timeRange = (stopTime - startTime);
//Adjust the position from (begin, end) to (0, range), and convert to float.
float adjustedTime = (currentTime - startTime);
//Convert to the (0.0f, 1.0f) scale.
adjustedTime /= timeRange;
//Calculate the current position in the easing function, after adjusting 'currentTime' to the range (0.0 - 1.0).
float easePos = easeFunction(adjustedTime);
//Get the range to convert the ease into.
float distanceRange = (stopPos - startPos);
//Calculate and return the result.
return (distanceRange * easePos) + startPos;
}
Ly9Db252aWVuY2UgZnVuY3Rpb25zIHRoYXQgc2NhbGUgdGhlIHJlc3VsdCBmb3IgeW91LCBzY2FsaW5nIGJvdGggdGhlIGR1cmF0aW9uIGFuZCB0aGUgdmFsdWUuCmZsb2F0IFNjYWxlZEVhc2UoY29uc3QgRWFzZUZ1bmN0aW9uICZlYXNlRnVuY3Rpb24sIGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBzdGFydFBvcywgZmxvYXQgc3RvcFBvcywgZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBzdG9wVGltZSkKewogICAgLy9HZXQgdGhlIHJhbmdlIG9mIHRoZSB2YWx1ZXMuCiAgICBmbG9hdCB0aW1lUmFuZ2UgPSAoc3RvcFRpbWUgLSBzdGFydFRpbWUpOwogICAgICAgICAgICAgICAgCiAgICAvL0FkanVzdCB0aGUgcG9zaXRpb24gZnJvbSAoYmVnaW4sIGVuZCkgdG8gKDAsIHJhbmdlKSwgYW5kIGNvbnZlcnQgdG8gZmxvYXQuCiAgICBmbG9hdCBhZGp1c3RlZFRpbWUgPSAoY3VycmVudFRpbWUgLSBzdGFydFRpbWUpOwogICAgICAgICAgICAgICAgCiAgICAvL0NvbnZlcnQgdG8gdGhlICgwLjBmLCAxLjBmKSBzY2FsZS4KICAgIGFkanVzdGVkVGltZSAvPSB0aW1lUmFuZ2U7CiAgICAKICAgIC8vQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBlYXNpbmcgZnVuY3Rpb24sIGFmdGVyIGFkanVzdGluZyAnY3VycmVudFRpbWUnIHRvIHRoZSByYW5nZSAoMC4wIC0gMS4wKS4KICAgIGZsb2F0IGVhc2VQb3MgPSBlYXNlRnVuY3Rpb24oYWRqdXN0ZWRUaW1lKTsKICAgIAogICAgLy9HZXQgdGhlIHJhbmdlIHRvIGNvbnZlcnQgdGhlIGVhc2UgaW50by4KICAgIGZsb2F0IGRpc3RhbmNlUmFuZ2UgPSAoc3RvcFBvcyAtIHN0YXJ0UG9zKTsKICAgIAogICAgLy9DYWxjdWxhdGUgYW5kIHJldHVybiB0aGUgcmVzdWx0LgogICAgcmV0dXJuIChkaXN0YW5jZVJhbmdlICogZWFzZVBvcykgKyBzdGFydFBvczsKfQ==