wow_dbc/tbc_tables/
gt_oct_regen_hp.rs1use crate::DbcTable;
2use crate::header::{
3 DbcHeader, HEADER_SIZE, parse_header,
4};
5use std::io::Write;
6
7#[derive(Debug, Clone, PartialEq, PartialOrd)]
8pub struct gtOCTRegenHP {
9 pub rows: Vec<gtOCTRegenHPRow>,
10}
11
12impl DbcTable for gtOCTRegenHP {
13 type Row = gtOCTRegenHPRow;
14
15 const FILENAME: &'static str = "gtOCTRegenHP.dbc";
16
17 fn rows(&self) -> &[Self::Row] { &self.rows }
18 fn rows_mut(&mut self) -> &mut [Self::Row] { &mut self.rows }
19
20 fn read(b: &mut impl std::io::Read) -> Result<Self, crate::DbcError> {
21 let mut header = [0_u8; HEADER_SIZE];
22 b.read_exact(&mut header)?;
23 let header = parse_header(&header)?;
24
25 if header.record_size != 4 {
26 return Err(crate::DbcError::InvalidHeader(
27 crate::InvalidHeaderError::RecordSize {
28 expected: 4,
29 actual: header.record_size,
30 },
31 ));
32 }
33
34 if header.field_count != 1 {
35 return Err(crate::DbcError::InvalidHeader(
36 crate::InvalidHeaderError::FieldCount {
37 expected: 1,
38 actual: header.field_count,
39 },
40 ));
41 }
42
43 let mut r = vec![0_u8; (header.record_count * header.record_size) as usize];
44 b.read_exact(&mut r)?;
45
46 let mut rows = Vec::with_capacity(header.record_count as usize);
47
48 for mut chunk in r.chunks(header.record_size as usize) {
49 let chunk = &mut chunk;
50
51 let data = crate::util::read_f32_le(chunk)?;
53
54
55 rows.push(gtOCTRegenHPRow {
56 data,
57 });
58 }
59
60 Ok(gtOCTRegenHP { rows, })
61 }
62
63 fn write(&self, b: &mut impl Write) -> Result<(), std::io::Error> {
64 let header = DbcHeader {
65 record_count: self.rows.len() as u32,
66 field_count: 1,
67 record_size: 4,
68 string_block_size: 1,
69 };
70
71 b.write_all(&header.write_header())?;
72
73 for row in &self.rows {
74 b.write_all(&row.data.to_le_bytes())?;
76
77 }
78
79 b.write_all(&[0_u8])?;
80
81 Ok(())
82 }
83
84}
85
86#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
87pub struct gtOCTRegenHPRow {
88 pub data: f32,
89}
90