diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-05 22:27:53 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-05 22:27:53 +0100 |
commit | e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c (patch) | |
tree | 92484ce572dff978fc289eb54d19bbb692c01c12 /client/src/part.rs | |
parent | c427fed04f89147bcdcb2b4b1be9198a063d89cd (diff) | |
download | weareserver-e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c.tar weareserver-e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c.tar.bz2 weareserver-e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c.tar.zst |
a
Diffstat (limited to 'client/src/part.rs')
-rw-r--r-- | client/src/part.rs | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/client/src/part.rs b/client/src/part.rs index 15835d0..0ad714a 100644 --- a/client/src/part.rs +++ b/client/src/part.rs @@ -1,8 +1,6 @@ +use crate::download::Downloader; use anyhow::Result; -use weareshared::{ - packets::Resource, - resources::{Indecies, Part, VertexAttributes}, -}; +use weareshared::resources::{Indecies, Part, VertexAttributes}; use wgpu::{ BindGroup, BindGroupDescriptor, BindGroupLayoutDescriptor, BlendState, Buffer, BufferUsages, ColorTargetState, ColorWrites, CommandEncoder, Device, FragmentState, FrontFace, IndexFormat, @@ -28,16 +26,25 @@ pub struct PartData { } impl PartData { - pub fn update(&mut self, hash: Resource, data: &[u8]) -> Result<bool> { - if Some(hash) == self.target.index { - self.index = Some(Indecies::deserialize(data)?) + pub fn update(&mut self, dls: &mut Downloader) -> Result<bool> { + let mut ready = true; + if self.index.is_none() { + ready = false; + if let Some(hash) = self.target.index { + if let Some(data) = dls.try_get(hash)? { + self.index = Some(Indecies::deserialize(data.as_slice())?) + } + } } - for (thash, tdata) in self.target.vertex.iter().zip(self.vertex.iter_mut()) { - if hash == *thash { - *tdata = Some(VertexAttributes::deserialize(data)?) + for (hash, slot) in self.target.vertex.iter().zip(self.vertex.iter_mut()) { + if slot.is_none() { + ready = false; + if let Some(data) = dls.try_get(*hash)? { + *slot = Some(VertexAttributes::deserialize(data.as_slice())?) + } } } - Ok(self.vertex.iter().all(|v| v.is_some()) && self.index.is_some()) + Ok(ready) } } @@ -45,11 +52,10 @@ impl RenderPart { pub fn new(device: Device, data: PartData, format: TextureFormat) -> Self { let mut vertex = Vec::new(); let mut index = Vec::new(); - let attrs = data.vertex.unwrap(); for i in 0..data.vertex[0].as_ref().unwrap().0.len() { - vertex.extend(attrs[0].0[i].to_le_bytes()); - vertex.extend(attrs[1].0[i].to_le_bytes()); - vertex.extend(attrs[2].0[i].to_le_bytes()); + vertex.extend(data.vertex[0].as_ref().unwrap().0[i].to_le_bytes()); + vertex.extend(data.vertex[1].as_ref().unwrap().0[i].to_le_bytes()); + vertex.extend(data.vertex[2].as_ref().unwrap().0[i].to_le_bytes()); } let mut n_vertex = 0; for ind in data.index.unwrap().0 { |