From 78f5855b870e7fff311fe0ecbe3d70964887ae08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Mon, 19 Sep 2022 20:31:32 +0200 Subject: [PATCH] Add spring easing --- .../Animation/Easings/SpringEasing.cs | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/Avalonia.Base/Animation/Easings/SpringEasing.cs diff --git a/src/Avalonia.Base/Animation/Easings/SpringEasing.cs b/src/Avalonia.Base/Animation/Easings/SpringEasing.cs new file mode 100644 index 0000000000..70e74c639f --- /dev/null +++ b/src/Avalonia.Base/Animation/Easings/SpringEasing.cs @@ -0,0 +1,80 @@ +namespace Avalonia.Animation.Easings; + +/// +/// Eases a value using a user-defined spring formula. +/// +public class SpringEasing : Easing +{ + private readonly Spring _internalSpring; + + /// + /// The spring mass. + /// + public double Mass + { + get => _internalSpring.Mass; + set + { + _internalSpring.Mass = value; + } + } + + /// + /// The spring stiffness. + /// + public double Stiffness + { + get => _internalSpring.Stiffness; + set + { + _internalSpring.Stiffness = value; + } + } + + /// + /// The spring damping. + /// + public double Damping + { + get => _internalSpring.Damping; + set + { + _internalSpring.Damping = value; + } + } + + /// + /// The spring initial velocity. + /// + 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(); + } + + /// + public override double Ease(double progress) => _internalSpring.GetSpringProgress(progress); +}