From 2d6f319dfccf6339ed1a3bbfb003b8b2dde82383 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 19 Jan 2025 16:44:06 +0100 Subject: client: normal maps --- shared/src/helper.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'shared/src/helper.rs') diff --git a/shared/src/helper.rs b/shared/src/helper.rs index eb1f321..d46a830 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -16,7 +16,7 @@ */ use crate::packets::{Data, Object, Resource}; use anyhow::Result; -use glam::{Affine3A, Vec2, Vec3A}; +use glam::{Affine3A, Vec2, Vec3, Vec3A}; use std::{ borrow::Cow, io::{Read, Write}, @@ -103,6 +103,25 @@ impl ReadWrite for Vec { .collect()) } } +impl ReadWrite for Vec { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for e in self { + e.write(w)?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result { + let mut buf = Vec::new(); + r.read_to_end(&mut buf)?; + Ok(buf + .into_iter() + .array_chunks::<{ size_of::() }>() + .map(f32::from_be_bytes) + .array_chunks::<3>() + .map(Vec3::from_array) + .collect()) + } +} impl ReadWrite for Vec { fn write(&self, w: &mut dyn Write) -> Result<()> { for e in self { @@ -249,6 +268,17 @@ impl ReadWrite for Vec3A { Ok(Self::new(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)?; + self.y.write(w)?; + self.z.write(w)?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result { + Ok(Self::new(f32::read(r)?, f32::read(r)?, f32::read(r)?)) + } +} impl ReadWrite for Affine3A { fn write(&self, w: &mut dyn Write) -> Result<()> { for v in self.to_cols_array() { -- cgit v1.2.3-70-g09d2