rj-action-library/Runtime/Math/Smoother.cs

51 lines
1.5 KiB
C#
Raw Normal View History

2024-05-19 15:59:41 +00:00
using System.Collections;
using System.Collections.Generic;
using Godot;
namespace Rokojori
{
public class Smoother
{
float overflowDelta = 0;
public float SmoothForDuration( float value, float nextValue, float duration, float delta, float processDelta = MathX.fps120Delta )
{
var coefficient = MathX.SmoothingCoefficient( duration * 1000f );
return SmoothWithCoefficient( value, nextValue, coefficient, delta );
}
public float SmoothWithCoefficient( float value, float nextValue, float coefficient, float delta, float processDelta = MathX.fps120Delta )
{
overflowDelta += delta;
while ( overflowDelta > processDelta )
{
value += coefficient * ( nextValue - value );
overflowDelta -= processDelta;
}
return value;
}
public Quaternion SmoothForDuration( Quaternion value, Quaternion nextValue, float duration, float delta, float processDelta = MathX.fps120Delta )
{
var coefficient = MathX.SmoothingCoefficient( duration * 1000f );
return SmoothWithCoefficient( value, nextValue, coefficient, delta );
}
public Quaternion SmoothWithCoefficient( Quaternion value, Quaternion nextValue, float coefficient, float delta, float processDelta = MathX.fps120Delta )
{
overflowDelta += delta;
while ( overflowDelta > processDelta )
{
value = value.Slerp( nextValue, coefficient );
overflowDelta -= processDelta;
}
return value;
}
}
}