summaryrefslogtreecommitdiff
path: root/shared/src
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src')
-rw-r--r--shared/src/lib.rs2
-rw-r--r--shared/src/resources.rs24
2 files changed, 19 insertions, 7 deletions
diff --git a/shared/src/lib.rs b/shared/src/lib.rs
index 45b31da..56c1fe4 100644
--- a/shared/src/lib.rs
+++ b/shared/src/lib.rs
@@ -4,3 +4,5 @@ pub mod packets;
pub mod resources;
pub mod store;
pub mod tree;
+
+pub use glam::{Affine3A, Mat3A, Vec3A};
diff --git a/shared/src/resources.rs b/shared/src/resources.rs
index e59ea25..6741936 100644
--- a/shared/src/resources.rs
+++ b/shared/src/resources.rs
@@ -1,11 +1,11 @@
use crate::packets::{ReadWrite, Resource};
use anyhow::{Result, bail};
-use glam::Vec3;
+use glam::{Affine3A, Vec3A};
use log::warn;
use std::io::{Read, Write};
#[derive(Debug, Default, Clone)]
-pub struct Prefab(pub Vec<(Vec3, Vec3, Resource)>);
+pub struct Prefab(pub Vec<(Affine3A, Resource)>);
#[derive(Debug, Default, Clone)]
pub struct Part {
@@ -33,9 +33,8 @@ pub struct IndexArray(pub Vec<[u16; 3]>);
impl ReadWrite for Prefab {
fn write(&self, w: &mut dyn Write) -> Result<()> {
- for (pos, rot, res) in self.0.clone() {
- pos.write(w)?;
- rot.write(w)?;
+ for (aff, res) in self.0.clone() {
+ aff.write(w)?;
res.write(w)?;
}
Ok(())
@@ -45,7 +44,7 @@ impl ReadWrite for Prefab {
let mut g = Vec::new();
r.read_to_end(&mut g)?;
while !g.is_empty() {
- s.0.push((Vec3::read(r)?, Vec3::read(r)?, Resource::read(r)?))
+ s.0.push((Affine3A::read(r)?, Resource::read(r)?))
}
Ok(s)
}
@@ -186,7 +185,7 @@ impl ReadWrite for Attribute {
}
}
-impl ReadWrite for Vec3 {
+impl ReadWrite for Vec3A {
fn write(&self, w: &mut dyn Write) -> Result<()> {
w.write_all(&self.x.to_be_bytes())?;
w.write_all(&self.y.to_be_bytes())?;
@@ -197,3 +196,14 @@ impl ReadWrite for Vec3 {
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() {
+ v.write(w)?
+ }
+ Ok(())
+ }
+ fn read(r: &mut dyn Read) -> Result<Self> {
+ Ok(Self::from_cols_array(&[(); 12].try_map(|()| f32::read(r))?))
+ }
+}