HumanoidRetargeter/Core/Skeleton/BoneDefinition.cs

A simple immutable data record that represents a single bone definition for the skeleton system. It stores the bone Name, optional ParentName, and the RestLocal transform in centimeters, and is intended as input when building a Skeleton.

#nullable enable annotations

using System;
using System.Collections.Generic;
using HumanoidRetargeter.Core.Maths;

namespace HumanoidRetargeter.Core.Skeleton;

/// <summary>
/// Input definition for a single bone, used to build a <see cref="Skeleton"/>.
/// Order does not matter; construction topologically sorts parents before children.
/// </summary>
/// <param name="Name">Unique bone name.</param>
/// <param name="ParentName">Parent bone name, or null for a root bone (multiple roots allowed).</param>
/// <param name="RestLocal">Rest (bind) transform relative to the parent bone, centimeters.</param>
[Alias( "HumanoidRetargeter.Skeleton.BoneDefinition" )]
public readonly record struct BoneDefinition(string Name, string? ParentName, XForm RestLocal);