using UnityEngine; /* * Most functions taken from Tween.js - Licensed under the MIT license * at https://github.com/sole/tween.js * Quadratic.Bezier by @fonserbc - Licensed under WTFPL license */ public delegate float EasingFunction(float k); public class Easing { public static float Linear (float k) { return k; } public class Quadratic { public static float In (float k) { return k*k; } public static float Out (float k) { return k*(2f - k); } public static float InOut (float k) { if ((k *= 2f) < 1f) return 0.5f*k*k; return -0.5f*((k -= 1f)*(k - 2f) - 1f); } /* * Quadratic.Bezier(k,0) behaves like Quadratic.In(k) * Quadratic.Bezier(k,1) behaves like Quadratic.Out(k) * * If you want to learn more check Alan Wolfe's post about it http://www.demofox.org/bezquad1d.html */ public static float Bezier (float k, float c) { return c*2*k*(1 - k) + k*k; } }; public class Cubic { public static float In (float k) { return k*k*k; } public static float Out (float k) { return 1f + ((k -= 1f)*k*k); } public static float InOut (float k) { if ((k *= 2f) < 1f) return 0.5f*k*k*k; return 0.5f*((k -= 2f)*k*k + 2f); } }; public class Quartic { public static float In (float k) { return k*k*k*k; } public static float Out (float k) { return 1f - ((k -= 1f)*k*k*k); } public static float InOut (float k) { if ((k *= 2f) < 1f) return 0.5f*k*k*k*k; return -0.5f*((k -= 2f)*k*k*k - 2f); } }; public class Quintic { public static float In (float k) { return k*k*k*k*k; } public static float Out (float k) { return 1f + ((k -= 1f)*k*k*k*k); } public static float InOut (float k) { if ((k *= 2f) < 1f) return 0.5f*k*k*k*k*k; return 0.5f*((k -= 2f)*k*k*k*k + 2f); } }; public class Sinusoidal { public static float In (float k) { return 1f - Mathf.Cos(k*Mathf.PI/2f); } public static float Out (float k) { return Mathf.Sin(k*Mathf.PI/2f); } public static float InOut (float k) { return 0.5f*(1f - Mathf.Cos(Mathf.PI*k)); } }; public class Exponential { public static float In (float k) { return k == 0f? 0f : Mathf.Pow(1024f, k - 1f); } public static float Out (float k) { return k == 1f? 1f : 1f - Mathf.Pow(2f, -10f*k); } public static float InOut (float k) { if (k == 0f) return 0f; if (k == 1f) return 1f; if ((k *= 2f) < 1f) return 0.5f*Mathf.Pow(1024f, k - 1f); return 0.5f*(-Mathf.Pow(2f, -10f*(k - 1f)) + 2f); } }; public class Circular { public static float In (float k) { return 1f - Mathf.Sqrt(1f - k*k); } public static float Out (float k) { return Mathf.Sqrt(1f - ((k -= 1f)*k)); } public static float InOut (float k) { if ((k *= 2f) < 1f) return -0.5f*(Mathf.Sqrt(1f - k*k) - 1); return 0.5f*(Mathf.Sqrt(1f - (k -= 2f)*k) + 1f); } }; public class Elastic { public static float In (float k) { if (k == 0) return 0; if (k == 1) return 1; return -Mathf.Pow( 2f, 10f*(k -= 1f))*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f); } public static float Out (float k) { if (k == 0) return 0; if (k == 1) return 1; return Mathf.Pow(2f, -10f*k)*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f) + 1f; } public static float InOut (float k) { if ((k *= 2f) < 1f) return -0.5f*Mathf.Pow(2f, 10f*(k -= 1f))*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f); return Mathf.Pow(2f, -10f*(k -= 1f))*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f)*0.5f + 1f; } }; public class Back { static float s = 1.70158f; static float s2 = 2.5949095f; public static float In (float k) { return k*k*((s + 1f)*k - s); } public static float Out (float k) { return (k -= 1f)*k*((s + 1f)*k + s) + 1f; } public static float InOut (float k) { if ((k *= 2f) < 1f) return 0.5f*(k*k*((s2 + 1f)*k - s2)); return 0.5f*((k -= 2f)*k*((s2 + 1f)*k + s2) + 2f); } }; public class Bounce { public static float In (float k) { return 1f - Out(1f - k); } public static float Out (float k) { if (k < (1f/2.75f)) { return 7.5625f*k*k; } else if (k < (2f/2.75f)) { return 7.5625f*(k -= (1.5f/2.75f))*k + 0.75f; } else if (k < (2.5f/2.75f)) { return 7.5625f *(k -= (2.25f/2.75f))*k + 0.9375f; } else { return 7.5625f*(k -= (2.625f/2.75f))*k + 0.984375f; } } public static float InOut (float k) { if (k < 0.5f) return In(k*2f)*0.5f; return Out(k*2f - 1f)*0.5f + 0.5f; } }; }