1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-05-04 09:47:46 +00:00
physis/src/havok/skeleton.rs

43 lines
1.3 KiB
Rust
Raw Normal View History

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