summaryrefslogtreecommitdiff
path: root/shared/src/resources.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-27 14:38:31 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-27 14:38:31 +0100
commit9f16507564354422b64e437e547d8403b22b70c7 (patch)
treea2d3fee9be8c626b1832df1fa4d8aa8b6c253b3d /shared/src/resources.rs
parentd48ff95ec3739b8179b0e0f5b07d5c89f8f5b33f (diff)
downloadweareserver-9f16507564354422b64e437e547d8403b22b70c7.tar
weareserver-9f16507564354422b64e437e547d8403b22b70c7.tar.bz2
weareserver-9f16507564354422b64e437e547d8403b22b70c7.tar.zst
lay a foundation for subresource listings
Diffstat (limited to 'shared/src/resources.rs')
-rw-r--r--shared/src/resources.rs44
1 files changed, 43 insertions, 1 deletions
diff --git a/shared/src/resources.rs b/shared/src/resources.rs
index 5fa810d..4d14633 100644
--- a/shared/src/resources.rs
+++ b/shared/src/resources.rs
@@ -14,7 +14,7 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-use crate::{helper::ReadWrite, packets::Resource};
+use crate::{helper::ReadWrite, loader::ResLoader, packets::Resource};
use anyhow::Result;
use glam::{Affine3A, Vec2, Vec3A, Vec4};
use log::warn;
@@ -280,3 +280,45 @@ impl ReadWrite for Image<'_> {
self.0.write_alloc()
}
}
+
+pub trait Subresources {
+ fn subresources(&self, l: &impl ResLoader) -> impl Future<Output = Result<Vec<Resource>>>;
+}
+impl Subresources for Prefab {
+ async fn subresources(&self, l: &impl ResLoader) -> Result<Vec<Resource>> {
+ let mut o = Vec::new();
+ for (_, mesh) in &self.mesh {
+ o.extend(l.get(mesh).await?.subresources(l).await?);
+ }
+ Ok(o)
+ }
+}
+impl Subresources for MeshPart {
+ async fn subresources(&self, _l: &impl ResLoader) -> Result<Vec<Resource>> {
+ Ok(None
+ .into_iter()
+ .chain(self.index.iter().map(Resource::to_generic))
+ .chain(self.va_position.iter().map(Resource::to_generic))
+ .chain(self.va_normal.iter().map(Resource::to_generic))
+ .chain(self.va_tangent.iter().map(Resource::to_generic))
+ .chain(self.va_texcoord.iter().map(Resource::to_generic))
+ .chain(self.va_roughness.iter().map(Resource::to_generic))
+ .chain(self.va_metallic.iter().map(Resource::to_generic))
+ .chain(self.va_albedo.iter().map(Resource::to_generic))
+ .chain(self.va_transmission.iter().map(Resource::to_generic))
+ .chain(self.va_alpha.iter().map(Resource::to_generic))
+ .chain(self.va_emission.iter().map(Resource::to_generic))
+ .chain(self.va_joint_index.iter().map(Resource::to_generic))
+ .chain(self.va_joint_weight.iter().map(Resource::to_generic))
+ .chain(self.tex_normal.iter().map(Resource::to_generic))
+ .chain(self.tex_roughness.iter().map(Resource::to_generic))
+ .chain(self.tex_metallic.iter().map(Resource::to_generic))
+ .chain(self.tex_albedo.iter().map(Resource::to_generic))
+ .chain(self.tex_transmission.iter().map(Resource::to_generic))
+ .chain(self.tex_alpha.iter().map(Resource::to_generic))
+ .chain(self.tex_emission.iter().map(Resource::to_generic))
+ .chain(self.tex_thickness.iter().map(Resource::to_generic))
+ .chain(self.tex_occlusion.iter().map(Resource::to_generic))
+ .collect())
+ }
+}