mEase.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. // NOTE: methods on the EaseF convenience class
  2. #include "math/mMath.h"
  3. #include "math/mEase.h"
  4. #include "core/strings/stringFunctions.h"
  5. EaseF::EaseF()
  6. {
  7. mDir = 0;
  8. mType = 0;
  9. mParam[0] = mParam[1] = -1.0f;
  10. }
  11. EaseF::EaseF(const EaseF &ease)
  12. {
  13. this->mDir = ease.mDir;
  14. this->mType = ease.mType;
  15. this->mParam[0] = ease.mParam[0];
  16. this->mParam[1] = ease.mParam[1];
  17. }
  18. EaseF::EaseF(const S32 dir, const S32 type)
  19. {
  20. this->mDir = dir;
  21. this->mType = type;
  22. this->mParam[0] = this->mParam[1] = -1.0f;
  23. }
  24. EaseF::EaseF(const S32 dir, const S32 type, F32 param[2])
  25. {
  26. this->mDir = dir;
  27. this->mType = type;
  28. this->mParam[0] = param[0];
  29. this->mParam[1] = param[1];
  30. }
  31. void EaseF::set(const S32 dir, const S32 type)
  32. {
  33. this->mDir = dir;
  34. this->mType = type;
  35. this->mParam[0] = this->mParam[1] = -1.0f;
  36. }
  37. void EaseF::set(const S32 dir, const S32 type, F32 param[2])
  38. {
  39. this->mDir = dir;
  40. this->mType = type;
  41. this->mParam[0] = param[0];
  42. this->mParam[1] = param[1];
  43. }
  44. void EaseF::set(const S32 dir, const S32 type, F32 param0, F32 param1)
  45. {
  46. this->mDir = dir;
  47. this->mType = type;
  48. this->mParam[0] = param0;
  49. this->mParam[1] = param1;
  50. }
  51. void EaseF::set(const char *s)
  52. {
  53. dSscanf(s,"%d %d %f %f",&mDir,&mType,&mParam[0],&mParam[1]);
  54. }
  55. F32 EaseF::getValue(F32 t, F32 b, F32 c, F32 d) const
  56. {
  57. F32 value = 0;
  58. if (mType == Ease::Linear)
  59. {
  60. value = mLinearTween(t,b, c, d);
  61. }
  62. else if (mType == Ease::Quadratic)
  63. {
  64. if (mDir == Ease::In)
  65. value = mEaseInQuad(t,b, c, d);
  66. else if (mDir == Ease::Out)
  67. value = mEaseOutQuad(t,b, c, d);
  68. else if (mDir == Ease::InOut)
  69. value = mEaseInOutQuad(t,b, c, d);
  70. }
  71. else if (mType == Ease::Cubic)
  72. {
  73. if (mDir == Ease::In)
  74. value = mEaseInCubic(t,b, c, d);
  75. else if (mDir == Ease::Out)
  76. value = mEaseOutCubic(t,b, c, d);
  77. else if (mDir == Ease::InOut)
  78. value = mEaseInOutCubic(t,b, c, d);
  79. }
  80. else if (mType == Ease::Quartic)
  81. {
  82. if (mDir == Ease::In)
  83. value = mEaseInQuart(t,b, c, d);
  84. else if (mDir == Ease::Out)
  85. value = mEaseOutQuart(t,b, c, d);
  86. else if (mDir == Ease::InOut)
  87. value = mEaseInOutQuart(t,b, c, d);
  88. }
  89. else if (mType == Ease::Quintic)
  90. {
  91. if (mDir == Ease::In)
  92. value = mEaseInQuint(t,b, c, d);
  93. else if (mDir == Ease::Out)
  94. value = mEaseOutQuint(t,b, c, d);
  95. else if (mDir == Ease::InOut)
  96. value = mEaseInOutQuint(t,b, c, d);
  97. }
  98. else if (mType == Ease::Sinusoidal)
  99. {
  100. if (mDir == Ease::In)
  101. value = mEaseInSine(t,b, c, d);
  102. else if (mDir == Ease::Out)
  103. value = mEaseOutSine(t,b, c, d);
  104. else if (mDir == Ease::InOut)
  105. value = mEaseInOutSine(t,b, c, d);
  106. }
  107. else if (mType == Ease::Exponential)
  108. {
  109. if (mDir == Ease::In)
  110. value = mEaseInExpo(t,b, c, d);
  111. else if (mDir == Ease::Out)
  112. value = mEaseOutExpo(t,b, c, d);
  113. else if (mDir == Ease::InOut)
  114. value = mEaseInOutExpo(t,b, c, d);
  115. }
  116. else if (mType == Ease::Circular)
  117. {
  118. if (mDir == Ease::In)
  119. value = mEaseInCirc(t,b, c, d);
  120. else if (mDir == Ease::Out)
  121. value = mEaseOutCirc(t,b, c, d);
  122. else if (mDir == Ease::InOut)
  123. value = mEaseInOutCirc(t,b, c, d);
  124. }
  125. else if (mType == Ease::Elastic)
  126. {
  127. if (mDir == Ease::In)
  128. value = mEaseInElastic(t,b, c, d, mParam[0], mParam[1]);
  129. else if (mDir == Ease::Out)
  130. value = mEaseOutElastic(t,b, c, d, mParam[0], mParam[1]);
  131. else if (mDir == Ease::InOut)
  132. value = mEaseInOutElastic(t,b, c, d, mParam[0], mParam[1]);
  133. }
  134. else if (mType == Ease::Back)
  135. {
  136. if (mDir == Ease::In)
  137. value = mEaseInBack(t,b, c, d, mParam[0]);
  138. else if (mDir == Ease::Out)
  139. value = mEaseOutBack(t,b, c, d, mParam[0]);
  140. else if (mDir == Ease::InOut)
  141. value = mEaseInOutBack(t,b, c, d, mParam[0]);
  142. }
  143. else if (mType == Ease::Bounce)
  144. {
  145. if (mDir == Ease::In)
  146. value = mEaseInBounce(t,b, c, d);
  147. else if (mDir == Ease::Out)
  148. value = mEaseOutBounce(t,b, c, d);
  149. else if (mDir == Ease::InOut)
  150. value = mEaseInOutBounce(t,b, c, d);
  151. }
  152. else
  153. {
  154. // what ?
  155. }
  156. return value;
  157. }
  158. // < pg