diff --git a/Easing/Easing.cs b/Easing/Easing.cs index 66c2c50..6ac25c4 100644 --- a/Easing/Easing.cs +++ b/Easing/Easing.cs @@ -124,5 +124,39 @@ namespace MoonTools.Core.Easing return -c / 2 * ((t - 1) * (t - 3) - 1) + b; } } + + // OUT IN QUAD + + public static float OutInQuad(float t) => NormalizedTime(OutInQuad, t); + public static float OutInQuad(float time, float start, float end) => TimeRange(OutInQuad, time, start, end); + + public static float OutInQuad(float t, float b, float c, float d) + { + CheckTime(t, d); + if (t < d / 2) + { + return OutQuad(t * 2, b, c / 2, d); + } + else + { + return InQuad((t * 2) - d, b + c / 2, c / 2, d); + } + } + + public static double OutInQuad(double t) => NormalizedTime(OutInQuad, t); + public static double OutInQuad(double time, double start, double end) => TimeRange(OutInQuad, time, start, end); + + public static double OutInQuad(double t, double b, double c, double d) + { + CheckTime(t, d); + if (t < d / 2) + { + return OutQuad(t * 2, b, c / 2, d); + } + else + { + return InQuad((t * 2) - d, b + c / 2, c / 2, d); + } + } } } diff --git a/Test/Easing.cs b/Test/Easing.cs index c9216fb..df9a951 100644 --- a/Test/Easing.cs +++ b/Test/Easing.cs @@ -123,5 +123,31 @@ namespace Test Easing.InOutQuad(4.0, 2, 6).Should().Be(4); Easing.InOutQuad(5.0, 2, 6).Should().Be(5.5); } + + [Test] + public void OutInQuad() + { + Easing.OutInQuad(0.25f).Should().Be(0.375f); + Easing.OutInQuad(0.5f).Should().Be(0.5f); + Easing.OutInQuad(0.75f).Should().Be(0.625f); + + Action invalidTime = () => Easing.OutInQuad(1.5f); + invalidTime.Should().Throw(); + + Easing.OutInQuad(0.25).Should().Be(0.375); + Easing.OutInQuad(0.5).Should().Be(0.5); + Easing.OutInQuad(0.75).Should().Be(0.625); + + Easing.OutInQuad(3, 2, 6).Should().Be(3.5f); + Easing.OutInQuad(4, 2, 6).Should().Be(4f); + Easing.OutInQuad(5, 2, 6).Should().Be(4.5f); + + invalidTime = () => Easing.OutInQuad(7, 2, 6); + invalidTime.Should().Throw(); + + Easing.OutInQuad(3.0, 2, 6).Should().Be(3.5); + Easing.OutInQuad(4.0, 2, 6).Should().Be(4); + Easing.OutInQuad(5.0, 2, 6).Should().Be(4.5); + } } } \ No newline at end of file