bounce functions
							parent
							
								
									d7e49ead3e
								
							
						
					
					
						commit
						328a88fadd
					
				|  | @ -822,5 +822,70 @@ namespace MoonTools.Core.Easing | |||
|                 return InBack((t * 2) - d, b + c / 2, c / 2, d, s); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // OUT BOUNCE | ||||
| 
 | ||||
|         public static double OutBounce(double t) => NormalizedTime(OutBounce, t); | ||||
|         public static double OutBounce(double time, double start, double end) => TimeRange(OutBounce, time, start, end); | ||||
| 
 | ||||
|         public static double OutBounce(double t, double b, double c, double d) | ||||
|         { | ||||
|             CheckTime(t, d); | ||||
|             t = t / d; | ||||
|             if (t < 1 / 2.75) | ||||
|             { | ||||
|                 return c * (7.5625 * t * t) + b; | ||||
|             } | ||||
|             else if (t < 2 / 2.75) | ||||
|             { | ||||
|                 t = t - (1.5 / 2.75); | ||||
|                 return c * (7.5625 * t * t + 0.75) + b; | ||||
|             } | ||||
|             else if (t < 2.5 / 2.75) | ||||
|             { | ||||
|                 t = t - (2.25 / 2.75); | ||||
|                 return c * (7.5625 * t * t + 0.9375) + b; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 t = t - (2.625 / 2.75); | ||||
|                 return c * (7.5625 * t * t + 0.984375) + b; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // IN BOUNCE | ||||
| 
 | ||||
|         public static double InBounce(double t) => NormalizedTime(InBounce, t); | ||||
|         public static double InBounce(double time, double start, double end) => TimeRange(InBounce, time, start, end); | ||||
| 
 | ||||
|         public static double InBounce(double t, double b, double c, double d) | ||||
|         { | ||||
|             CheckTime(t, d); | ||||
|             return c - OutBounce(d - t, 0, c, d) + b; | ||||
|         } | ||||
| 
 | ||||
|         // IN OUT BOUNCE | ||||
| 
 | ||||
|         public static double InOutBounce(double t) => NormalizedTime(InOutBounce, t); | ||||
|         public static double InOutBounce(double time, double start, double end) => TimeRange(InOutBounce, time, start, end); | ||||
| 
 | ||||
|         public static double InOutBounce(double t, double b, double c, double d) | ||||
|         { | ||||
|             CheckTime(t, d); | ||||
|             if (t < d / 2) | ||||
|             { | ||||
|                 return InBounce(t * 2, 0, c, d) * 0.5 + b; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 return OutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // OUT IN BOUNCE | ||||
| 
 | ||||
|         public static double OutInBounce(double t) => NormalizedTime(OutInBounce, t); | ||||
|         public static double OutInBounce(double time, double start, double end) => TimeRange(OutInBounce, time, start, end); | ||||
|         public static double OutInBounce(double t, double b, double c, double d) => OutIn(OutBounce, InBounce, t, b, c, d); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -1146,6 +1146,62 @@ namespace Test | |||
|                 Easing.OutInBackTimeRange(4, 2, 6, 3).Should().BeApproximately(4, 0.001); | ||||
|                 Easing.OutInBackTimeRange(5, 2, 6, 3).Should().BeApproximately(3.5, 0.001); | ||||
|             } | ||||
| 
 | ||||
|             [Test] | ||||
|             public void OutBounce() | ||||
|             { | ||||
|                 Easing.OutBounce(0.25).Should().BeApproximately(0.47265625, 0.001); | ||||
|                 Easing.OutBounce(0.5).Should().BeApproximately(0.765625, 0.001); | ||||
|                 Easing.OutBounce(0.75).Should().BeApproximately(0.97265625, 0.001); | ||||
| 
 | ||||
|                 Easing.OutBounce(3, 2, 6).Should().BeApproximately(3.890625, 0.001); | ||||
|                 Easing.OutBounce(4, 2, 6).Should().BeApproximately(5.0625, 0.001); | ||||
|                 Easing.OutBounce(5, 2, 6).Should().BeApproximately(5.890625, 0.001); | ||||
| 
 | ||||
|                 CheckDoubleArguments(Easing.OutBounce, Easing.OutBounce); | ||||
|             } | ||||
| 
 | ||||
|             [Test] | ||||
|             public void InBounce() | ||||
|             { | ||||
|                 Easing.InBounce(0.25).Should().BeApproximately(0.02734375, 0.001); | ||||
|                 Easing.InBounce(0.5).Should().BeApproximately(0.234375, 0.001); | ||||
|                 Easing.InBounce(0.75).Should().BeApproximately(0.52734375, 0.001); | ||||
| 
 | ||||
|                 Easing.InBounce(3, 2, 6).Should().BeApproximately(2.109375, 0.001); | ||||
|                 Easing.InBounce(4, 2, 6).Should().BeApproximately(2.9375, 0.001); | ||||
|                 Easing.InBounce(5, 2, 6).Should().BeApproximately(4.109375, 0.001); | ||||
| 
 | ||||
|                 CheckDoubleArguments(Easing.InBounce, Easing.InBounce); | ||||
|             } | ||||
| 
 | ||||
|             [Test] | ||||
|             public void InOutBounce() | ||||
|             { | ||||
|                 Easing.InOutBounce(0.25).Should().BeApproximately(0.1171875, 0.001); | ||||
|                 Easing.InOutBounce(0.5).Should().BeApproximately(0.5, 0.001); | ||||
|                 Easing.InOutBounce(0.75).Should().BeApproximately(0.8828125, 0.001); | ||||
| 
 | ||||
|                 Easing.InOutBounce(3, 2, 6).Should().BeApproximately(2.46875, 0.001); | ||||
|                 Easing.InOutBounce(4, 2, 6).Should().BeApproximately(4, 0.001); | ||||
|                 Easing.InOutBounce(5, 2, 6).Should().BeApproximately(5.53125, 0.001); | ||||
| 
 | ||||
|                 CheckDoubleArguments(Easing.InOutBounce, Easing.InOutBounce); | ||||
|             } | ||||
| 
 | ||||
|             [Test] | ||||
|             public void OutInBounce() | ||||
|             { | ||||
|                 Easing.OutInBounce(0.25).Should().BeApproximately(0.3828125, 0.001); | ||||
|                 Easing.OutInBounce(0.5).Should().BeApproximately(0.5, 0.001); | ||||
|                 Easing.OutInBounce(0.75).Should().BeApproximately(0.6171875, 0.001); | ||||
| 
 | ||||
|                 Easing.OutInBounce(3, 2, 6).Should().BeApproximately(3.53125, 0.001); | ||||
|                 Easing.OutInBounce(4, 2, 6).Should().BeApproximately(4, 0.001); | ||||
|                 Easing.OutInBounce(5, 2, 6).Should().BeApproximately(4.46875, 0.001); | ||||
| 
 | ||||
|                 CheckDoubleArguments(Easing.OutInBounce, Easing.OutInBounce); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue