Explorar el Código

Add spring easing

Wiesław Šoltés hace 3 años
padre
commit
78f5855b87
Se han modificado 1 ficheros con 80 adiciones y 0 borrados
  1. 80 0
      src/Avalonia.Base/Animation/Easings/SpringEasing.cs

+ 80 - 0
src/Avalonia.Base/Animation/Easings/SpringEasing.cs

@@ -0,0 +1,80 @@
+namespace Avalonia.Animation.Easings;
+
+/// <summary>
+/// Eases a <see cref="double"/> value using a user-defined spring formula.
+/// </summary>
+public class SpringEasing : Easing
+{
+    private readonly Spring _internalSpring;
+
+    /// <summary>
+    /// The spring mass.
+    /// </summary>
+    public double Mass
+    {
+        get => _internalSpring.Mass;
+        set
+        {
+            _internalSpring.Mass = value;
+        }
+    }
+
+    /// <summary>
+    /// The spring stiffness.
+    /// </summary>
+    public double Stiffness
+    {
+        get => _internalSpring.Stiffness;
+        set
+        {
+            _internalSpring.Stiffness = value;
+        }
+    }
+
+    /// <summary>
+    /// The spring damping.
+    /// </summary> 
+    public double Damping
+    {
+        get => _internalSpring.Damping;
+        set
+        {
+            _internalSpring.Damping = value;
+        }
+    }
+
+    /// <summary>
+    /// The spring initial velocity.
+    /// </summary>
+    public double InitialVelocity
+    {
+        get => _internalSpring.InitialVelocity;
+        set
+        {
+            _internalSpring.InitialVelocity = value;
+        }
+    }
+
+    public SpringEasing(double mass = 0d, double stiffness = 0d, double damping = 0d, double initialVelocity = 0d)
+    {
+        _internalSpring = new Spring();
+
+        Mass = mass;
+        Stiffness = stiffness;
+        Damping = damping;
+        InitialVelocity = initialVelocity;
+    }
+
+    public SpringEasing(Spring keySpline)
+    {
+        _internalSpring = keySpline;
+    }
+    
+    public SpringEasing()
+    {
+        _internalSpring = new Spring();
+    }
+
+    /// <inheritdoc/>
+    public override double Ease(double progress) => _internalSpring.GetSpringProgress(progress);
+}