aboutsummaryrefslogtreecommitdiff
path: root/src/classes/mesh_renderer.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-14 14:58:38 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-14 14:58:38 +0100
commit7ff78cff53eba1da60b8beb851732e2f8197c221 (patch)
treefa6d914270ba1acdeddbc3aa1ce1cf7cf0824a7b /src/classes/mesh_renderer.rs
parent6debd2c0a230d623c06869ca4c4f13519f53eb5d (diff)
downloadunity-tools-7ff78cff53eba1da60b8beb851732e2f8197c221.tar
unity-tools-7ff78cff53eba1da60b8beb851732e2f8197c221.tar.bz2
unity-tools-7ff78cff53eba1da60b8beb851732e2f8197c221.tar.zst
move files around
Diffstat (limited to 'src/classes/mesh_renderer.rs')
-rw-r--r--src/classes/mesh_renderer.rs62
1 files changed, 62 insertions, 0 deletions
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<Mesh>,
+ pub cast_shadows: u8,
+ pub game_object: PPtr<GameObject>,
+ pub materials: Vec<PPtr>,
+}
+
+pub struct SkinnedMeshRenderer {
+ pub mesh_renderer: MeshRenderer,
+ pub bones: Vec<PPtr<Transform>>,
+ pub root_bone: PPtr<Transform>,
+}
+
+impl FromValue for MeshRenderer {
+ fn from_value(v: Value) -> Result<Self> {
+ Self::from_fields(v.as_class("MeshRenderer")?)
+ }
+}
+impl MeshRenderer {
+ pub fn from_fields(mut fields: Fields) -> Result<Self> {
+ 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<Self> {
+ 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)?,
+ })
+ }
+}