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.rs38
1 files changed, 37 insertions, 1 deletions
diff --git a/shared/src/helper.rs b/shared/src/helper.rs
index 366ea52..be7d929 100644
--- a/shared/src/helper.rs
+++ b/shared/src/helper.rs
@@ -16,7 +16,7 @@
*/
use crate::packets::{Data, Message, Object, Resource};
use anyhow::Result;
-use glam::{Affine3A, Vec2, Vec3, Vec3A};
+use glam::{Affine3A, Vec2, Vec3, Vec3A, Vec4};
use std::{
borrow::Cow,
io::{Read, Write},
@@ -122,6 +122,25 @@ impl ReadWrite for Vec<Vec3> {
.collect())
}
}
+impl ReadWrite for Vec<Vec4> {
+ fn write(&self, w: &mut dyn Write) -> Result<()> {
+ for e in self {
+ e.write(w)?;
+ }
+ Ok(())
+ }
+ fn read(r: &mut dyn Read) -> Result<Self> {
+ let mut buf = Vec::new();
+ r.read_to_end(&mut buf)?;
+ Ok(buf
+ .into_iter()
+ .array_chunks::<{ size_of::<f32>() }>()
+ .map(f32::from_be_bytes)
+ .array_chunks::<4>()
+ .map(Vec4::from_array)
+ .collect())
+ }
+}
impl ReadWrite for Vec<Vec2> {
fn write(&self, w: &mut dyn Write) -> Result<()> {
for e in self {
@@ -382,6 +401,23 @@ impl ReadWrite for Vec3A {
Ok(Self::new(f32::read(r)?, f32::read(r)?, f32::read(r)?))
}
}
+impl ReadWrite for Vec4 {
+ fn write(&self, w: &mut dyn Write) -> Result<()> {
+ self.x.write(w)?;
+ self.y.write(w)?;
+ self.z.write(w)?;
+ self.w.write(w)?;
+ Ok(())
+ }
+ fn read(r: &mut dyn Read) -> Result<Self> {
+ Ok(Self::new(
+ f32::read(r)?,
+ f32::read(r)?,
+ f32::read(r)?,
+ f32::read(r)?,
+ ))
+ }
+}
impl ReadWrite for Vec3 {
fn write(&self, w: &mut dyn Write) -> Result<()> {
self.x.write(w)?;