use std::io::Read; use bevy::math::{Quat, Vec3}; pub struct StreamedBuffer{ stream: Box } impl StreamedBuffer{ pub fn new( stream: impl Read + 'static ) -> Self{ Self { stream: Box::new(stream) } } pub fn get_u8(&mut self) -> u8{ let mut b = [0u8; 1]; self.stream.read(&mut b).unwrap(); b[0] } pub fn get_u8s(&mut self, count: usize) -> Vec{ let mut b = vec![0u8; count]; self.stream.read(&mut b).unwrap(); b } pub fn get_i32(&mut self) -> i32{ let b = self.get_u8s(4); i32::from_le_bytes([ b[0], b[1], b[2], b[3] ]) } pub fn get_u32(&mut self) -> u32{ let b = self.get_u8s(4); u32::from_le_bytes([ b[0], b[1], b[2], b[3] ]) } pub fn get_str(&mut self) -> String{ let length = self.get_u32(); let b = self.get_u8s(length as usize); let string = str::from_utf8(&b).unwrap(); string.to_owned() } pub fn get_vec3(&mut self) -> Vec3{ Vec3 { x: self.get_f32(), y: self.get_f32(), z: self.get_f32() } } pub fn get_quat(&mut self) -> Quat{ Quat::from_xyzw(self.get_f32(), self.get_f32(), self.get_f32(), self.get_f32()) } pub fn get_f32(&mut self) -> f32{ let b = self.get_u8s(4); f32::from_le_bytes([ b[0], b[1], b[2], b[3] ]) } }