summaryrefslogtreecommitdiff
path: root/world/src/vrm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'world/src/vrm.rs')
-rw-r--r--world/src/vrm.rs29
1 files changed, 15 insertions, 14 deletions
diff --git a/world/src/vrm.rs b/world/src/vrm.rs
index a97323f..80865cb 100644
--- a/world/src/vrm.rs
+++ b/world/src/vrm.rs
@@ -20,7 +20,7 @@ use serde::Deserialize;
use std::collections::{BTreeMap, BTreeSet};
use weareshared::Vec3A;
-#[derive(Default)]
+#[derive(Debug, Default)]
pub struct VrmInfo {
pub bone_node_names: Vec<(usize, String)>,
pub hide_first_person: BTreeSet<usize>,
@@ -30,16 +30,14 @@ pub struct VrmInfo {
pub fn extract_vrm_data(gltf: &Gltf) -> Result<VrmInfo> {
let mut o = VrmInfo::default();
+ let mut fp = None;
if let Some(vrm) = gltf.extension_value("VRM") {
// serde_json::to_writer(std::fs::File::create("/tmp/vrm").unwrap(), vrm).unwrap();
let vrm: Vrm = serde_json::from_value(vrm.clone())?;
for bone in vrm.humanoid.human_bones {
o.bone_node_names.push((bone.node, bone.bone))
}
- if let Some(fp) = vrm.first_person {
- o.camera_mount = fp.first_person_bone;
- o.camera_mount_offset = fp.first_person_bone_offset.map(convert_vrm_vec);
- }
+ fp = vrm.first_person;
}
if let Some(vrm) = gltf.extension_value("VRMC_vrm") {
// serde_json::to_writer(std::fs::File::create("/tmp/vrmc").unwrap(), vrm).unwrap();
@@ -47,23 +45,26 @@ pub fn extract_vrm_data(gltf: &Gltf) -> Result<VrmInfo> {
for (name, bone) in vrm.humanoid.human_bones {
o.bone_node_names.push((bone.node, name))
}
- if let Some(fp) = vrm.first_person {
- o.camera_mount = fp.first_person_bone;
- o.camera_mount_offset = fp.first_person_bone_offset.map(convert_vrm_vec);
- for ann in fp.mesh_annotations {
- match ann.first_person_flag {
- FirstPersonFlag::ThirdPersonOnly => {
- o.hide_first_person.insert(ann.node);
- }
- _ => (),
+ fp = vrm.first_person;
+ }
+ if let Some(fp) = fp {
+ o.camera_mount = fp.first_person_bone;
+ o.camera_mount_offset = fp.first_person_bone_offset.map(convert_vrm_vec);
+ for ann in fp.mesh_annotations {
+ match ann.first_person_flag {
+ FirstPersonFlag::ThirdPersonOnly => {
+ o.hide_first_person.insert(ann.node);
}
+ _ => (),
}
}
}
+ eprintln!("{o:#?}");
Ok(o)
}
#[derive(Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
struct Vrm {
humanoid: VrmHumanoid,
first_person: Option<VrmcFirstPerson>,