From 6240e42e74a9eaeda52a5b8248f4355b294afe8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ayta=C3=A7=20Kayadelen?= Date: Wed, 1 Feb 2023 23:51:09 +0300 Subject: [PATCH] Added interpolation nodes (#755) Nodes - Added interpolation nodes Nodes - Renamed Numeric Interpolation node to Numeric Translation --- ...EasingNode.cs => NumericTransitionNode.cs} | 6 ++-- .../Nodes/Mathematics/NormalizeNode.cs | 31 +++++++++++++++++++ .../Nodes/Mathematics/NumericEasingNode.cs | 30 ++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) rename src/Artemis.VisualScripting/Nodes/Easing/{NumericEasingNode.cs => NumericTransitionNode.cs} (90%) create mode 100644 src/Artemis.VisualScripting/Nodes/Mathematics/NormalizeNode.cs create mode 100644 src/Artemis.VisualScripting/Nodes/Mathematics/NumericEasingNode.cs diff --git a/src/Artemis.VisualScripting/Nodes/Easing/NumericEasingNode.cs b/src/Artemis.VisualScripting/Nodes/Easing/NumericTransitionNode.cs similarity index 90% rename from src/Artemis.VisualScripting/Nodes/Easing/NumericEasingNode.cs rename to src/Artemis.VisualScripting/Nodes/Easing/NumericTransitionNode.cs index 426398869..7076d69f1 100644 --- a/src/Artemis.VisualScripting/Nodes/Easing/NumericEasingNode.cs +++ b/src/Artemis.VisualScripting/Nodes/Easing/NumericTransitionNode.cs @@ -2,8 +2,8 @@ namespace Artemis.VisualScripting.Nodes.Easing; -[Node("Numeric Easing", "Outputs an eased numeric value", "Easing", InputType = typeof(Numeric), OutputType = typeof(Numeric))] -public class NumericEasingNode : Node +[Node("Numeric Transition", "Outputs an eased numeric value", "Easing", InputType = typeof(Numeric), OutputType = typeof(Numeric))] +public class NumericTransitionNode : Node { private float _currentValue; private DateTime _lastEvaluate = DateTime.MinValue; @@ -11,7 +11,7 @@ public class NumericEasingNode : Node private float _sourceValue; private float _targetValue; - public NumericEasingNode() + public NumericTransitionNode() { Input = CreateInputPin(); EasingTime = CreateInputPin("delay"); diff --git a/src/Artemis.VisualScripting/Nodes/Mathematics/NormalizeNode.cs b/src/Artemis.VisualScripting/Nodes/Mathematics/NormalizeNode.cs new file mode 100644 index 000000000..c80dcd93b --- /dev/null +++ b/src/Artemis.VisualScripting/Nodes/Mathematics/NormalizeNode.cs @@ -0,0 +1,31 @@ +using Artemis.Core; + +namespace Artemis.VisualScripting.Nodes.Mathematics; + +[Node("Normalize", "Normalizes the number into range between 0-1", + "Mathematics", InputType = typeof(Numeric), OutputType = typeof(Numeric))] +public class NormalizeNode : Node +{ + public InputPin Input { get; } + public InputPin Start { get; } + public InputPin End { get; } + + public OutputPin Result { get; } + + public NormalizeNode() + { + Input = CreateInputPin("Input"); + Start = CreateInputPin("Start"); + End = CreateInputPin("End"); + + Result = CreateOutputPin(); + } + + public override void Evaluate() + { + double inputValue = Input.Value; + double startValue = Start.Value; + double endValue = End.Value; + Result.Value = (Math.Clamp(inputValue, startValue, endValue) - startValue) / (endValue - startValue); + } +} \ No newline at end of file diff --git a/src/Artemis.VisualScripting/Nodes/Mathematics/NumericEasingNode.cs b/src/Artemis.VisualScripting/Nodes/Mathematics/NumericEasingNode.cs new file mode 100644 index 000000000..dbb3d72f7 --- /dev/null +++ b/src/Artemis.VisualScripting/Nodes/Mathematics/NumericEasingNode.cs @@ -0,0 +1,30 @@ +using Artemis.Core; + +namespace Artemis.VisualScripting.Nodes.Easing; + +[Node("Numeric Easing", "Interpolates a value from 0-1 to 0-1 with the given function", + "Mathematics", InputType = typeof(Numeric), OutputType = typeof(Numeric))] +public class NumericEasingNode : Node +{ + public InputPin Input { get; } + + public InputPin EasingFunction { get; } + + public OutputPin Result { get; } + + public NumericEasingNode() + { + Input = CreateInputPin("Input"); + EasingFunction = CreateInputPin("EasingFunction"); + + Result = CreateOutputPin(); + } + + public override void Evaluate() + { + double inputValue = Input.Value; + double progress = Math.Clamp(inputValue, 0, 1); + + Result.Value = Easings.Interpolate(progress, EasingFunction.Value); + } +} \ No newline at end of file