summaryrefslogtreecommitdiff
path: root/shared/src/resources.rs
diff options
context:
space:
mode:
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())
+ }
+}