From 0a35700ee3c6379ac19b007e13930f77160879f8 Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Sun, 18 Jul 2021 21:53:30 +0200 Subject: [PATCH] feat(Animation): Add In&Out easings --- .../Animation/EasingFunctions/InCirc.cs | 27 +++++++++++++++ .../Animation/EasingFunctions/InCubic.cs | 27 +++++++++++++++ .../Animation/EasingFunctions/InElastic.cs | 33 +++++++++++++++++++ .../Animation/EasingFunctions/InOutCubic.cs | 1 - .../Animation/EasingFunctions/InOutElastic.cs | 4 +-- .../Animation/EasingFunctions/InSine.cs | 27 +++++++++++++++ .../Animation/EasingFunctions/OutCirc.cs | 27 +++++++++++++++ .../Animation/EasingFunctions/OutElastic.cs | 33 +++++++++++++++++++ .../Animation/EasingFunctions/OutQuint.cs | 27 +++++++++++++++ .../Animation/EasingFunctions/OutSine.cs | 27 +++++++++++++++ 10 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 Dalamud/Interface/Animation/EasingFunctions/InCirc.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/InCubic.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/InElastic.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/InSine.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/OutCirc.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/OutElastic.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/OutQuint.cs create mode 100644 Dalamud/Interface/Animation/EasingFunctions/OutSine.cs diff --git a/Dalamud/Interface/Animation/EasingFunctions/InCirc.cs b/Dalamud/Interface/Animation/EasingFunctions/InCirc.cs new file mode 100644 index 000000000..952e3539d --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/InCirc.cs @@ -0,0 +1,27 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "InCirc" easing animation. + /// + public class InCirc : Easing + { + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public InCirc(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = 1 - Math.Sqrt(1 - Math.Pow(p, 2)); + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/InCubic.cs b/Dalamud/Interface/Animation/EasingFunctions/InCubic.cs new file mode 100644 index 000000000..ebca3203d --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/InCubic.cs @@ -0,0 +1,27 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "InCubic" easing animation. + /// + public class InCubic : Easing + { + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public InCubic(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = p * p * p; + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/InElastic.cs b/Dalamud/Interface/Animation/EasingFunctions/InElastic.cs new file mode 100644 index 000000000..97159df47 --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/InElastic.cs @@ -0,0 +1,33 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "InElastic" easing animation. + /// + public class InElastic : Easing + { + private const double Constant = (2 * Math.PI) / 3; + + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public InElastic(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = p == 0 + ? 0 + : p == 1 + ? 1 + : -Math.Pow(2, (10 * p) - 10) * Math.Sin(((p * 10) - 10.75) * Constant); + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/InOutCubic.cs b/Dalamud/Interface/Animation/EasingFunctions/InOutCubic.cs index c6e14c3a5..c075da538 100644 --- a/Dalamud/Interface/Animation/EasingFunctions/InOutCubic.cs +++ b/Dalamud/Interface/Animation/EasingFunctions/InOutCubic.cs @@ -1,5 +1,4 @@ using System; -using Serilog; namespace Dalamud.Interface.Animation.EasingFunctions { diff --git a/Dalamud/Interface/Animation/EasingFunctions/InOutElastic.cs b/Dalamud/Interface/Animation/EasingFunctions/InOutElastic.cs index 1a99f2836..7bb36dd74 100644 --- a/Dalamud/Interface/Animation/EasingFunctions/InOutElastic.cs +++ b/Dalamud/Interface/Animation/EasingFunctions/InOutElastic.cs @@ -7,8 +7,8 @@ namespace Dalamud.Interface.Animation.EasingFunctions /// public class InOutElastic : Easing { - private static readonly double Constant = (2 * Math.PI) / 4.5; - + private const double Constant = (2 * Math.PI) / 4.5; + /// /// Initializes a new instance of the class. /// diff --git a/Dalamud/Interface/Animation/EasingFunctions/InSine.cs b/Dalamud/Interface/Animation/EasingFunctions/InSine.cs new file mode 100644 index 000000000..aaa19aa40 --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/InSine.cs @@ -0,0 +1,27 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "InSine" easing animation. + /// + public class InSine : Easing + { + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public InSine(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = 1 - Math.Cos((p * Math.PI) / 2); + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/OutCirc.cs b/Dalamud/Interface/Animation/EasingFunctions/OutCirc.cs new file mode 100644 index 000000000..da7b0029a --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/OutCirc.cs @@ -0,0 +1,27 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "OutCirc" easing animation. + /// + public class OutCirc : Easing + { + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public OutCirc(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = Math.Sqrt(1 - Math.Pow(p - 1, 2)); + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/OutElastic.cs b/Dalamud/Interface/Animation/EasingFunctions/OutElastic.cs new file mode 100644 index 000000000..3475c4a72 --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/OutElastic.cs @@ -0,0 +1,33 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "OutElastic" easing animation. + /// + public class OutElastic : Easing + { + private const double Constant = (2 * Math.PI) / 3; + + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public OutElastic(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = p == 0 + ? 0 + : p == 1 + ? 1 + : (Math.Pow(2, -10 * p) * Math.Sin(((p * 10) - 0.75) * Constant)) + 1; + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/OutQuint.cs b/Dalamud/Interface/Animation/EasingFunctions/OutQuint.cs new file mode 100644 index 000000000..c99c77a57 --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/OutQuint.cs @@ -0,0 +1,27 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "OutQuint" easing animation. + /// + public class OutQuint : Easing + { + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public OutQuint(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = 1 - Math.Pow(1 - p, 5); + } + } +} diff --git a/Dalamud/Interface/Animation/EasingFunctions/OutSine.cs b/Dalamud/Interface/Animation/EasingFunctions/OutSine.cs new file mode 100644 index 000000000..c1becf81c --- /dev/null +++ b/Dalamud/Interface/Animation/EasingFunctions/OutSine.cs @@ -0,0 +1,27 @@ +using System; + +namespace Dalamud.Interface.Animation.EasingFunctions +{ + /// + /// Class providing an "OutSine" easing animation. + /// + public class OutSine : Easing + { + /// + /// Initializes a new instance of the class. + /// + /// The duration of the animation. + public OutSine(TimeSpan duration) + : base(duration) + { + // ignored + } + + /// + public override void Update() + { + var p = this.Progress; + this.Value = Math.Sin((p * Math.PI) / 2); + } + } +}