diff options
Diffstat (limited to 'shared/src/helper.rs')
-rw-r--r-- | shared/src/helper.rs | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/shared/src/helper.rs b/shared/src/helper.rs index d6fbe66..1cd9aca 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -16,13 +16,47 @@ */ use crate::packets::{Data, Message, Object, Resource}; use anyhow::Result; -use glam::{Affine3A, Vec2, Vec3, Vec3A, Vec4}; +use glam::{Affine3A, DAffine3, DVec3, Vec2, Vec3, Vec3A, Vec4}; use std::{ borrow::Cow, io::{Read, Write}, marker::PhantomData, }; +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct AABB { + pub min: Vec3, + pub max: Vec3, +} +impl AABB { + pub fn intersects(other: &Self) -> bool { + let _ = other; + todo!() + } + pub fn includes(other: &Self) -> bool { + let _ = other; + todo!() + } + pub fn contains(point: Vec3) -> bool { + let _ = point; + todo!() + } +} + +impl ReadWrite for AABB { + fn write(&self, w: &mut dyn Write) -> Result<()> { + self.min.write(w)?; + self.max.write(w)?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + Ok(Self { + min: Vec3::read(r)?, + max: Vec3::read(r)?, + }) + } +} + pub trait ReadWrite: Sized { fn write(&self, w: &mut dyn Write) -> Result<()>; fn read(r: &mut dyn Read) -> Result<Self>; @@ -45,6 +79,17 @@ impl ReadWrite for f32 { Ok(f32::from_le_bytes(buf)) } } +impl ReadWrite for f64 { + fn write(&self, w: &mut dyn Write) -> Result<()> { + w.write_all(&self.to_le_bytes())?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut buf = [0; { size_of::<f64>() }]; + r.read_exact(&mut buf)?; + Ok(f64::from_le_bytes(buf)) + } +} impl ReadWrite for u32 { fn write(&self, w: &mut dyn Write) -> Result<()> { w.write_all(&self.to_le_bytes())?; @@ -450,6 +495,17 @@ impl ReadWrite for Vec3 { Ok(Self::new(f32::read(r)?, f32::read(r)?, f32::read(r)?)) } } +impl ReadWrite for DVec3 { + fn write(&self, w: &mut dyn Write) -> Result<()> { + self.x.write(w)?; + self.y.write(w)?; + self.z.write(w)?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + Ok(Self::new(f64::read(r)?, f64::read(r)?, f64::read(r)?)) + } +} impl ReadWrite for Affine3A { fn write(&self, w: &mut dyn Write) -> Result<()> { for v in self.to_cols_array() { @@ -461,6 +517,17 @@ impl ReadWrite for Affine3A { Ok(Self::from_cols_array(&[(); 12].try_map(|()| f32::read(r))?)) } } +impl ReadWrite for DAffine3 { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for v in self.to_cols_array() { + v.write(w)? + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + Ok(Self::from_cols_array(&[(); 12].try_map(|()| f64::read(r))?)) + } +} impl<A: ReadWrite, B: ReadWrite> ReadWrite for (A, B) { fn write(&self, w: &mut dyn Write) -> Result<()> { self.0.write(w)?; |