nif 0.4.0

A super-primitive Gamebryo NIF parser targeting version 20.0.0.4
Documentation
use binread::{
    io::{Read, Seek},
    BinRead, BinReaderExt,
};

use crate::{blocks::NiString, common::Vector3};

#[derive(Debug, PartialEq, BinRead)]
pub struct NiMorphData {
    pub num_morphs: u32,
    pub num_vertices: u32,
    pub relative_targets: u8,
    #[br(count = num_morphs, args(num_vertices))]
    pub morphs: Vec<Morph>,
}

#[derive(Debug, PartialEq, BinRead)]
#[br(import(num_vertices: u32))]
pub struct Morph {
    pub frame_name: NiString,
    pub legacy_weight: f32,
    #[br(count = num_vertices)]
    pub vectors: Vec<Vector3>,
}

impl NiMorphData {
    pub fn parse<R: Read + Seek>(reader: &mut R) -> anyhow::Result<Self> {
        Ok(reader.read_le()?)
    }
}