From 70d22e5162afa1b81f976acd1db534834010d3b8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 13 Mar 2025 17:59:49 +0100 Subject: material parser --- src/classes/vectors.rs | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) (limited to 'src/classes/vectors.rs') diff --git a/src/classes/vectors.rs b/src/classes/vectors.rs index 76760bc..14c5a59 100644 --- a/src/classes/vectors.rs +++ b/src/classes/vectors.rs @@ -1,14 +1,46 @@ use crate::object::{Value, parser::FromValue}; -use glam::{Mat4, Quat, Vec3}; +use glam::{Mat4, Quat, Vec2, Vec3, Vec4}; +use serde::Serialize; +impl FromValue for Vec2 { + fn from_value(v: Value) -> anyhow::Result { + let mut fields = v.as_class("Vector2f").unwrap(); + Ok(Self::new(fields.field("x")?, fields.field("y")?)) + } +} impl FromValue for Vec3 { fn from_value(v: Value) -> anyhow::Result { let mut fields = v.as_class("Vector3f").unwrap(); - Ok(Self { - x: fields.field("x")?, - y: fields.field("y")?, - z: fields.field("z")?, - }) + Ok(Self::new( + fields.field("x")?, + fields.field("y")?, + fields.field("z")?, + )) + } +} +impl FromValue for Vec4 { + fn from_value(v: Value) -> anyhow::Result { + let mut fields = v.as_class("Vector4f")?; + Ok(Self::new( + fields.field("x")?, + fields.field("y")?, + fields.field("z")?, + fields.field("w")?, + )) + } +} + +#[derive(Debug, Serialize)] +pub struct ColorRGBA(pub Vec4); +impl FromValue for ColorRGBA { + fn from_value(v: Value) -> anyhow::Result { + let mut fields = v.as_class("ColorRGBA")?; + Ok(ColorRGBA(Vec4::new( + fields.field("r")?, + fields.field("g")?, + fields.field("b")?, + fields.field("a")?, + ))) } } -- cgit v1.2.3-70-g09d2