From d836e24357b81496c61f3cc9195ba36758523578 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 15 Mar 2025 15:18:40 +0100 Subject: more abstraction around unityfs to read multiple files from a single reader --- src/classes/shader.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/classes/shader.rs (limited to 'src/classes/shader.rs') diff --git a/src/classes/shader.rs b/src/classes/shader.rs new file mode 100644 index 0000000..86f32b8 --- /dev/null +++ b/src/classes/shader.rs @@ -0,0 +1,42 @@ +use super::pptr::PPtr; +use crate::object::{Value, parser::FromValue}; +use anyhow::Result; +use serde::Serialize; + +#[derive(Debug, Serialize)] +pub struct Shader { + pub dependencies: Vec>, + pub name: String, + pub parsed: SerializedShader, +} + +#[derive(Debug, Serialize)] +pub struct SerializedShader { + pub name: String, +} + +impl FromValue for Shader { + fn from_value(v: Value) -> Result { + let mut fields = v.as_class("Shader")?; + Ok(Self { + name: fields.field("m_Name")?, + parsed: fields.field("m_ParsedForm")?, + dependencies: fields + .remove("m_Dependencies") + .unwrap() + .as_vector() + .unwrap() + .into_iter() + .map(|e| e.parse().unwrap()) + .collect(), + }) + } +} +impl FromValue for SerializedShader { + fn from_value(v: Value) -> Result { + let mut fields = v.as_class("SerializedShader")?; + Ok(Self { + name: fields.field("m_Name")?, + }) + } +} -- cgit v1.2.3-70-g09d2