From 79e341769d04a6daa5c1edae87d6ff8a9adba9c6 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 11 Mar 2025 21:57:44 +0100 Subject: fromvalue trait --- src/classes/transform.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src/classes/transform.rs') diff --git a/src/classes/transform.rs b/src/classes/transform.rs index 518e248..b05985f 100644 --- a/src/classes/transform.rs +++ b/src/classes/transform.rs @@ -1,26 +1,44 @@ -use super::pptr::PPtr; +use super::{FromValue, gameobject::GameObject, pptr::PPtr}; use crate::object::Value; use anyhow::Result; +use glam::{Quat, Vec3}; use serde::Serialize; #[derive(Debug, Serialize)] pub struct Transform { pub father: PPtr, pub children: Vec>, + pub gameobject: PPtr, + pub local_position: Vec3, + pub local_rotation: Quat, + pub local_scale: Vec3, } -impl Transform { - pub fn from_value(v: Value) -> Result { +impl FromValue for Transform { + fn from_value(v: Value) -> Result { let mut fields = v.as_class("Transform").unwrap(); Ok(Self { children: fields .remove("m_Children") .unwrap() + .as_class("vector") + .unwrap() + .remove("Array") + .unwrap() .as_array() .unwrap() .into_iter() .map(|e| PPtr::from_value(e).unwrap().cast()) .collect(), - father: PPtr::from_value(fields.remove("m_Father").unwrap())?.cast(), + father: fields + .remove("m_Father") + .unwrap() + .parse::() + .unwrap() + .cast(), + gameobject: fields.remove("m_GameObject").unwrap().parse().unwrap(), + local_position: fields.remove("m_LocalPosition").unwrap().parse().unwrap(), + local_rotation: fields.remove("m_LocalRotation").unwrap().parse().unwrap(), + local_scale: fields.remove("m_LocalScale").unwrap().parse().unwrap(), }) } } -- cgit v1.2.3-70-g09d2