Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define scr_easing
- ///scr_easing(y,sec,acc)
- // argument0 = y; // current y value
- // argument1 = sec; // total easing duration in seconds
- // argument2 = up; // TRUE is accelerating, FALSE is decelerating
- var y_sign=sign(argument0); // check for reverse deceleration
- argument0=abs(clamp(argument0,-1,1)); // sanitize input
- easing_return[0]=0; // new y value will go here
- easing_return[1]=0; // distance to move will go here
- if(argument2) { // if accelerating
- var x_current=1-(scr_cuberoot(1-argument0)); // current x value
- var x_next=x_current+(delta/(60*argument1)); // next x value
- var x_over=0;
- if (x_next>1) {
- x_over=x_next-1;
- x_next=1;
- }
- easing_return[0]=1+power(x_next-1,3); // set new y value
- easing_return[1]=(((x_next+(power(x_next-1,4)/4))-(x_current+(power(x_current-1,4)/4)))+x_over)*60*argument1; // set distance to move
- } else if(y_sign!=0) { // if decelerating (can’t decelerate when speed is 0)
- var x_current=scr_cuberoot(argument0); // current x value
- var x_next=max(0,x_current-(delta/(60*argument1))); // next x value (can’t go below 0)
- easing_return[0]=power(x_next,3); // set new y value
- easing_return[1]=((power(x_current,4)/4)-(power(x_next,4)/4))*60*argument1*y_sign; // set distance to move (reverse if input vector was negative)
- }
- return(easing_return);
- ////////////////////// FORMULAS //////////////////////
- //
- // easeOutCubic used for acceleration
- //
- // y=(x-1)^3+1 (1+power(x-1,3))
- // x=1-(1-y)^(1/3) (1-scr_cuberoot(1-y))
- // fx dt=x+((x-1)^4)/4 (x+power(x-1,4)/4)
- //
- // easeInCubic used for deceleration
- //
- // y=x^3 power(x,3)
- // x=y^(1/3) scr_cuberoot(y)
- // fx dt=(x^4)/4 power(x,4)/4
- //
- ////////////////////// //////// //////////////////////
- #define scr_cuberoot
- ///cuberoot(x)
- // argument0 = x; // value to get cube root from
- return sign(argument0) * power(abs(argument0), 1/3);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement