From 7ff78cff53eba1da60b8beb851732e2f8197c221 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 14 Mar 2025 14:58:38 +0100 Subject: move files around --- src/classes/mesh_renderer.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/classes/mesh_renderer.rs (limited to 'src/classes/mesh_renderer.rs') diff --git a/src/classes/mesh_renderer.rs b/src/classes/mesh_renderer.rs new file mode 100644 index 0000000..94d6fd7 --- /dev/null +++ b/src/classes/mesh_renderer.rs @@ -0,0 +1,62 @@ +use super::{gameobject::GameObject, mesh::Mesh, pptr::PPtr, transform::Transform}; +use crate::object::{ + Value, + parser::{Fields, FromValue}, +}; +use anyhow::Result; + +pub struct MeshRenderer { + pub enabled: bool, + pub mesh: PPtr, + pub cast_shadows: u8, + pub game_object: PPtr, + pub materials: Vec, +} + +pub struct SkinnedMeshRenderer { + pub mesh_renderer: MeshRenderer, + pub bones: Vec>, + pub root_bone: PPtr, +} + +impl FromValue for MeshRenderer { + fn from_value(v: Value) -> Result { + Self::from_fields(v.as_class("MeshRenderer")?) + } +} +impl MeshRenderer { + pub fn from_fields(mut fields: Fields) -> Result { + Ok(Self { + enabled: fields.field("m_Enabled")?, + mesh: fields.field("m_Mesh")?, + cast_shadows: fields.field("m_CastShadows")?, + game_object: fields.field("m_GameObject")?, + materials: fields + .remove("m_Materials") + .unwrap() + .as_vector() + .unwrap() + .into_iter() + .map(|e| e.parse().unwrap()) + .collect(), + }) + } +} + +impl FromValue for SkinnedMeshRenderer { + fn from_value(v: Value) -> Result { + let mut fields = v.as_class("SkinnedMeshRenderer")?; + Ok(Self { + root_bone: fields.field("m_RootBone")?, + bones: fields + .remove("m_Bones") + .unwrap() + .as_vector() + .unwrap() + .into_iter() + .map(|e| e.parse().unwrap()) + .collect(), + mesh_renderer: MeshRenderer::from_fields(fields)?, + }) + } +} -- cgit v1.2.3-70-g09d2