ReloadDockChecks.cs
using Sandbox;
using System;

namespace PaintballBaddies;

/// <summary>Compare track and hip-docked gear at the same final reload pose.</summary>
public sealed class ReloadDockChecks : Component
{
    [Property] public string ModelPath { get; set; } = "models/characters/mei_protected_morph/mei_protected.vmdl";
    private float elapsed;
    private bool done;
    protected override void OnUpdate() => elapsed += Time.Delta;
    protected override void OnPreRender()
    {
        if ( done || elapsed < .4f ) return;
        var track = Scene.GetAllComponents<ReloadPresentationTrack>().FirstOrDefault(x => x.Body.IsValid()
            && x.Body.Model?.Name == ModelPath && x.Body.Sequence.Name == "reload_standing" && !x.Docked);
        if ( !track.IsValid() || !track.Body.IsValid() ) return;
        var props = track.PresentationProps.Take(3).Select(x => x.Components.Get<ModelRenderer>()).ToArray();
        if ( props.Length != 3 ) return;
        track.Docked = false; track.Phase = 1; track.ApplyFrame();
        var before = props.Select( x => x.WorldTransform ).ToArray();
        track.Docked = true; track.ApplyFrame();
        for ( int i = 0; i < props.Length; i++ )
        {
            var distance = (props[i].WorldPosition - before[i].Position).Length;
            var forwardError = (props[i].WorldRotation.Forward - before[i].Rotation.Forward).Length;
            var upError = (props[i].WorldRotation.Up - before[i].Rotation.Up).Length;
            Log.Info( $"RELOAD_DOCK {(distance < .1f && forwardError < .01f && upError < .01f ? "PASS" : "FAIL")} {props[i].GameObject.Name}: position={distance} inches forward={forwardError} up={upError}" );
        }
        track.Docked = false; track.ApplyFrame(); done = true;
        Log.Info( "RELOAD_DOCK COMPLETE" );
    }
}