Editor/CitizenRetarget/RetargetSampleNormalizer.cs
namespace Editor.CitizenRetarget;

internal static class RetargetSampleNormalizer
{
	public static void NormalizeToInternalCentimeters( NativeSampleResult sample )
	{
		var sourceScale = RetargetMath.CentimetersPerUnit( sample.SourceOutputUnitMeters );
		var targetScale = RetargetMath.CentimetersPerUnit( sample.TargetOutputUnitMeters );

		foreach ( var bone in sample.SourceBones )
			ScaleTranslationArray( bone.Translation, sourceScale );
		foreach ( var bone in sample.TargetBones )
			ScaleTranslationArray( bone.Translation, targetScale );
		foreach ( var frame in sample.Frames )
		{
			foreach ( var translation in frame.Translations )
				ScaleTranslationArray( translation, sourceScale );
		}
	}

	private static void ScaleTranslationArray( float[] values, float scale )
	{
		if ( values is null || values.Length < 3 || MathF.Abs( scale - 1f ) < 0.000001f )
			return;

		values[0] *= scale;
		values[1] *= scale;
		values[2] *= scale;
	}
}