aboutsummaryrefslogtreecommitdiff
path: root/src/classes/gameobject.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/classes/gameobject.rs')
-rw-r--r--src/classes/gameobject.rs25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/classes/gameobject.rs b/src/classes/gameobject.rs
index fde042d..94436fa 100644
--- a/src/classes/gameobject.rs
+++ b/src/classes/gameobject.rs
@@ -1,7 +1,7 @@
+use super::{FromValue, pptr::PPtr};
+use crate::object::Value;
use anyhow::Result;
use serde::Serialize;
-use crate::object::Value;
-use super::pptr::PPtr;
#[derive(Debug, Serialize)]
pub struct GameObject {
@@ -11,24 +11,27 @@ pub struct GameObject {
pub name: String,
pub is_active: bool,
}
-impl GameObject {
- pub fn from_value(v: Value) -> Result<Self> {
+impl FromValue for GameObject {
+ fn from_value(v: Value) -> Result<Self> {
let mut fields = v.as_class("GameObject").unwrap();
Ok(GameObject {
components: fields
.remove("m_Component")
.unwrap()
+ .as_class("vector")
+ .unwrap()
+ .remove("Array")
+ .unwrap()
.as_array()
.unwrap()
.into_iter()
.map(|e| {
- PPtr::from_value(
- e.as_class("ComponentPair")
- .unwrap()
- .remove("component")
- .unwrap(),
- )
- .unwrap()
+ e.as_class("ComponentPair")
+ .unwrap()
+ .remove("component")
+ .unwrap()
+ .parse::<PPtr>()
+ .unwrap()
})
.collect(),
layer: fields["m_Layer"].as_u32().unwrap(),