use crate::error::Result;
use crate::binary::{ReadBytes, WriteBytes};
use super::*;
impl Collision3d {
pub fn read_v13<R: ReadBytes>(&mut self, data: &mut R) -> Result<()> {
self.name = data.read_sized_string_u16()?;
self.uk_1 = data.read_i32()?;
self.uk_2 = data.read_i32()?;
for _ in 0..data.read_u32()? {
self.vertices.push(Point3d::decode(data, &None)?);
}
for _ in 0..data.read_u32()? {
let mut collision_triangle = CollisionTriangle::default();
collision_triangle.face_index = data.read_i32()?;
collision_triangle.padding = data.read_i8()?;
collision_triangle.vertex_1 = data.read_i32()?;
collision_triangle.vertex_2 = data.read_i32()?;
collision_triangle.vertex_3 = data.read_i32()?;
collision_triangle.edge_1_vertex_1 = data.read_i32()?;
collision_triangle.edge_1_vertex_2 = data.read_i32()?;
collision_triangle.face_index_1 = data.read_i32()?;
collision_triangle.zero_1 = data.read_i32()?;
collision_triangle.across_face_index_1 = data.read_i32()?;
collision_triangle.edge_2_vertex_1 = data.read_i32()?;
collision_triangle.edge_2_vertex_2 = data.read_i32()?;
collision_triangle.face_index_2 = data.read_i32()?;
collision_triangle.zero_2 = data.read_i32()?;
collision_triangle.across_face_index_2 = data.read_i32()?;
collision_triangle.edge_3_vertex_1 = data.read_i32()?;
collision_triangle.edge_3_vertex_2 = data.read_i32()?;
collision_triangle.face_index_3 = data.read_i32()?;
collision_triangle.zero_3 = data.read_i32()?;
collision_triangle.across_face_index_3 = data.read_i32()?;
collision_triangle.zero_4 = data.read_i32()?;
self.triangles.push(collision_triangle);
}
Ok(())
}
pub fn write_v13<W: WriteBytes>(&mut self, buffer: &mut W) -> Result<()> {
buffer.write_sized_string_u16(&self.name)?;
buffer.write_i32(self.uk_1)?;
buffer.write_i32(self.uk_2)?;
buffer.write_u32(self.vertices.len() as u32)?;
for vertex in &mut self.vertices {
vertex.encode(buffer, &None)?;
}
buffer.write_u32(self.triangles.len() as u32)?;
for triangle in &mut self.triangles {
buffer.write_i32(triangle.face_index)?;
buffer.write_i8(triangle.padding)?;
buffer.write_i32(triangle.vertex_1)?;
buffer.write_i32(triangle.vertex_2)?;
buffer.write_i32(triangle.vertex_3)?;
buffer.write_i32(triangle.edge_1_vertex_1)?;
buffer.write_i32(triangle.edge_1_vertex_2)?;
buffer.write_i32(triangle.face_index_1)?;
buffer.write_i32(triangle.zero_1)?;
buffer.write_i32(triangle.across_face_index_1)?;
buffer.write_i32(triangle.edge_2_vertex_1)?;
buffer.write_i32(triangle.edge_2_vertex_2)?;
buffer.write_i32(triangle.face_index_2)?;
buffer.write_i32(triangle.zero_2)?;
buffer.write_i32(triangle.across_face_index_2)?;
buffer.write_i32(triangle.edge_3_vertex_1)?;
buffer.write_i32(triangle.edge_3_vertex_2)?;
buffer.write_i32(triangle.face_index_3)?;
buffer.write_i32(triangle.zero_3)?;
buffer.write_i32(triangle.across_face_index_3)?;
buffer.write_i32(triangle.zero_4)?;
}
Ok(())
}
}