using MshLib;
namespace NResUI.Rendering.Inspection;
///
/// Parsed MSH component data retained so state/LOD changes can rebuild GPU meshes without reparsing the file.
///
public sealed class MshModelGeometry
{
/// Таблица узлов 0x01: именно она связывает каждый piece с geometry slot для пары state/LOD.
public required Msh0x01.Msh0x01Component Nodes { get; init; }
/// Слоты геометрии 0x02. Один piece выбирает один слот через 0x01.ResolveSlotIndex.
public required Msh0x02.Msh0x02Component GeometrySlots { get; init; }
/// Позиции вершин из 0x03.
public required IReadOnlyList Positions { get; init; }
/// Нормали из 0x04. Компонент опционален, поэтому фабрика мешей обязана иметь fallback.
public required IReadOnlyList Normals { get; init; }
/// UV из 0x05. Компонент опционален для части ресурсов.
public required IReadOnlyList Uvs { get; init; }
/// Индексный буфер 0x06 для обычных моделей.
public required IReadOnlyList Indices { get; init; }
/// Render batches 0x0D: диапазоны индексов, material id и render flags.
public required IReadOnlyList Batches { get; init; }
/// Piece transform keyframes from MSH 0x08.
public required IReadOnlyList TransformKeyframes { get; init; }
/// Animation frame to 0x08 keyframe map from MSH 0x13. Optional in some files.
public required IReadOnlyList AnimationMap { get; init; }
/// Animation frame count/window from MSH 0x13 NRes metadata.
public required int MaxAnimationTime { get; init; }
}