2012-09-19 15:15:01 +00:00
|
|
|
// NOTE: methods on the EaseF convenience class
|
|
|
|
|
|
|
|
|
|
#include "math/mMath.h"
|
|
|
|
|
#include "math/mEase.h"
|
|
|
|
|
#include "core/strings/stringFunctions.h"
|
|
|
|
|
|
|
|
|
|
EaseF::EaseF()
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
mDir = 0;
|
|
|
|
|
mType = 0;
|
|
|
|
|
mParam[0] = mParam[1] = -1.0f;
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EaseF::EaseF(const EaseF &ease)
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
this->mDir = ease.mDir;
|
|
|
|
|
this->mType = ease.mType;
|
|
|
|
|
this->mParam[0] = ease.mParam[0];
|
|
|
|
|
this->mParam[1] = ease.mParam[1];
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EaseF::EaseF(const S32 dir, const S32 type)
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
this->mDir = dir;
|
|
|
|
|
this->mType = type;
|
|
|
|
|
this->mParam[0] = this->mParam[1] = -1.0f;
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EaseF::EaseF(const S32 dir, const S32 type, F32 param[2])
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
this->mDir = dir;
|
|
|
|
|
this->mType = type;
|
|
|
|
|
this->mParam[0] = param[0];
|
|
|
|
|
this->mParam[1] = param[1];
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EaseF::set(const S32 dir, const S32 type)
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
this->mDir = dir;
|
|
|
|
|
this->mType = type;
|
|
|
|
|
this->mParam[0] = this->mParam[1] = -1.0f;
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EaseF::set(const S32 dir, const S32 type, F32 param[2])
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
this->mDir = dir;
|
|
|
|
|
this->mType = type;
|
|
|
|
|
this->mParam[0] = param[0];
|
|
|
|
|
this->mParam[1] = param[1];
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EaseF::set(const S32 dir, const S32 type, F32 param0, F32 param1)
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
this->mDir = dir;
|
|
|
|
|
this->mType = type;
|
|
|
|
|
this->mParam[0] = param0;
|
|
|
|
|
this->mParam[1] = param1;
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EaseF::set(const char *s)
|
|
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
dSscanf(s,"%d %d %f %f",&mDir,&mType,&mParam[0],&mParam[1]);
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
F32 EaseF::getValue(F32 t, F32 b, F32 c, F32 d) const
|
|
|
|
|
{
|
|
|
|
|
F32 value = 0;
|
|
|
|
|
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mType == Ease::Linear)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
|
|
|
|
value = mLinearTween(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Quadratic)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInQuad(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutQuad(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutQuad(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Cubic)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInCubic(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutCubic(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutCubic(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Quartic)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInQuart(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutQuart(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutQuart(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Quintic)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInQuint(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutQuint(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutQuint(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Sinusoidal)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInSine(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutSine(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutSine(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Exponential)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInExpo(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutExpo(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutExpo(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Circular)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInCirc(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutCirc(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutCirc(t,b, c, d);
|
|
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Elastic)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
|
|
|
|
value = mEaseInElastic(t,b, c, d, mParam[0], mParam[1]);
|
|
|
|
|
else if (mDir == Ease::Out)
|
|
|
|
|
value = mEaseOutElastic(t,b, c, d, mParam[0], mParam[1]);
|
|
|
|
|
else if (mDir == Ease::InOut)
|
|
|
|
|
value = mEaseInOutElastic(t,b, c, d, mParam[0], mParam[1]);
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Back)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
|
|
|
|
value = mEaseInBack(t,b, c, d, mParam[0]);
|
|
|
|
|
else if (mDir == Ease::Out)
|
|
|
|
|
value = mEaseOutBack(t,b, c, d, mParam[0]);
|
|
|
|
|
else if (mDir == Ease::InOut)
|
|
|
|
|
value = mEaseInOutBack(t,b, c, d, mParam[0]);
|
2012-09-19 15:15:01 +00:00
|
|
|
}
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mType == Ease::Bounce)
|
2012-09-19 15:15:01 +00:00
|
|
|
{
|
2018-03-14 20:45:45 +00:00
|
|
|
if (mDir == Ease::In)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInBounce(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::Out)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseOutBounce(t,b, c, d);
|
2018-03-14 20:45:45 +00:00
|
|
|
else if (mDir == Ease::InOut)
|
2012-09-19 15:15:01 +00:00
|
|
|
value = mEaseInOutBounce(t,b, c, d);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// what ?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// < pg
|