uorustlibs/map/
radarcol.rs1use crate::color::Color16;
8use crate::error::MulReaderResult;
9use byteorder::{LittleEndian, ReadBytesExt};
10use std::fs::File;
11use std::io::{Read, Seek, SeekFrom};
12use std::path::Path;
13
14#[derive(Debug)]
16pub struct RadarColReader<T: Read + Seek> {
17 data_reader: T,
18 length: u32,
19}
20
21impl RadarColReader<File> {
22 pub fn new(radar_col_path: &Path) -> MulReaderResult<RadarColReader<File>> {
24 let data_reader = File::open(radar_col_path)?;
25 let meta = data_reader.metadata()?;
26 let length = meta.len() as u32;
27
28 Ok(RadarColReader {
29 data_reader,
30 length,
31 })
32 }
33}
34
35impl<T: Read + Seek> RadarColReader<T> {
36 pub fn from_readable(data_reader: T, length: u32) -> RadarColReader<T> {
38 RadarColReader {
39 data_reader,
40 length,
41 }
42 }
43
44 pub fn read(&mut self, id: u32) -> MulReaderResult<Color16> {
46 self.data_reader.seek(SeekFrom::Start((id * 2) as u64))?;
47 let data = self.data_reader.read_u16::<LittleEndian>()?;
48 Ok(data)
49 }
50
51 pub fn read_all(&mut self) -> MulReaderResult<Vec<Color16>> {
53 let mut output = vec![];
54 self.data_reader.seek(SeekFrom::Start(0))?;
55 for _i in 0..(self.length / 2) {
56 output.push(self.data_reader.read_u16::<LittleEndian>()?);
57 }
58 Ok(output)
59 }
60}