diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-07 16:50:44 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-07 16:50:44 +0100 |
commit | 0a0abfe7b093d91447fb7070820a0e6d56d6c22d (patch) | |
tree | 17cdfd63bce8d717cd35d4d88646b837fbffc594 /shared | |
parent | d0d8c07e1915b47610bf91176d908c9b46a5ab54 (diff) | |
download | weareserver-0a0abfe7b093d91447fb7070820a0e6d56d6c22d.tar weareserver-0a0abfe7b093d91447fb7070820a0e6d56d6c22d.tar.bz2 weareserver-0a0abfe7b093d91447fb7070820a0e6d56d6c22d.tar.zst |
normal texture
Diffstat (limited to 'shared')
-rw-r--r-- | shared/src/resources.rs | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/shared/src/resources.rs b/shared/src/resources.rs index 512e161..c312531 100644 --- a/shared/src/resources.rs +++ b/shared/src/resources.rs @@ -2,13 +2,14 @@ use crate::packets::{ReadWrite, Resource}; use anyhow::Result; use glam::{Affine3A, Vec3A}; use log::warn; -use std::io::{Read, Write}; +use std::{ + collections::HashMap, + io::{Read, Write}, +}; #[derive(Debug, Default, Clone)] pub struct Prefab(pub Vec<(Affine3A, Resource)>); -/// Combinations of va_* and tex_* are multiplied except normal which is added. -/// Defaults should be the identity for that operation, so default is 1 (or white) except normals are Vec3::ZERO. #[derive(Debug, Default, Clone)] pub struct Part { pub index: Option<Resource>, @@ -30,11 +31,33 @@ pub struct Part { pub tex_transmission: Option<Resource>, } +pub struct PrefabIndex(pub HashMap<String, Resource>); + #[derive(Debug, Default, Clone)] pub struct AttributeArray(pub Vec<f32>); #[derive(Debug, Default, Clone)] pub struct IndexArray(pub Vec<[u16; 3]>); +impl ReadWrite for PrefabIndex { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for (k, v) in &self.0 { + write_kv(w, k.as_bytes(), &v.0)?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut s = Self(HashMap::new()); + let mut g = Vec::new(); + r.read_to_end(&mut g)?; + let mut g = g.as_slice(); + while !g.is_empty() { + let (k, v) = read_kv(&mut g)?; + s.0.insert(String::from_utf8(k)?, Resource::read(&mut v.as_slice())?); + } + Ok(s) + } +} + impl ReadWrite for Prefab { fn write(&self, w: &mut dyn Write) -> Result<()> { for (aff, res) in self.0.clone() { @@ -107,7 +130,6 @@ impl ReadWrite for Part { write_kv_opt(w, b"tex_metallic", &self.tex_metallic)?; write_kv_opt(w, b"tex_albedo", &self.tex_albedo)?; write_kv_opt(w, b"tex_transmission", &self.tex_transmission)?; - Ok(()) } fn read(r: &mut dyn Read) -> Result<Self> { @@ -130,16 +152,12 @@ impl ReadWrite for Part { b"va_roughness" => s.va_roughness = Some(<_ as ReadWrite>::read(&mut v)?), b"va_metallic" => s.va_metallic = Some(<_ as ReadWrite>::read(&mut v)?), b"va_albedo" => s.va_albedo = Some(<_ as ReadWrite>::read(&mut v)?), - b"va_transmission" => { - s.va_transmission = Some(<_ as ReadWrite>::read(&mut v)?) - } + b"va_transmission" => s.va_transmission = Some(<_ as ReadWrite>::read(&mut v)?), b"tex_normal" => s.tex_normal = Some(<_ as ReadWrite>::read(&mut v)?), b"tex_roughness" => s.tex_roughness = Some(<_ as ReadWrite>::read(&mut v)?), b"tex_metallic" => s.tex_metallic = Some(<_ as ReadWrite>::read(&mut v)?), b"tex_albedo" => s.tex_albedo = Some(<_ as ReadWrite>::read(&mut v)?), - b"tex_transmission" => { - s.tex_transmission = Some(<_ as ReadWrite>::read(&mut v)?) - } + b"tex_transmission" => s.tex_transmission = Some(<_ as ReadWrite>::read(&mut v)?), x => warn!("unknown part key: {:?}", String::from_utf8_lossy(x)), } } |