1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use std::ops::Range;

pub struct StudioHHeader2 {
    source_bone_transform_count: i32,
    source_bone_transform_index: i32,

    pub illumination_position_attachment_index: i32,

    fl_max_exe_deflection: f32,

    pub linear_bone_index: i32,

    pub sz_name_index: i32,

    bone_flex_driver_count: i32,
    bone_flex_driver_index: i32,

    #[allow(dead_code)]
    reserved: [i32; 56],
}

impl StudioHHeader2 {
    pub fn source_bone_transforms(&self) -> Range<i32> {
        self.source_bone_transform_index
            ..(self.source_bone_transform_index + self.source_bone_transform_count)
    }

    pub fn bone_flex_drivers(&self) -> Range<i32> {
        self.bone_flex_driver_index..(self.bone_flex_driver_index + self.bone_flex_driver_count)
    }

    pub fn max_eye_deflection(&self) -> f32 {
        if self.fl_max_exe_deflection == 0.0 {
            (30.0f32).cos()
        } else {
            self.fl_max_exe_deflection
        }
    }
}