// SPDX-FileCopyrightText: 2020 Inseok Lee // SPDX-License-Identifier: MIT use crate::havok::object::HavokObject; use crate::havok::transform::HavokTransform; use core::cell::RefCell; use std::sync::Arc; #[derive(Debug)] pub struct HavokSkeleton { pub bone_names: Vec, pub parent_indices: Vec, pub reference_pose: Vec, } impl HavokSkeleton { pub fn new(object: Arc>) -> Self { let root = object.borrow(); let bones = root.get("bones").as_array(); let bone_names = bones .iter() .map(|x| { let bone = x.as_object(); let bone_obj = bone.borrow(); bone_obj.get("name").as_string().to_owned() }) .collect::>(); let raw_parent_indices = root.get("parentIndices").as_array(); let parent_indices = raw_parent_indices .iter() .map(|x| x.as_int() as usize) .collect::>(); let raw_reference_pose = root.get("referencePose").as_array(); let reference_pose = raw_reference_pose .iter() .map(|x| HavokTransform::new(x.as_vec())) .collect::>(); Self { bone_names, parent_indices, reference_pose, } } }