Animation/SpringVector2.cs
using System;
using Sandbox;
namespace Goo.Animation;
public record struct SpringVector2
{
public Vector2 Current;
public Vector2 Target;
public Vector2 Velocity;
public float Frequency;
public float Damping;
public SpringVector2(Vector2 initial, float frequency, float damping)
{
Current = initial;
Target = initial;
Velocity = default;
Frequency = frequency;
Damping = damping;
}
public void Update(float dt)
{
float vx = Velocity.x, vy = Velocity.y;
Current = new Vector2(
MathX.SpringDamp(Current.x, Target.x, ref vx, dt, Frequency, Damping),
MathX.SpringDamp(Current.y, Target.y, ref vy, dt, Frequency, Damping));
Velocity = new Vector2(vx, vy);
}
public bool IsSettled =>
MathF.Abs(Target.x - Current.x) < 0.0001f &&
MathF.Abs(Target.y - Current.y) < 0.0001f &&
MathF.Abs(Velocity.x) < 0.0001f &&
MathF.Abs(Velocity.y) < 0.0001f;
}