//Binds an easing function that has multiple parameters to a function that takes just one float ('position') as a parameter.
//Whatever function you are binding needs to start with 'position' as the first parameter.
template<typename Function, typename... ExtraArgs>
EaseFunction MakeEaseIn(Function &&easeFunction, ExtraArgs&&... extraArgs)
{
return std::bind(easeFunction, std::placeholders::_1, std::forward<ExtraArgs>(extraArgs)...);
}
//Binds your EaseIn function for you, and returns an EaseOut function.
template<class... ExtraArgs>
EaseFunction MakeEaseOut(EaseFunction easeFunction, ExtraArgs&&... extraArgs)
{
return std::bind(DoEaseOut, std::bind(easeFunction, std::placeholders::_1, extraArgs...), std::placeholders::_1);
}
//Binds your EaseIn function for you, and returns an EaseInOut function.
template<class... ExtraArgs>
EaseFunction MakeEaseInOut(EaseFunction easeFunction, ExtraArgs&&... extraArgs)
{
return std::bind(DoEaseInOut, std::bind(easeFunction, std::placeholders::_1, extraArgs...), std::placeholders::_1);
}
//Binds your EaseIn function for you, and returns an EaseOutIn function.
template<class... ExtraArgs>
EaseFunction MakeEaseOutIn(EaseFunction easeFunction, ExtraArgs&&... extraArgs)
{
return std::bind(DoEaseOutIn, std::bind(easeFunction, std::placeholders::_1, extraArgs...), std::placeholders::_1);
}
Ly9CaW5kcyBhbiBlYXNpbmcgZnVuY3Rpb24gdGhhdCBoYXMgbXVsdGlwbGUgcGFyYW1ldGVycyB0byBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMganVzdCBvbmUgZmxvYXQgKCdwb3NpdGlvbicpIGFzIGEgcGFyYW1ldGVyLgovL1doYXRldmVyIGZ1bmN0aW9uIHlvdSBhcmUgYmluZGluZyBuZWVkcyB0byBzdGFydCB3aXRoICdwb3NpdGlvbicgYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4KdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24sIHR5cGVuYW1lLi4uIEV4dHJhQXJncz4KRWFzZUZ1bmN0aW9uIE1ha2VFYXNlSW4oRnVuY3Rpb24gJiZlYXNlRnVuY3Rpb24sIEV4dHJhQXJncyYmLi4uIGV4dHJhQXJncykKewogICAgcmV0dXJuIHN0ZDo6YmluZChlYXNlRnVuY3Rpb24sIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpmb3J3YXJkPEV4dHJhQXJncz4oZXh0cmFBcmdzKS4uLik7Cn0KCi8vQmluZHMgeW91ciBFYXNlSW4gZnVuY3Rpb24gZm9yIHlvdSwgYW5kIHJldHVybnMgYW4gRWFzZU91dCBmdW5jdGlvbi4KdGVtcGxhdGU8Y2xhc3MuLi4gRXh0cmFBcmdzPgpFYXNlRnVuY3Rpb24gTWFrZUVhc2VPdXQoRWFzZUZ1bmN0aW9uIGVhc2VGdW5jdGlvbiwgRXh0cmFBcmdzJiYuLi4gZXh0cmFBcmdzKQp7CiAgICByZXR1cm4gc3RkOjpiaW5kKERvRWFzZU91dCwgc3RkOjpiaW5kKGVhc2VGdW5jdGlvbiwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBleHRyYUFyZ3MuLi4pLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEpOwp9CgovL0JpbmRzIHlvdXIgRWFzZUluIGZ1bmN0aW9uIGZvciB5b3UsIGFuZCByZXR1cm5zIGFuIEVhc2VJbk91dCBmdW5jdGlvbi4KdGVtcGxhdGU8Y2xhc3MuLi4gRXh0cmFBcmdzPgpFYXNlRnVuY3Rpb24gTWFrZUVhc2VJbk91dChFYXNlRnVuY3Rpb24gZWFzZUZ1bmN0aW9uLCBFeHRyYUFyZ3MmJi4uLiBleHRyYUFyZ3MpCnsKICAgIHJldHVybiBzdGQ6OmJpbmQoRG9FYXNlSW5PdXQsIHN0ZDo6YmluZChlYXNlRnVuY3Rpb24sIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgZXh0cmFBcmdzLi4uKSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xKTsKfQoKLy9CaW5kcyB5b3VyIEVhc2VJbiBmdW5jdGlvbiBmb3IgeW91LCBhbmQgcmV0dXJucyBhbiBFYXNlT3V0SW4gZnVuY3Rpb24uCnRlbXBsYXRlPGNsYXNzLi4uIEV4dHJhQXJncz4KRWFzZUZ1bmN0aW9uIE1ha2VFYXNlT3V0SW4oRWFzZUZ1bmN0aW9uIGVhc2VGdW5jdGlvbiwgRXh0cmFBcmdzJiYuLi4gZXh0cmFBcmdzKQp7CiAgICByZXR1cm4gc3RkOjpiaW5kKERvRWFzZU91dEluLCBzdGQ6OmJpbmQoZWFzZUZ1bmN0aW9uLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIGV4dHJhQXJncy4uLiksIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSk7Cn0=