summaryrefslogtreecommitdiff
path: root/shared/src/resources.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-06 14:58:42 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-06 14:58:42 +0100
commit48a0fb31737362c9bae0ff8f6fcf1e4e10600f94 (patch)
treeb7b6940d476ce78081d99b1e9c028c86115bd8ed /shared/src/resources.rs
parent814cc1cb01692aa934a40636c9226ff7bb911266 (diff)
downloadweareserver-48a0fb31737362c9bae0ff8f6fcf1e4e10600f94.tar
weareserver-48a0fb31737362c9bae0ff8f6fcf1e4e10600f94.tar.bz2
weareserver-48a0fb31737362c9bae0ff8f6fcf1e4e10600f94.tar.zst
prefab offsets
Diffstat (limited to 'shared/src/resources.rs')
-rw-r--r--shared/src/resources.rs25
1 files changed, 20 insertions, 5 deletions
diff --git a/shared/src/resources.rs b/shared/src/resources.rs
index cdf53bd..e59ea25 100644
--- a/shared/src/resources.rs
+++ b/shared/src/resources.rs
@@ -1,10 +1,11 @@
use crate::packets::{ReadWrite, Resource};
use anyhow::{Result, bail};
+use glam::Vec3;
use log::warn;
use std::io::{Read, Write};
#[derive(Debug, Default, Clone)]
-pub struct Prefab(pub Vec<Resource>);
+pub struct Prefab(pub Vec<(Vec3, Vec3, Resource)>);
#[derive(Debug, Default, Clone)]
pub struct Part {
@@ -32,8 +33,10 @@ pub struct IndexArray(pub Vec<[u16; 3]>);
impl ReadWrite for Prefab {
fn write(&self, w: &mut dyn Write) -> Result<()> {
- for x in self.0.clone() {
- w.write_all(&x.0)?;
+ for (pos, rot, res) in self.0.clone() {
+ pos.write(w)?;
+ rot.write(w)?;
+ res.write(w)?;
}
Ok(())
}
@@ -41,8 +44,8 @@ impl ReadWrite for Prefab {
let mut s = Prefab::default();
let mut g = Vec::new();
r.read_to_end(&mut g)?;
- for x in g.iter().array_chunks::<32>() {
- s.0.push(Resource(x.map(|x| *x)))
+ while !g.is_empty() {
+ s.0.push((Vec3::read(r)?, Vec3::read(r)?, Resource::read(r)?))
}
Ok(s)
}
@@ -182,3 +185,15 @@ impl ReadWrite for Attribute {
})
}
}
+
+impl ReadWrite for Vec3 {
+ fn write(&self, w: &mut dyn Write) -> Result<()> {
+ w.write_all(&self.x.to_be_bytes())?;
+ w.write_all(&self.y.to_be_bytes())?;
+ w.write_all(&self.z.to_be_bytes())?;
+ Ok(())
+ }
+ fn read(r: &mut dyn Read) -> Result<Self> {
+ Ok(Self::new(f32::read(r)?, f32::read(r)?, f32::read(r)?))
+ }
+}