Skip to content

Instantly share code, notes, and snippets.

@hamaluik
Created April 20, 2018 19:11
Show Gist options
  • Save hamaluik/f61e287bb762eef6d08ea4abc708fa65 to your computer and use it in GitHub Desktop.
Save hamaluik/f61e287bb762eef6d08ea4abc708fa65 to your computer and use it in GitHub Desktop.
/**
@see https://github.com/armory3d/iron/blob/3e2b6f8d89e5136801bd5dc43172127926847a83/Sources/iron/system/Tween.hx#L134-L158
*/
class Ease {
static inline var DEFAULT_OVERSHOOT:Float = 1.70158;
public static function linear(k:Float):Float { return k; }
public static function sineIn(k:Float):Float { if(k == 0){ return 0; } else if(k == 1){ return 1; } else { return 1 - Math.cos(k * Math.PI / 2); } }
public static function sineOut(k:Float):Float { if(k == 0){ return 0; } else if(k == 1){ return 1; } else { return Math.sin(k * (Math.PI * 0.5)); } }
public static function sineInOut(k:Float):Float { if(k == 0){ return 0; } else if(k == 1){ return 1; } else { return -0.5 * (Math.cos(Math.PI * k) - 1); } }
public static function quadIn(k:Float):Float { return k * k; }
public static function quadOut(k:Float):Float { return -k * (k - 2); }
public static function quadInOut(k:Float):Float { return (k < 0.5) ? 2 * k * k : -2 * ((k -= 1) * k) + 1; }
public static function cubicIn(k:Float):Float { return k * k * k; }
public static function cubicOut(k:Float):Float { return (k = k - 1) * k * k + 1; }
public static function cubicInOut(k:Float):Float { return ((k *= 2) < 1) ? 0.5 * k * k * k : 0.5 * ((k -= 2) * k * k + 2); }
public static function quartIn(k:Float):Float { return (k *= k) * k; }
public static function quartOut(k:Float):Float { return 1 - (k = (k = k - 1) * k) * k; }
public static function quartInOut(k:Float):Float { return ((k *= 2) < 1) ? 0.5 * (k *= k) * k : -0.5 * ((k = (k -= 2) * k) * k - 2); }
public static function quintIn(k:Float):Float { return k * (k *= k) * k; }
public static function quintOut(k:Float):Float { return (k = k - 1) * (k *= k) * k + 1; }
public static function quintInOut(k:Float):Float { return ((k *= 2) < 1) ? 0.5 * k * (k *= k) * k : 0.5 * (k -= 2) * (k *= k) * k + 1; }
public static function expoIn(k:Float):Float { return k == 0 ? 0 : Math.pow(2, 10 * (k - 1)); }
public static function expoOut(k:Float):Float { return k == 1 ? 1 : (1 - Math.pow(2, -10 * k)); }
public static function expoInOut(k:Float):Float { if (k == 0) { return 0; } if (k == 1) { return 1; } if ((k /= 1 / 2.0) < 1.0) { return 0.5 * Math.pow(2, 10 * (k - 1)); } return 0.5 * (2 - Math.pow(2, -10 * --k)); }
public static function circIn(k:Float):Float { return -(Math.sqrt(1 - k * k) - 1); }
public static function circOut(k:Float):Float { return Math.sqrt(1 - (k - 1) * (k - 1)); }
public static function circInOut(k:Float):Float { return k <= .5 ? (Math.sqrt(1 - k * k * 4) - 1) / -2 : (Math.sqrt(1 - (k * 2 - 2) * (k * 2 - 2)) + 1) / 2; }
public static function backIn(k:Float):Float { if (k == 0) { return 0; } else if (k == 1) { return 1; } else { return k * k * ((DEFAULT_OVERSHOOT + 1) * k - DEFAULT_OVERSHOOT); } }
public static function backOut(k:Float):Float { if (k == 0) { return 0; } else if (k == 1) { return 1; } else { return ((k = k - 1) * k * ((DEFAULT_OVERSHOOT + 1) * k + DEFAULT_OVERSHOOT) + 1); } }
public static function backInOut(k:Float):Float { if (k == 0) { return 0; } else if (k == 1) { return 1; } else if ((k *= 2) < 1) { return (0.5 * (k * k * (((DEFAULT_OVERSHOOT * 1.525) + 1) * k - DEFAULT_OVERSHOOT * 1.525))); } else { return (0.5 * ((k -= 2) * k * (((DEFAULT_OVERSHOOT * 1.525) + 1) * k + DEFAULT_OVERSHOOT * 1.525) + 2)); } }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment