rpfm_lib/files/bmd/custom_material_mesh_list/custom_material_mesh/
v4.rs

1//---------------------------------------------------------------------------//
2// Copyright (c) 2017-2024 Ismael Gutiérrez González. All rights reserved.
3//
4// This file is part of the Rusted PackFile Manager (RPFM) project,
5// which can be found here: https://github.com/Frodo45127/rpfm.
6//
7// This file is licensed under the MIT license, which can be found here:
8// https://github.com/Frodo45127/rpfm/blob/master/LICENSE.
9//---------------------------------------------------------------------------//
10
11use crate::binary::ReadBytes;
12use crate::error::Result;
13
14use super::*;
15
16//---------------------------------------------------------------------------//
17//                    Implementation of CustomMaterialMeshList
18//---------------------------------------------------------------------------//
19
20impl CustomMaterialMesh {
21
22    pub(crate) fn read_v4<R: ReadBytes>(&mut self, data: &mut R, extra_data: &Option<DecodeableExtraData>) -> Result<()> {
23        for _ in 0..data.read_u32()? {
24            self.vertices.push(Point3d::decode(data, extra_data)?);
25        }
26
27        for _ in 0..data.read_u32()? {
28            self.indices.push(data.read_u16()?);
29        }
30
31        self.material = data.read_sized_string_u8()?;
32        self.height_mode = data.read_sized_string_u8()?;
33        self.flags = Flags::decode(data, extra_data)?;
34        self.transform = Transform3x4::decode(data, extra_data)?;
35        self.snow_inside = data.read_bool()?;
36        self.snow_outside = data.read_bool()?;
37        self.destruction_inside = data.read_bool()?;
38        self.destruction_outside = data.read_bool()?;
39        self.visible_in_shroud = data.read_bool()?;
40        self.visible_without_shroud = data.read_bool()?;
41
42        Ok(())
43    }
44
45    pub(crate) fn write_v4<W: WriteBytes>(&mut self, buffer: &mut W, extra_data: &Option<EncodeableExtraData>) -> Result<()> {
46        buffer.write_u32(self.vertices.len() as u32)?;
47        for vertex in &mut self.vertices {
48            vertex.encode(buffer, extra_data)?;
49        }
50
51        buffer.write_u32(self.indices.len() as u32)?;
52        for index in &self.indices {
53            buffer.write_u16(*index)?;
54        }
55
56        buffer.write_sized_string_u8(&self.material)?;
57        buffer.write_sized_string_u8(&self.height_mode)?;
58
59        self.flags.encode(buffer, extra_data)?;
60        self.transform.encode(buffer, extra_data)?;
61
62        buffer.write_bool(self.snow_inside)?;
63        buffer.write_bool(self.snow_outside)?;
64        buffer.write_bool(self.destruction_inside)?;
65        buffer.write_bool(self.destruction_outside)?;
66        buffer.write_bool(self.visible_in_shroud)?;
67        buffer.write_bool(self.visible_without_shroud)?;
68
69        Ok(())
70    }
71}