brawllib_rs 0.29.0

Brawl character file parser, based on brawlbox/brawllib
Documentation
use fancy_slice::FancySlice;

use crate::resources::Resource;

pub(crate) fn textures(data: FancySlice, resources: Vec<Resource>) -> Vec<Texture> {
    let mut textures = vec![];
    for resource in resources {
        let mut references = vec![];

        let num_children = data.i32_be(resource.data_offset as usize);
        for i in 0..num_children as usize {
            let data = data
                .relative_fancy_slice(resource.data_offset as usize + 4 + TEXTURE_REF_SIZE * i..);
            let material_offset = data.i32_be(0x00);
            let reference_offset = data.i32_be(0x04);

            references.push(TextureRef {
                material_offset,
                reference_offset,
            });
        }
        let name = resource.string;
        textures.push(Texture { name, references });
    }
    textures
}

#[derive(Clone, Debug)]
pub struct Texture {
    pub name: String,
    pub references: Vec<TextureRef>,
}

const TEXTURE_REF_SIZE: usize = 0x8;
#[derive(Clone, Debug)]
pub struct TextureRef {
    pub material_offset: i32,
    pub reference_offset: i32,
}