Editor/HumanoidMocap/RetargetWindow.ClipSpeed.cs
using System;
using System.Globalization;
using Editor;
using Sandbox;
namespace HumanoidMocapX.EditorTools;
/// <summary>Playback and export speed of the animation; Mocap adjustments → Animation speed changes it.</summary>
public sealed partial class RetargetWindow
{
/// <summary>Playback and export speed of the animation (1 = the video's own).</summary>
float _animationSpeed=1;
LineEdit _speedField;
internal float GateAnimationSpeed=>_animationSpeed;
/// <summary>A new video starts at its own speed.</summary>
void ResetClipSpeed()
{
_animationSpeed=1;
if(_speedField.IsValid())_speedField.Text="100";
}
void SetAnimationSpeed(float speed)
{
_animationSpeed=Math.Clamp(speed,.1f,2f);
if(_speedField.IsValid())_speedField.Text=(_animationSpeed*100).ToString("0",CultureInfo.InvariantCulture);
}
/// <summary>Advanced → Animation speed, in percent.</summary>
void AnimationSpeedEdited()
{
if(float.TryParse(_speedField.Text.TrimEnd('%',' '),NumberStyles.Float,CultureInfo.InvariantCulture,out var percent)&&percent>=10&&percent<=200)
{
SetAnimationSpeed(percent/100);
_captureStatus.Text=Math.Abs(_animationSpeed-1)<1e-3f?"Animation plays at the video's speed.":FormattableString.Invariant($"Animation plays and exports at {_animationSpeed*100:0}% speed.");
}
else _speedField.Text=(_animationSpeed*100).ToString("0",CultureInfo.InvariantCulture);
}
}