summaryrefslogtreecommitdiff
path: root/shared/src/helper.rs
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src/helper.rs')
-rw-r--r--shared/src/helper.rs69
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)?;