rpfm_lib/files/bmd/custom_material_mesh_list/custom_material_mesh/
v4.rs1use crate::binary::ReadBytes;
12use crate::error::Result;
13
14use super::*;
15
16impl 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}