Advertisement
SemiMetalAlchemist

scr_easings

Dec 8th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///@description easings(function,start,change,duration,time);
  2. ///easings(function,start,change,duration,time);
  3. ///@param function
  4. ///@param start
  5. ///@param change
  6. ///@param duration
  7. ///@param time
  8. //Credits: Code lifted from http://www.davetech.co.uk/gamemakereasingandtweeningfunctions and http://gizma.com/easing/ but all the work to make it script compatible was done by Zen00 (Grant Brown).
  9.     //t = time
  10.     //b = start
  11.     //c = change
  12.     //d = duration
  13.     //argument0 = time
  14.     //argument1 = start
  15.     //argument2 = change
  16.     //argument3 = duration
  17.  
  18. var function,start,change,duration,time;
  19.     function = argument0;
  20.     start = argument1;
  21.     change = argument2;
  22.     duration = argument3;
  23.     time = argument4;
  24.  
  25. switch(function)
  26. {
  27. case "linear":
  28. {
  29. return change*time/duration + start;
  30. }
  31. case "easeinquad":
  32. {
  33. time /= duration;
  34. return change*time*time + start;
  35. }
  36. case "easeoutquad":
  37. {
  38. time /= duration;
  39. return -change * time *(time-2) + start;
  40. }
  41. case "easeinoutquad":
  42. {
  43. time /= duration/2;
  44. if (time < 1)
  45. return change/2*time*time + start;
  46. time--;
  47. return -change/2 * (time*(time-2) - 1) + start;
  48. }
  49. case "easeincubic":
  50. {
  51. time /= duration;
  52. return change*time*time*time + start;
  53. }
  54. case "easeoutcubic":
  55. {
  56. time /= duration;
  57. time--;
  58. return change*(time*time*time + 1) + start;
  59. }
  60. case "easeinoutcubic":
  61. {
  62. time /= duration/2;
  63. if (time < 1)
  64. return change/2*time*time*time + start;
  65. time -= 2;
  66. return change/2*(time*time*time + 2) + start;
  67. }
  68. case "easeinquart":
  69. {
  70. time /= duration;
  71. return change*time*time*time*time + start;
  72. }
  73. case "easeoutquart":
  74. {
  75. time /= duration;
  76. time--;
  77. return -change * (time*time*time*time - 1) + start;
  78. }
  79. case "easeinoutquart":
  80. {
  81. time /= duration/2;
  82. if (time < 1)
  83. return change/2*time*time*time*time + start;
  84. time -= 2;
  85. return -change/2 * (time*time*time*time - 2) + start;
  86. }
  87. case "easeinquint":
  88. {
  89. time /= duration;
  90. return change*time*time*time*time*time + start;
  91. }
  92. case "easeoutquint":
  93. {
  94. time /= duration;
  95. time--;
  96. return change*(time*time*time*time*time + 1) + start;
  97. }
  98. case "easeinoutquint":
  99. {
  100. time /= duration/2;
  101. if (time < 1)
  102. return change/2*time*time*time*time*time + start;
  103. time -= 2;
  104. return change/2*(time*time*time*time*time + 2) + start;
  105. }
  106. case "easeinsine":
  107. {
  108. return -change * cos(time/duration * (pi/2)) + change + start;
  109. }
  110. case "easeoutsine":
  111. {
  112. return change * sin(time/duration * (pi/2)) + start;
  113. }
  114. case "easeinoutsine":
  115. {
  116. return -change/2 * (cos(pi*time/duration) - 1) + start;
  117. }
  118. case "easeinexpo":
  119. {
  120. return change * power( 2, 10 * (time/duration - 1) ) + start;
  121. }
  122. case "easeoutexpo":
  123. {
  124. return change * ( -power( 2, -10 * time/duration ) + 1 ) + start;
  125. }
  126. case "easeinoutexpo":
  127. {
  128. time /= duration/2;
  129. if (time < 1)
  130. return change/2 * power( 2, 10 * (time - 1) ) + start;
  131. time--;
  132. return change/2 * ( -power( 2, -10 * time) + 2 ) + start;
  133. }
  134. case "easeincirc":
  135. {
  136. time /= duration;
  137. return -change * (sqrt(1 - time*time) - 1) + start;
  138. }
  139. case "easeoutcirc":
  140. {
  141. time /= duration;
  142. time--;
  143. return change * sqrt(1 - time*time) + start;
  144. }
  145. case "easeinoutcirc":
  146. {
  147. time /= duration/2;
  148. if (time < 1)
  149. return -change/2 * (sqrt(1 - time*time) - 1) + start;
  150. time -= 2;
  151. return change/2 * (sqrt(1 - time*time) + 1) + start;
  152. }
  153. //I should point out that from this point I consider the easing to be "Expert" functions
  154. case "easeinelastic":
  155. {
  156. var _s = 1.70158;
  157. var _p = 0;
  158. var _a = change;
  159.  
  160. if(time == 0 || _a == 0)
  161. return start;
  162.  
  163. time /= duration;
  164.  
  165. if(time == 1)
  166. return start+change;
  167. if(_p == 0)
  168. _p = duration*0.3;
  169. if(_a < abs(change))
  170. {
  171. _a = change;
  172. _s = _p*0.25;
  173. }
  174. else
  175. {
  176. _s = _p / (2 * pi) * arcsin (change / _a);
  177. }
  178.  
  179. return -(_a * power(2,10 * (--time)) * sin((time * duration - _s) * (2 * pi) / _p)) + start;
  180. }
  181. case "easeoutelastic":
  182. {
  183. var _s = 1.70158;
  184. var _p = 0;
  185. var _a = change;
  186.  
  187. if (time == 0 || _a == 0)
  188.     return start;
  189.  
  190. time /= duration;
  191.  
  192. if (time == 1)
  193.     return start + change;
  194. if (_p == 0)
  195.     _p = duration * 0.3;
  196. if (_a < abs(change))
  197. {
  198.     _a = change;
  199.     _s = _p * 0.25;
  200. }
  201. else
  202. {
  203.     _s = _p / (2 * pi) * arcsin (change / _a);
  204. }
  205.  
  206. return _a * power(2, -10 * time) * sin((time * duration - _s) * (2 * pi) / _p ) + change + start;
  207. }
  208. case "easeinoutelastic":
  209. {
  210. var _s = 1.70158;
  211. var _p = 0;
  212. var _a = change;
  213.  
  214. if (time == 0 || _a == 0)
  215.     return start;
  216.  
  217. time /= duration*0.5;
  218.  
  219. if (time == 2)
  220.     return start+change;
  221. if (_p == 0)
  222.     _p = duration * (0.3 * 1.5);
  223. if (_a < abs(change))
  224. {
  225.     _a = change;
  226.     _s = _p * 0.25;
  227. }
  228. else
  229. {
  230.     _s = _p / (2 * pi) * arcsin (change / _a);
  231. }
  232.  
  233. if (time < 1)
  234.     return -0.5 * (_a * power(2, 10 * (--time)) * sin((time * duration - _s) * (2 * pi) / _p)) + start;
  235.  
  236. return _a * power(2, -10 * (--time)) * sin((time * duration - _s) * (2 * pi) / _p) * 0.5 + change + start;
  237. }
  238. case "easeinback":
  239. {
  240. var _s = 1.70158;
  241. time /= duration;
  242. return change * time * time * ((_s + 1) * time - _s) + start;
  243. }
  244. case "easeoutback":
  245. {
  246. var _s = 1.70158;
  247.  
  248. time = time/duration - 1;
  249. return change * (time * time * ((_s + 1) * time + _s) + 1) + start;
  250. }
  251. case "easeinoutback":
  252. {
  253. var _s = 1.70158;
  254.  
  255. time = time/duration*2
  256.  
  257. if (time < 1)
  258. {
  259.     _s *= 1.525;
  260.     return change * 0.5 * (time * time * ((_s + 1) * time - _s)) + start;
  261. }
  262.  
  263. time -= 2;
  264. _s *= 1.525
  265.  
  266. return change * 0.5 * (time * time * ((_s + 1) * time + _s) + 2) + start;
  267. }
  268. case "easeinbounce":
  269. {
  270. return change - scr_easing("easeoutbounce",0,change,duration,(duration - time)) + start;
  271. }
  272. case "easeoutbounce":
  273. {
  274. time /= duration;
  275.  
  276. if (time < 1/2.75)
  277. {
  278.     return change * 7.5625 * time * time + start;
  279. }
  280. else if (time < 2/2.75)
  281. {
  282.     time -= 1.5/2.75;
  283.     return change * (7.5625 * time * time + 0.75) + start;
  284. }
  285. else if (time < 2.5/2.75)
  286. {
  287.     time -= 2.25/2.75;
  288.     return change * (7.5625 * time * time + 0.9375) + start;
  289. }
  290. else
  291. {
  292.     time -= 2.625/2.75;
  293.     return change * (7.5625 * time * time + 0.984375) + start;
  294. }
  295. }
  296. case "easeinoutbounce":
  297. {
  298. if (time < duration*0.5)
  299. {
  300.     return (scr_easing("easeinbounce",0,change,duration,time*2)*0.5 + start);
  301. }
  302.  
  303. return (scr_easing("easeoutbounce",0,change,duration,time*2 - duration)*0.5 + change*0.5 + start);
  304. }
  305. default:
  306. return "418";
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement