From d780d420a69fe239bdb93ce7d1899e380a682062 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 22 Mar 2025 16:41:27 +0100 Subject: wrong inheritance of meshrenderer --- src/classes/mesh.rs | 6 +++--- src/classes/mesh_renderer.rs | 29 +++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) (limited to 'src/classes') diff --git a/src/classes/mesh.rs b/src/classes/mesh.rs index 6d21ff5..5a9c229 100644 --- a/src/classes/mesh.rs +++ b/src/classes/mesh.rs @@ -147,15 +147,15 @@ impl VertexData { streams } /// Reads a vertex channel and returns dimension count and data converted to floats - pub fn read_channel(&self, channel: VertexDataChannel) -> Option<(usize, Vec)> { - let channel = &self.channels[channel as u8 as usize]; + pub fn read_channel(&self, ch: VertexDataChannel) -> Option<(usize, Vec)> { + let channel = &self.channels[ch as u8 as usize]; if channel.dimension == 0 { return None; } let component_offset = channel.offset as usize; let component_size = channel.format.component_size(); let (offset, stride) = self.stream_layout()[channel.stream as usize]; - debug!("reading {channel:?} vertex channel (stride={stride}, offset={offset})"); + debug!("reading {ch:?} vertex channel (stride={stride}, offset={offset})"); let mut out = Vec::new(); for vi in 0..self.vertex_count as usize { for di in 0..channel.dimension as usize { diff --git a/src/classes/mesh_renderer.rs b/src/classes/mesh_renderer.rs index c169450..261ecd8 100644 --- a/src/classes/mesh_renderer.rs +++ b/src/classes/mesh_renderer.rs @@ -7,30 +7,33 @@ use crate::object::{ }; use anyhow::{Context, Result}; -pub struct MeshRenderer { +pub struct Renderer { pub enabled: bool, - pub mesh: PPtr, pub cast_shadows: u8, pub game_object: PPtr, pub materials: Vec>, } +pub struct MeshRenderer { + pub renderer: Renderer, + pub additional_vertex_streams: PPtr, +} pub struct SkinnedMeshRenderer { - pub mesh_renderer: MeshRenderer, + pub renderer: Renderer, pub bones: Vec>, + pub mesh: PPtr, pub root_bone: PPtr, } -impl FromValue for MeshRenderer { +impl FromValue for Renderer { fn from_value(v: Value) -> Result { - Self::from_fields(v.as_class("MeshRenderer")?) + Self::from_fields(v.as_class("Renderer")?) } } -impl MeshRenderer { +impl Renderer { 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") @@ -47,11 +50,21 @@ impl MeshRenderer { } } +impl FromValue for MeshRenderer { + fn from_value(v: Value) -> Result { + let mut fields = v.as_class("MeshRenderer")?; + Ok(Self { + additional_vertex_streams: fields.field("m_AdditionalVertexStreams")?, + renderer: Renderer::from_fields(fields)?, + }) + } +} 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")?, + mesh: fields.field("m_Mesh")?, bones: fields .remove("m_Bones") .unwrap() @@ -60,7 +73,7 @@ impl FromValue for SkinnedMeshRenderer { .into_iter() .map(|e| e.parse().unwrap()) .collect(), - mesh_renderer: MeshRenderer::from_fields(fields)?, + renderer: Renderer::from_fields(fields)?, }) } } -- cgit v1.2.3-70-g09d2