diff --git a/unity-parser/src/types/mod.rs b/unity-parser/src/types/mod.rs index a8f5239..e9ccdbc 100644 --- a/unity-parser/src/types/mod.rs +++ b/unity-parser/src/types/mod.rs @@ -23,7 +23,7 @@ pub use reference::UnityReference; pub use type_filter::TypeFilter; pub use type_registry::{get_class_name, get_type_id}; pub use unity_types::{ - BoxCollider, GameObject, MeshFilter, PrefabInstance, PrefabInstanceComponent, + BoxCollider, GameObject, MeshFilter, MeshRenderer, PrefabInstance, PrefabInstanceComponent, PrefabModification, PrefabResolver, RectTransform, Renderer, Transform, }; pub use values::{Color, ExternalRef, FileRef, Quaternion, Vector2, Vector3}; diff --git a/unity-parser/src/types/unity_types/mesh_renderer.rs b/unity-parser/src/types/unity_types/mesh_renderer.rs new file mode 100644 index 0000000..47318cc --- /dev/null +++ b/unity-parser/src/types/unity_types/mesh_renderer.rs @@ -0,0 +1,43 @@ +//! MeshRenderer component wrapper + +use crate::types::{ComponentContext, Renderer, UnityComponent}; +use sparsey::Entity; + +/// A MeshRenderer component +/// +/// MeshRenderer renders a mesh with materials. It extends the base Renderer +/// with mesh-specific rendering functionality. +#[derive(Debug, Clone)] +pub struct MeshRenderer { + renderer: Renderer, +} + +impl MeshRenderer { + /// Get the base Renderer + pub fn renderer(&self) -> &Renderer { + &self.renderer + } + + /// Get mutable access to the base Renderer + pub fn renderer_mut(&mut self) -> &mut Renderer { + &mut self.renderer + } +} + +impl UnityComponent for MeshRenderer { + /// Parse a MeshRenderer from YAML + /// + /// Note: Caller is responsible for ensuring this is called on the correct document type. + fn parse(yaml: &serde_yaml::Mapping, ctx: &ComponentContext) -> Option { + // Parse the base Renderer data + let renderer = Renderer::parse(yaml, ctx)?; + + Some(Self { renderer }) + } +} + +impl crate::types::EcsInsertable for MeshRenderer { + fn insert_into_world(self, world: &mut sparsey::World, entity: Entity) { + world.insert(entity, (self,)); + } +} diff --git a/unity-parser/src/types/unity_types/mod.rs b/unity-parser/src/types/unity_types/mod.rs index 7622376..cd9e8d4 100644 --- a/unity-parser/src/types/unity_types/mod.rs +++ b/unity-parser/src/types/unity_types/mod.rs @@ -3,6 +3,7 @@ pub mod box_collider; pub mod game_object; pub mod mesh_filter; +pub mod mesh_renderer; pub mod prefab_instance; pub mod renderer; pub mod transform; @@ -10,6 +11,7 @@ pub mod transform; pub use box_collider::BoxCollider; pub use game_object::GameObject; pub use mesh_filter::MeshFilter; +pub use mesh_renderer::MeshRenderer; pub use prefab_instance::{ PrefabInstance, PrefabInstanceComponent, PrefabModification, PrefabResolver, };