1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-05-07 19:17:45 +00:00
physis/src/havok/skeleton.rs
2024-04-20 13:18:03 -04:00

48 lines
1.3 KiB
Rust

// 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<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,
}
}
}