A simple data container representing per-foot results from a FootPlant cleanup pass. It stores detected plant frame ranges and numeric diagnostics for rotation and positional corrections and residual slide.
#nullable enable annotations
using System;
using System.Collections.Generic;
using System.Numerics;
using HumanoidRetargeter.Core.Maths;
using SkeletonModel = HumanoidRetargeter.Core.Skeleton.Skeleton;
namespace HumanoidRetargeter.Core.Cleanup;
using Vector3 = System.Numerics.Vector3; // s&box compat: shadow engine's global-namespace Vector3 (see Code/HumanoidRetargeter/Assembly.cs)
/// <summary>Per-foot results of a <see cref="FootPlant.Apply"/> run.</summary>
public sealed class FootPlantFootReport
{
/// <summary>Detected plant intervals (inclusive frame ranges).</summary>
public List<FrameRange> Plants { get; } = new();
/// <summary>Largest rotation correction applied to any chain joint, degrees.</summary>
public float MaxCorrectionDeg { get; set; }
/// <summary>Largest world-space ankle displacement applied, centimeters.</summary>
public float MaxCorrectionCm { get; set; }
/// <summary>
/// Largest frame-to-frame ankle movement remaining inside any plant after the pass,
/// centimeters. Should be ~0 (the foot is pinned to its anchor).
/// </summary>
public float ResidualSlideCm { get; set; }
}