mirror of
https://github.com/redstrate/Physis.git
synced 2025-04-23 21:17:45 +00:00
Move calculating runtime size to it's own function
This commit is contained in:
parent
d925bf6e95
commit
eb08d9f142
1 changed files with 30 additions and 25 deletions
55
src/model.rs
55
src/model.rs
|
@ -597,31 +597,7 @@ impl MDL {
|
|||
// update lod values
|
||||
// TODO: From Xande, need to be cleaned up :)
|
||||
self.file_header.stack_size = self.file_header.calculate_stack_size();
|
||||
self.file_header.runtime_size =
|
||||
2 //StringCount
|
||||
+ 2 // Unknown
|
||||
+ 4 //StringSize
|
||||
+ self.model_data.header.string_size
|
||||
+ 56 //ModelHeader
|
||||
+ (self.model_data.element_ids.len() as u32 * 32)
|
||||
+ (3 * 60) // 3 Lods
|
||||
//+ ( /*file.ModelHeader.ExtraLodEnabled ? 40*/ 0 )
|
||||
+ self.model_data.meshes.len() as u32 * 36
|
||||
+ self.model_data.attribute_name_offsets.len() as u32 * size_of::<u32>() as u32
|
||||
+ self.model_data.header.terrain_shadow_mesh_count as u32 * 20
|
||||
+ self.model_data.header.submesh_count as u32 * 16
|
||||
+ self.model_data.header.terrain_shadow_submesh_count as u32 * 10
|
||||
+ self.model_data.material_name_offsets.len() as u32 * size_of::<u32>() as u32
|
||||
+ self.model_data.bone_name_offsets.len() as u32 * size_of::<u32>() as u32
|
||||
+ self.model_data.bone_tables.len() as u32 * 132
|
||||
+ self.model_data.header.shape_count as u32 * 16
|
||||
+ self.model_data.header.shape_mesh_count as u32 * 12
|
||||
+ self.model_data.header.shape_value_count as u32 * 4
|
||||
+ 4 // SubmeshBoneMapSize
|
||||
+ self.model_data.submesh_bone_map.len() as u32 * 2
|
||||
+ 8 // PaddingAmount and Padding
|
||||
+ (4 * 32) // 4 BoundingBoxes
|
||||
+ (self.model_data.header.bone_count as u32 * 32);
|
||||
self.file_header.runtime_size = self.model_data.calculate_runtime_size();
|
||||
|
||||
let mut vertex_offset = self.file_header.runtime_size
|
||||
+ size_of::<ModelFileHeader>() as u32
|
||||
|
@ -809,6 +785,35 @@ impl ModelFileHeader {
|
|||
}
|
||||
}
|
||||
|
||||
impl ModelData {
|
||||
pub fn calculate_runtime_size(&self) -> u32 {
|
||||
2 //StringCount
|
||||
+ 2 // Unknown
|
||||
+ 4 //StringSize
|
||||
+ self.header.string_size
|
||||
+ 56 //ModelHeader
|
||||
+ (self.element_ids.len() as u32 * 32)
|
||||
+ (3 * 60) // 3 Lods
|
||||
//+ ( /*file.ModelHeader.ExtraLodEnabled ? 40*/ 0 )
|
||||
+ self.meshes.len() as u32 * 36
|
||||
+ self.attribute_name_offsets.len() as u32 * size_of::<u32>() as u32
|
||||
+ self.header.terrain_shadow_mesh_count as u32 * 20
|
||||
+ self.header.submesh_count as u32 * 16
|
||||
+ self.header.terrain_shadow_submesh_count as u32 * 10
|
||||
+ self.material_name_offsets.len() as u32 * size_of::<u32>() as u32
|
||||
+ self.bone_name_offsets.len() as u32 * size_of::<u32>() as u32
|
||||
+ self.bone_tables.len() as u32 * 132
|
||||
+ self.header.shape_count as u32 * 16
|
||||
+ self.header.shape_mesh_count as u32 * 12
|
||||
+ self.header.shape_value_count as u32 * 4
|
||||
+ 4 // SubmeshBoneMapSize
|
||||
+ self.submesh_bone_map.len() as u32 * 2
|
||||
+ 8 // PaddingAmount and Padding
|
||||
+ (4 * 32) // 4 BoundingBoxes
|
||||
+ (self.header.bone_count as u32 * 32)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::io::Cursor;
|
||||
|
|
Loading…
Add table
Reference in a new issue