Generate skeleton attention and genepool catalogs (#49)
This commit is contained in:
147
crates/libremetaverse/src/attention_catalog.rs
Normal file
147
crates/libremetaverse/src/attention_catalog.rs
Normal file
@@ -0,0 +1,147 @@
|
||||
// @generated by libremetaverse-codegen; DO NOT EDIT.
|
||||
// Regenerate: cargo run -p libremetaverse-codegen -- generate
|
||||
// Generator: attentions
|
||||
// Source: codegen/inputs/attentions.xml sha256=bdbc4ca02dd3bde78b86e796f7eb4ada0000e47be9a127e35d2b77f3010a20af license=BSD-3-Clause
|
||||
// Source: codegen/inputs/attentionsN.xml sha256=80055e12a04d05ef5bb16e8c542cd6c218735f8c72f7e48317b8a34282d1ac5b license=BSD-3-Clause
|
||||
|
||||
#![allow(
|
||||
clippy::missing_errors_doc,
|
||||
clippy::must_use_candidate,
|
||||
clippy::should_implement_trait
|
||||
)]
|
||||
use std::sync::OnceLock;
|
||||
#[derive(Clone, Debug, Default, PartialEq)]
|
||||
pub struct AttentionData {
|
||||
priority: f32,
|
||||
timeout: f32,
|
||||
}
|
||||
impl AttentionData {
|
||||
pub fn priority(&self) -> f32 {
|
||||
self.priority
|
||||
}
|
||||
pub fn set_priority(&mut self, value: f32) {
|
||||
self.priority = value;
|
||||
}
|
||||
pub fn timeout(&self) -> f32 {
|
||||
self.timeout
|
||||
}
|
||||
pub fn set_timeout(&mut self, value: f32) {
|
||||
self.timeout = value;
|
||||
}
|
||||
}
|
||||
#[derive(Clone, Debug, Default, PartialEq)]
|
||||
pub struct AttentionSet {
|
||||
name: String,
|
||||
entries: Vec<AttentionData>,
|
||||
}
|
||||
impl AttentionSet {
|
||||
pub fn get(&self, type_: crate::LookAtType) -> Result<AttentionData, crate::Error> {
|
||||
self.entries.get(type_ as usize).cloned().ok_or(crate::Error::IndexOutOfRange)
|
||||
}
|
||||
pub fn entries(&self) -> Vec<AttentionData> {
|
||||
self.entries.clone()
|
||||
}
|
||||
pub fn set_entries(&mut self, value: Vec<AttentionData>) {
|
||||
self.entries = value;
|
||||
}
|
||||
pub fn name(&self) -> String {
|
||||
self.name.clone()
|
||||
}
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
self.name = value;
|
||||
}
|
||||
}
|
||||
fn default_sets() -> &'static [AttentionSet] {
|
||||
static SETS: OnceLock<Vec<AttentionSet>> = OnceLock::new();
|
||||
SETS.get_or_init(|| {
|
||||
vec![
|
||||
AttentionSet { name : "Masculine".to_owned(), entries :
|
||||
vec![AttentionData { priority : 0.0_f32, timeout : 0.0_f32 },
|
||||
AttentionData { priority : 1.0_f32, timeout : 3.0_f32 }, AttentionData {
|
||||
priority : 3.0_f32, timeout : 4.0_f32 }, AttentionData { priority :
|
||||
2.0_f32, timeout : 2.0_f32 }, AttentionData { priority : 3.0_f32, timeout
|
||||
: 4.0_f32 }, AttentionData { priority : 4.0_f32, timeout : 1.0_f32 },
|
||||
AttentionData { priority : 0.0_f32, timeout : - 1.0_f32 }, AttentionData
|
||||
{ priority : 6.0_f32, timeout : - 1.0_f32 }, AttentionData { priority :
|
||||
6.0_f32, timeout : - 1.0_f32 }, AttentionData { priority : 7.0_f32,
|
||||
timeout : - 1.0_f32 }, AttentionData { priority : 0.0_f32, timeout :
|
||||
0.0_f32 }] }, AttentionSet { name : "Feminine".to_owned(), entries :
|
||||
vec![AttentionData { priority : 0.0_f32, timeout : 0.0_f32 },
|
||||
AttentionData { priority : 1.0_f32, timeout : 3.0_f32 }, AttentionData {
|
||||
priority : 3.0_f32, timeout : 4.0_f32 }, AttentionData { priority :
|
||||
2.0_f32, timeout : 2.0_f32 }, AttentionData { priority : 3.0_f32, timeout
|
||||
: 4.0_f32 }, AttentionData { priority : 4.0_f32, timeout : 1.0_f32 },
|
||||
AttentionData { priority : 0.0_f32, timeout : - 1.0_f32 }, AttentionData
|
||||
{ priority : 6.0_f32, timeout : - 1.0_f32 }, AttentionData { priority :
|
||||
6.0_f32, timeout : - 1.0_f32 }, AttentionData { priority : 7.0_f32,
|
||||
timeout : - 1.0_f32 }, AttentionData { priority : 0.0_f32, timeout :
|
||||
0.0_f32 }] }
|
||||
]
|
||||
})
|
||||
.as_slice()
|
||||
}
|
||||
fn updated_sets() -> &'static [AttentionSet] {
|
||||
static SETS: OnceLock<Vec<AttentionSet>> = OnceLock::new();
|
||||
SETS.get_or_init(|| {
|
||||
vec![
|
||||
AttentionSet { name : "Masculine".to_owned(), entries :
|
||||
vec![AttentionData { priority : 0.0_f32, timeout : 0.0_f32 },
|
||||
AttentionData { priority : 1.0_f32, timeout : 3.0_f32 }, AttentionData {
|
||||
priority : 3.0_f32, timeout : 4.0_f32 }, AttentionData { priority :
|
||||
2.0_f32, timeout : 2.0_f32 }, AttentionData { priority : 3.0_f32, timeout
|
||||
: 3.0_f32 }, AttentionData { priority : 4.0_f32, timeout : 1.0_f32 },
|
||||
AttentionData { priority : 5.0_f32, timeout : 3.0_f32 }, AttentionData {
|
||||
priority : 3.5_f32, timeout : - 1.0_f32 }, AttentionData { priority :
|
||||
3.5_f32, timeout : 20.0_f32 }, AttentionData { priority : 7.0_f32,
|
||||
timeout : - 1.0_f32 }, AttentionData { priority : 0.0_f32, timeout :
|
||||
0.0_f32 }] }, AttentionSet { name : "Feminine".to_owned(), entries :
|
||||
vec![AttentionData { priority : 0.0_f32, timeout : 0.0_f32 },
|
||||
AttentionData { priority : 1.0_f32, timeout : 3.0_f32 }, AttentionData {
|
||||
priority : 3.0_f32, timeout : 4.0_f32 }, AttentionData { priority :
|
||||
2.0_f32, timeout : 2.0_f32 }, AttentionData { priority : 3.0_f32, timeout
|
||||
: 6.0_f32 }, AttentionData { priority : 4.0_f32, timeout : 1.0_f32 },
|
||||
AttentionData { priority : 5.0_f32, timeout : 6.0_f32 }, AttentionData {
|
||||
priority : 2.5_f32, timeout : - 1.0_f32 }, AttentionData { priority :
|
||||
2.5_f32, timeout : 10.0_f32 }, AttentionData { priority : 7.0_f32,
|
||||
timeout : - 1.0_f32 }, AttentionData { priority : 0.0_f32, timeout :
|
||||
0.0_f32 }] }
|
||||
]
|
||||
})
|
||||
.as_slice()
|
||||
}
|
||||
pub struct LindenAttentions;
|
||||
impl LindenAttentions {
|
||||
pub fn default() -> Vec<AttentionSet> {
|
||||
default_sets().to_vec()
|
||||
}
|
||||
pub fn updated() -> Vec<AttentionSet> {
|
||||
updated_sets().to_vec()
|
||||
}
|
||||
pub fn default_masculine() -> AttentionSet {
|
||||
default_sets()[0].clone()
|
||||
}
|
||||
pub fn default_feminine() -> AttentionSet {
|
||||
default_sets()[1].clone()
|
||||
}
|
||||
pub fn updated_masculine() -> AttentionSet {
|
||||
updated_sets()[0].clone()
|
||||
}
|
||||
pub fn updated_feminine() -> AttentionSet {
|
||||
updated_sets()[1].clone()
|
||||
}
|
||||
}
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[test]
|
||||
fn generated_attention_shape() {
|
||||
assert_eq!(default_sets().len(), 2);
|
||||
assert_eq!(updated_sets().len(), 2);
|
||||
assert!(
|
||||
default_sets().iter().chain(updated_sets()).all(| set | set.entries.len() ==
|
||||
11)
|
||||
);
|
||||
assert_eq!(default_sets() [0].name, "Masculine");
|
||||
assert_eq!(default_sets() [1].name, "Feminine");
|
||||
}
|
||||
}
|
||||
4042
crates/libremetaverse/src/genepool_catalog.rs
Normal file
4042
crates/libremetaverse/src/genepool_catalog.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -4789,33 +4789,10 @@ impl AppearanceSetEventArgs {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.ArchetypeParam`.
|
||||
pub struct ArchetypeParam;
|
||||
impl ArchetypeParam {
|
||||
/// C# member: `P:LibreMetaverse.ArchetypeParam.Id`.
|
||||
pub fn id(&self) -> i32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.ArchetypeParam.Id")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.ArchetypeParam.Id`.
|
||||
pub fn set_id(&mut self, value: i32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.ArchetypeParam.Id")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.ArchetypeParam.Name`.
|
||||
pub fn name(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.ArchetypeParam.Name")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.ArchetypeParam.Name`.
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.ArchetypeParam.Name")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.ArchetypeParam.Value`.
|
||||
pub fn value(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.ArchetypeParam.Value")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.ArchetypeParam.Value`.
|
||||
pub fn set_value(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.ArchetypeParam.Value")
|
||||
}
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.ArchetypeParam.Id`.
|
||||
/// C# member: `P:LibreMetaverse.ArchetypeParam.Name`.
|
||||
/// C# member: `P:LibreMetaverse.ArchetypeParam.Value`.
|
||||
pub use crate::genepool_catalog::ArchetypeParam;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.AssetCache`.
|
||||
pub struct AssetCache {
|
||||
@@ -5420,55 +5397,15 @@ impl AttachedSoundGainChangeEventArgs {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.AttentionData`.
|
||||
pub struct AttentionData;
|
||||
impl AttentionData {
|
||||
/// C# member: `P:LibreMetaverse.AttentionData.Priority`.
|
||||
pub fn priority(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionData.Priority")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.AttentionData.Priority`.
|
||||
pub fn set_priority(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionData.Priority")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.AttentionData.Timeout`.
|
||||
pub fn timeout(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionData.Timeout")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.AttentionData.Timeout`.
|
||||
pub fn set_timeout(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionData.Timeout")
|
||||
}
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.AttentionData.Priority`.
|
||||
/// C# member: `P:LibreMetaverse.AttentionData.Timeout`.
|
||||
pub use crate::attention_catalog::AttentionData;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.AttentionSet`.
|
||||
pub struct AttentionSet;
|
||||
impl AttentionSet {
|
||||
/// C# member: `M:LibreMetaverse.AttentionSet.Get(LibreMetaverse.LookAtType)`.
|
||||
pub fn get(
|
||||
&self,
|
||||
type_: libremetaverse::LookAtType,
|
||||
) -> Result<libremetaverse::AttentionData, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.AttentionSet.Get(LibreMetaverse.LookAtType)",
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.AttentionSet.Entries`.
|
||||
pub fn entries(&self) -> Vec<libremetaverse::AttentionData> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionSet.Entries")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.AttentionSet.Entries`.
|
||||
pub fn set_entries(&mut self, value: Vec<libremetaverse::AttentionData>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionSet.Entries")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.AttentionSet.Name`.
|
||||
pub fn name(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionSet.Name")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.AttentionSet.Name`.
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.AttentionSet.Name")
|
||||
}
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.AttentionSet.Get(LibreMetaverse.LookAtType)`.
|
||||
/// C# member: `P:LibreMetaverse.AttentionSet.Entries`.
|
||||
/// C# member: `P:LibreMetaverse.AttentionSet.Name`.
|
||||
pub use crate::attention_catalog::AttentionSet;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Avatar`.
|
||||
pub struct Avatar {
|
||||
@@ -10936,42 +10873,15 @@ impl GLTFMaterialUpdate {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Genepool`.
|
||||
pub struct Genepool;
|
||||
impl Genepool {
|
||||
/// C# member: `F:LibreMetaverse.Genepool.Archetypes`.
|
||||
pub fn archetypes() -> Vec<libremetaverse::GenepoolArchetype> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.Genepool.Archetypes")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Genepool.FindIndex(System.String)`.
|
||||
pub fn find_index(name: String) -> Result<i32, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Genepool.FindIndex(System.String)")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Genepool.Get(System.Int32)`.
|
||||
pub fn get(index: i32) -> Result<libremetaverse::GenepoolArchetype, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Genepool.Get(System.Int32)")
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.Genepool.Archetypes`.
|
||||
/// C# member: `M:LibreMetaverse.Genepool.FindIndex(System.String)`.
|
||||
/// C# member: `M:LibreMetaverse.Genepool.Get(System.Int32)`.
|
||||
pub use crate::genepool_catalog::Genepool;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.GenepoolArchetype`.
|
||||
pub struct GenepoolArchetype;
|
||||
impl GenepoolArchetype {
|
||||
/// C# member: `P:LibreMetaverse.GenepoolArchetype.Name`.
|
||||
pub fn name(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GenepoolArchetype.Name")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GenepoolArchetype.Name`.
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GenepoolArchetype.Name")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GenepoolArchetype.Params`.
|
||||
pub fn params(&self) -> Vec<libremetaverse::ArchetypeParam> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GenepoolArchetype.Params")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GenepoolArchetype.Params`.
|
||||
pub fn set_params(&mut self, value: Vec<libremetaverse::ArchetypeParam>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GenepoolArchetype.Params")
|
||||
}
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GenepoolArchetype.Name`.
|
||||
/// C# member: `P:LibreMetaverse.GenepoolArchetype.Params`.
|
||||
pub use crate::genepool_catalog::GenepoolArchetype;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.GenericStreamingMessageEventArgs`.
|
||||
pub struct GenericStreamingMessageEventArgs;
|
||||
@@ -17214,41 +17124,13 @@ impl LegacyEnvironmentEventArgs {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.LindenAttentions`.
|
||||
pub struct LindenAttentions;
|
||||
impl LindenAttentions {
|
||||
/// C# member: `F:LibreMetaverse.LindenAttentions.Default`.
|
||||
pub fn default() -> Vec<libremetaverse::AttentionSet> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.LindenAttentions.Default")
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.LindenAttentions.Updated`.
|
||||
pub fn updated() -> Vec<libremetaverse::AttentionSet> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.LindenAttentions.Updated")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.DefaultFeminine`.
|
||||
pub fn default_feminine() -> libremetaverse::AttentionSet {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.LindenAttentions.DefaultFeminine"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.DefaultMasculine`.
|
||||
pub fn default_masculine() -> libremetaverse::AttentionSet {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.LindenAttentions.DefaultMasculine"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.UpdatedFeminine`.
|
||||
pub fn updated_feminine() -> libremetaverse::AttentionSet {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.LindenAttentions.UpdatedFeminine"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.UpdatedMasculine`.
|
||||
pub fn updated_masculine() -> libremetaverse::AttentionSet {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.LindenAttentions.UpdatedMasculine"
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.LindenAttentions.Default`.
|
||||
/// C# member: `F:LibreMetaverse.LindenAttentions.Updated`.
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.DefaultFeminine`.
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.DefaultMasculine`.
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.UpdatedFeminine`.
|
||||
/// C# member: `P:LibreMetaverse.LindenAttentions.UpdatedMasculine`.
|
||||
pub use crate::attention_catalog::LindenAttentions;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.LiveParticle`.
|
||||
pub struct LiveParticle {
|
||||
@@ -170382,15 +170264,8 @@ pub mod rendering {
|
||||
impl BoneTransform {}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.CollisionVolume`.
|
||||
pub struct CollisionVolume;
|
||||
impl CollisionVolume {
|
||||
/// C# member: `M:LibreMetaverse.Rendering.CollisionVolume.#ctor`.
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.CollisionVolume.#ctor",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.CollisionVolume.#ctor`.
|
||||
pub use crate::skeleton::CollisionVolume;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.DetailLevel`.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
@@ -170667,150 +170542,27 @@ pub mod rendering {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.Joint`.
|
||||
pub struct Joint {
|
||||
/// Rust composition for C# base type `LibreMetaverse.Rendering.JointBase`.
|
||||
pub base: libremetaverse::rendering::JointBase,
|
||||
}
|
||||
impl Joint {
|
||||
/// C# member: `M:LibreMetaverse.Rendering.Joint.#ctor`.
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.Joint.#ctor")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.Joint.GetAliasesList`.
|
||||
pub fn get_aliases_list(&self) -> Result<Vec<String>, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.Joint.GetAliasesList")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.aliases`.
|
||||
pub fn aliases(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.aliases")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.Joint.aliases`.
|
||||
pub fn set_aliases(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.aliases")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.bone`.
|
||||
pub fn bone(&self) -> Option<Vec<libremetaverse::rendering::Joint>> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.bone")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.Joint.bone`.
|
||||
pub fn set_bone(&mut self, value: Option<Vec<libremetaverse::rendering::Joint>>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.bone")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.collision_volume`.
|
||||
pub fn collision_volume(&self) -> Vec<libremetaverse::rendering::CollisionVolume> {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.Joint.collision_volume"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.Joint.collision_volume`.
|
||||
pub fn set_collision_volume(
|
||||
&mut self,
|
||||
value: Vec<libremetaverse::rendering::CollisionVolume>,
|
||||
) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.Joint.collision_volume"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.connected`.
|
||||
pub fn connected(&self) -> bool {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.connected")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.Joint.connected`.
|
||||
pub fn set_connected(&mut self, value: bool) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.connected")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.pivot`.
|
||||
pub fn pivot(&self) -> Vec<f32> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.pivot")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.Joint.pivot`.
|
||||
pub fn set_pivot(&mut self, value: Vec<f32>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.Joint.pivot")
|
||||
}
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.Joint.#ctor`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.Joint.GetAliasesList`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.aliases`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.bone`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.collision_volume`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.connected`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.Joint.pivot`.
|
||||
pub use crate::skeleton::Joint;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.JointBase`.
|
||||
pub struct JointBase;
|
||||
impl JointBase {
|
||||
/// C# member: `M:LibreMetaverse.Rendering.JointBase.#ctor`.
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.JointBase.#ctor")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.SupportCategory`.
|
||||
pub fn support_category(&self) -> libremetaverse::rendering::JointSupportCategory {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.JointBase.SupportCategory"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.end`.
|
||||
pub fn end(&self) -> Vec<f32> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.end")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.end`.
|
||||
pub fn set_end(&mut self, value: Vec<f32>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.end")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.group`.
|
||||
pub fn group(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.group")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.group`.
|
||||
pub fn set_group(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.group")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.name`.
|
||||
pub fn name(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.name")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.name`.
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.name")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.pos`.
|
||||
pub fn pos(&self) -> Vec<f32> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.pos")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.pos`.
|
||||
pub fn set_pos(&mut self, value: Vec<f32>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.pos")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.reposition`.
|
||||
pub fn reposition(&self) -> bool {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.JointBase.reposition"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.reposition`.
|
||||
pub fn set_reposition(&mut self, value: bool) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.JointBase.reposition"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.rot`.
|
||||
pub fn rot(&self) -> Vec<f32> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.rot")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.rot`.
|
||||
pub fn set_rot(&mut self, value: Vec<f32>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.rot")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.scale`.
|
||||
pub fn scale(&self) -> Vec<f32> {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.scale")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.scale`.
|
||||
pub fn set_scale(&mut self, value: Vec<f32>) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.scale")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.support`.
|
||||
pub fn support(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.support")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.JointBase.support`.
|
||||
pub fn set_support(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Rendering.JointBase.support")
|
||||
}
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.JointBase.#ctor`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.SupportCategory`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.end`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.group`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.name`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.pos`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.reposition`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.rot`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.scale`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.JointBase.support`.
|
||||
pub use crate::skeleton::JointBase;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.JointSupportCategory`.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
@@ -171284,133 +171036,20 @@ pub mod rendering {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.LindenSkeleton`.
|
||||
pub struct LindenSkeleton;
|
||||
impl LindenSkeleton {
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.#ctor`.
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.LindenSkeleton.#ctor")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.BuildExpandedJointList(System.Collections.Generic.IEnumerable{System.String})`.
|
||||
pub fn build_expanded_joint_list(
|
||||
&self,
|
||||
joints_filter: Box<dyn Iterator<Item = String>>,
|
||||
) -> Result<Vec<String>, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.LindenSkeleton.BuildExpandedJointList(System.Collections.Generic.IEnumerable{System.String})",
|
||||
)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.BuildJointDictionary`.
|
||||
pub fn build_joint_dictionary(
|
||||
&self,
|
||||
) -> Result<
|
||||
std::collections::HashMap<String, std::sync::Arc<libremetaverse::rendering::Joint>>,
|
||||
crate::Error,
|
||||
> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.LindenSkeleton.BuildJointDictionary",
|
||||
)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.GetAllJoints`.
|
||||
pub fn get_all_joints(
|
||||
&self,
|
||||
) -> Result<
|
||||
Box<dyn Iterator<Item = std::sync::Arc<libremetaverse::rendering::Joint>>>,
|
||||
crate::Error,
|
||||
> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.LindenSkeleton.GetAllJoints",
|
||||
)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.GetBone(System.String)`.
|
||||
pub fn get_bone(
|
||||
&self,
|
||||
name_or_alias: String,
|
||||
) -> Result<Option<std::sync::Arc<libremetaverse::rendering::Joint>>, crate::Error>
|
||||
{
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.LindenSkeleton.GetBone(System.String)",
|
||||
)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.GetDefault`.
|
||||
pub fn get_default() -> Result<libremetaverse::rendering::LindenSkeleton, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.LindenSkeleton.GetDefault",
|
||||
)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.Load`.
|
||||
pub fn load_with_method() -> Result<libremetaverse::rendering::LindenSkeleton, crate::Error>
|
||||
{
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.LindenSkeleton.Load")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.Load(System.String)`.
|
||||
pub fn load_with_string(
|
||||
file_name: Option<String>,
|
||||
) -> Result<libremetaverse::rendering::LindenSkeleton, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Rendering.LindenSkeleton.Load(System.String)",
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.bone`.
|
||||
pub fn bone(&self) -> libremetaverse::rendering::Joint {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.bone"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.bone`.
|
||||
pub fn set_bone(&mut self, value: libremetaverse::rendering::Joint) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.bone"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.num_bones`.
|
||||
pub fn num_bones(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.num_bones"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.num_bones`.
|
||||
pub fn set_num_bones(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.num_bones"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.num_collision_volumes`.
|
||||
pub fn num_collision_volumes(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.num_collision_volumes"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.num_collision_volumes`.
|
||||
pub fn set_num_collision_volumes(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.num_collision_volumes"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.version`.
|
||||
pub fn version(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.version"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.version`.
|
||||
pub fn set_version(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.version"
|
||||
)
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.versionSpecified`.
|
||||
pub fn version_specified(&self) -> bool {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.versionSpecified"
|
||||
)
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.versionSpecified`.
|
||||
pub fn set_version_specified(&mut self, value: bool) {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.Rendering.LindenSkeleton.versionSpecified"
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.#ctor`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.BuildExpandedJointList(System.Collections.Generic.IEnumerable{System.String})`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.BuildJointDictionary`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.GetAllJoints`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.GetBone(System.String)`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.GetDefault`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.Load`.
|
||||
/// C# member: `M:LibreMetaverse.Rendering.LindenSkeleton.Load(System.String)`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.bone`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.num_bones`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.num_collision_volumes`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.version`.
|
||||
/// C# member: `P:LibreMetaverse.Rendering.LindenSkeleton.versionSpecified`.
|
||||
pub use crate::skeleton::LindenSkeleton;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Rendering.Mesh`.
|
||||
pub struct Mesh {
|
||||
|
||||
@@ -2,15 +2,22 @@
|
||||
|
||||
extern crate self as libremetaverse;
|
||||
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod attention_catalog;
|
||||
mod bit_pack;
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod foliage_catalog;
|
||||
mod generated;
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod genepool_catalog;
|
||||
mod j2k;
|
||||
mod message_codec;
|
||||
#[rustfmt::skip]
|
||||
pub mod packet_catalog;
|
||||
mod packet_wire;
|
||||
mod skeleton;
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod skeleton_catalog;
|
||||
mod targa;
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod visual_catalog;
|
||||
|
||||
580
crates/libremetaverse/src/skeleton.rs
Normal file
580
crates/libremetaverse/src/skeleton.rs
Normal file
@@ -0,0 +1,580 @@
|
||||
//! Native skeleton records, traversal helpers, and custom XML loading.
|
||||
|
||||
#![allow(clippy::missing_errors_doc)] // Public signatures are fixed by the compatibility catalog.
|
||||
#![allow(clippy::must_use_candidate)] // Getters mirror C# properties.
|
||||
#![allow(clippy::needless_pass_by_value)] // Owned strings are fixed by the compatibility API.
|
||||
#![allow(clippy::unnecessary_wraps)] // Constructors mirror fallible mapped signatures.
|
||||
|
||||
use roxmltree::{Document, Node};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq)]
|
||||
pub struct JointBase {
|
||||
name: String,
|
||||
pos: Vec<f32>,
|
||||
rot: Vec<f32>,
|
||||
scale: Vec<f32>,
|
||||
group: String,
|
||||
support: String,
|
||||
end: Vec<f32>,
|
||||
reposition: bool,
|
||||
}
|
||||
|
||||
impl JointBase {
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
Ok(Self::default())
|
||||
}
|
||||
|
||||
pub fn support_category(&self) -> crate::rendering::JointSupportCategory {
|
||||
if self.support.eq_ignore_ascii_case("extended") {
|
||||
crate::rendering::JointSupportCategory::Extended
|
||||
} else {
|
||||
crate::rendering::JointSupportCategory::Base
|
||||
}
|
||||
}
|
||||
|
||||
pub fn end(&self) -> Vec<f32> {
|
||||
self.end.clone()
|
||||
}
|
||||
|
||||
pub fn set_end(&mut self, value: Vec<f32>) {
|
||||
self.end = value;
|
||||
}
|
||||
|
||||
pub fn group(&self) -> String {
|
||||
self.group.clone()
|
||||
}
|
||||
|
||||
pub fn set_group(&mut self, value: String) {
|
||||
self.group = value;
|
||||
}
|
||||
|
||||
pub fn name(&self) -> String {
|
||||
self.name.clone()
|
||||
}
|
||||
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
self.name = value;
|
||||
}
|
||||
|
||||
pub fn pos(&self) -> Vec<f32> {
|
||||
self.pos.clone()
|
||||
}
|
||||
|
||||
pub fn set_pos(&mut self, value: Vec<f32>) {
|
||||
self.pos = value;
|
||||
}
|
||||
|
||||
pub fn reposition(&self) -> bool {
|
||||
self.reposition
|
||||
}
|
||||
|
||||
pub fn set_reposition(&mut self, value: bool) {
|
||||
self.reposition = value;
|
||||
}
|
||||
|
||||
pub fn rot(&self) -> Vec<f32> {
|
||||
self.rot.clone()
|
||||
}
|
||||
|
||||
pub fn set_rot(&mut self, value: Vec<f32>) {
|
||||
self.rot = value;
|
||||
}
|
||||
|
||||
pub fn scale(&self) -> Vec<f32> {
|
||||
self.scale.clone()
|
||||
}
|
||||
|
||||
pub fn set_scale(&mut self, value: Vec<f32>) {
|
||||
self.scale = value;
|
||||
}
|
||||
|
||||
pub fn support(&self) -> String {
|
||||
self.support.clone()
|
||||
}
|
||||
|
||||
pub fn set_support(&mut self, value: String) {
|
||||
self.support = value;
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub(crate) fn from_parts(
|
||||
name: String,
|
||||
pos: Vec<f32>,
|
||||
rot: Vec<f32>,
|
||||
scale: Vec<f32>,
|
||||
group: String,
|
||||
support: String,
|
||||
end: Vec<f32>,
|
||||
reposition: bool,
|
||||
) -> Self {
|
||||
Self {
|
||||
name,
|
||||
pos,
|
||||
rot,
|
||||
scale,
|
||||
group,
|
||||
support,
|
||||
end,
|
||||
reposition,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq)]
|
||||
pub struct CollisionVolume {
|
||||
pub base: JointBase,
|
||||
}
|
||||
|
||||
impl CollisionVolume {
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
Ok(Self::default())
|
||||
}
|
||||
|
||||
pub(crate) fn from_base(base: JointBase) -> Self {
|
||||
Self { base }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct Joint {
|
||||
pub base: JointBase,
|
||||
collision_volume: Vec<CollisionVolume>,
|
||||
bone: Option<Vec<Joint>>,
|
||||
pivot: Vec<f32>,
|
||||
aliases: String,
|
||||
connected: bool,
|
||||
}
|
||||
|
||||
impl Default for Joint {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
base: JointBase::default(),
|
||||
collision_volume: Vec::new(),
|
||||
bone: Some(Vec::new()),
|
||||
pivot: Vec::new(),
|
||||
aliases: String::new(),
|
||||
connected: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Joint {
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
Ok(Self::default())
|
||||
}
|
||||
|
||||
pub fn get_aliases_list(&self) -> Result<Vec<String>, crate::Error> {
|
||||
Ok(self
|
||||
.aliases
|
||||
.split_ascii_whitespace()
|
||||
.map(str::to_owned)
|
||||
.collect())
|
||||
}
|
||||
|
||||
pub fn aliases(&self) -> String {
|
||||
self.aliases.clone()
|
||||
}
|
||||
|
||||
pub fn set_aliases(&mut self, value: String) {
|
||||
self.aliases = value;
|
||||
}
|
||||
|
||||
pub fn bone(&self) -> Option<Vec<Self>> {
|
||||
self.bone.clone()
|
||||
}
|
||||
|
||||
pub fn set_bone(&mut self, value: Option<Vec<Self>>) {
|
||||
self.bone = value;
|
||||
}
|
||||
|
||||
pub fn collision_volume(&self) -> Vec<CollisionVolume> {
|
||||
self.collision_volume.clone()
|
||||
}
|
||||
|
||||
pub fn set_collision_volume(&mut self, value: Vec<CollisionVolume>) {
|
||||
self.collision_volume = value;
|
||||
}
|
||||
|
||||
pub fn connected(&self) -> bool {
|
||||
self.connected
|
||||
}
|
||||
|
||||
pub fn set_connected(&mut self, value: bool) {
|
||||
self.connected = value;
|
||||
}
|
||||
|
||||
pub fn pivot(&self) -> Vec<f32> {
|
||||
self.pivot.clone()
|
||||
}
|
||||
|
||||
pub fn set_pivot(&mut self, value: Vec<f32>) {
|
||||
self.pivot = value;
|
||||
}
|
||||
|
||||
pub(crate) fn from_parts(
|
||||
base: JointBase,
|
||||
collision_volume: Vec<CollisionVolume>,
|
||||
bone: Vec<Self>,
|
||||
pivot: Vec<f32>,
|
||||
aliases: String,
|
||||
connected: bool,
|
||||
) -> Self {
|
||||
Self {
|
||||
base,
|
||||
collision_volume,
|
||||
bone: Some(bone),
|
||||
pivot,
|
||||
aliases,
|
||||
connected,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct LindenSkeleton {
|
||||
bone: Joint,
|
||||
version: f32,
|
||||
version_specified: bool,
|
||||
num_bones: String,
|
||||
num_collision_volumes: String,
|
||||
}
|
||||
|
||||
impl Default for LindenSkeleton {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
bone: Joint::default(),
|
||||
version: 0.0,
|
||||
version_specified: false,
|
||||
num_bones: String::new(),
|
||||
num_collision_volumes: String::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl LindenSkeleton {
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
Ok(Self::default())
|
||||
}
|
||||
|
||||
pub fn build_expanded_joint_list(
|
||||
&self,
|
||||
joints_filter: Box<dyn Iterator<Item = String>>,
|
||||
) -> Result<Vec<String>, crate::Error> {
|
||||
let filter = joints_filter.collect::<Vec<_>>();
|
||||
let mut expanded = Vec::new();
|
||||
if let Some(children) = &self.bone.bone {
|
||||
for child in children {
|
||||
expand_joint(child, &self.bone.base.name, &mut expanded, &filter);
|
||||
}
|
||||
}
|
||||
Ok(expanded)
|
||||
}
|
||||
|
||||
pub fn build_joint_dictionary(&self) -> Result<HashMap<String, Arc<Joint>>, crate::Error> {
|
||||
let mut dictionary = HashMap::new();
|
||||
for joint in collect_joints(&self.bone) {
|
||||
if !joint.base.name.is_empty() {
|
||||
dictionary.insert(joint.base.name.clone(), Arc::clone(&joint));
|
||||
}
|
||||
for alias in joint.aliases.split_ascii_whitespace() {
|
||||
if !alias.is_empty() {
|
||||
dictionary.insert(alias.to_owned(), Arc::clone(&joint));
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(dictionary)
|
||||
}
|
||||
|
||||
pub fn get_all_joints(&self) -> Result<Box<dyn Iterator<Item = Arc<Joint>>>, crate::Error> {
|
||||
Ok(Box::new(collect_joints(&self.bone).into_iter()))
|
||||
}
|
||||
|
||||
pub fn get_bone(&self, name_or_alias: String) -> Result<Option<Arc<Joint>>, crate::Error> {
|
||||
if name_or_alias.is_empty() {
|
||||
return Ok(None);
|
||||
}
|
||||
Ok(self.build_joint_dictionary()?.remove(&name_or_alias))
|
||||
}
|
||||
|
||||
pub fn get_default() -> Result<Self, crate::Error> {
|
||||
Ok(crate::skeleton_catalog::default_skeleton())
|
||||
}
|
||||
|
||||
pub fn load_with_method() -> Result<Self, crate::Error> {
|
||||
Self::get_default()
|
||||
}
|
||||
|
||||
pub fn load_with_string(file_name: Option<String>) -> Result<Self, crate::Error> {
|
||||
let Some(file_name) = file_name else {
|
||||
return Self::get_default();
|
||||
};
|
||||
let text = std::fs::read_to_string(file_name).map_err(|_| crate::Error::Argument)?;
|
||||
parse_skeleton_xml(&text)
|
||||
}
|
||||
|
||||
pub fn bone(&self) -> Joint {
|
||||
self.bone.clone()
|
||||
}
|
||||
|
||||
pub fn set_bone(&mut self, value: Joint) {
|
||||
self.bone = value;
|
||||
}
|
||||
|
||||
pub fn num_bones(&self) -> String {
|
||||
self.num_bones.clone()
|
||||
}
|
||||
|
||||
pub fn set_num_bones(&mut self, value: String) {
|
||||
self.num_bones = value;
|
||||
}
|
||||
|
||||
pub fn num_collision_volumes(&self) -> String {
|
||||
self.num_collision_volumes.clone()
|
||||
}
|
||||
|
||||
pub fn set_num_collision_volumes(&mut self, value: String) {
|
||||
self.num_collision_volumes = value;
|
||||
}
|
||||
|
||||
pub fn version(&self) -> f32 {
|
||||
self.version
|
||||
}
|
||||
|
||||
pub fn set_version(&mut self, value: f32) {
|
||||
self.version = value;
|
||||
}
|
||||
|
||||
pub fn version_specified(&self) -> bool {
|
||||
self.version_specified
|
||||
}
|
||||
|
||||
pub fn set_version_specified(&mut self, value: bool) {
|
||||
self.version_specified = value;
|
||||
}
|
||||
|
||||
pub(crate) fn from_parts(
|
||||
bone: Joint,
|
||||
version: f32,
|
||||
version_specified: bool,
|
||||
num_bones: String,
|
||||
num_collision_volumes: String,
|
||||
) -> Self {
|
||||
Self {
|
||||
bone,
|
||||
version,
|
||||
version_specified,
|
||||
num_bones,
|
||||
num_collision_volumes,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn collect_joints(root: &Joint) -> Vec<Arc<Joint>> {
|
||||
fn visit(joint: &Joint, output: &mut Vec<Arc<Joint>>) {
|
||||
output.push(Arc::new(joint.clone()));
|
||||
if let Some(children) = &joint.bone {
|
||||
for child in children {
|
||||
visit(child, output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut output = Vec::new();
|
||||
visit(root, &mut output);
|
||||
output
|
||||
}
|
||||
|
||||
fn expand_joint(
|
||||
current: &Joint,
|
||||
effective_parent: &str,
|
||||
expanded: &mut Vec<String>,
|
||||
filter: &[String],
|
||||
) {
|
||||
let mut next_effective_parent = effective_parent;
|
||||
if filter.iter().any(|name| name == ¤t.base.name) {
|
||||
let parent_matches_last = expanded.last().is_some_and(|last| last == effective_parent);
|
||||
if !parent_matches_last && filter.iter().any(|name| name == effective_parent) {
|
||||
expanded.push(effective_parent.to_owned());
|
||||
}
|
||||
expanded.push(current.base.name.clone());
|
||||
next_effective_parent = ¤t.base.name;
|
||||
}
|
||||
if let Some(children) = ¤t.bone {
|
||||
for child in children {
|
||||
expand_joint(child, next_effective_parent, expanded, filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_error(position: usize) -> crate::Error {
|
||||
crate::Error::Parse {
|
||||
position,
|
||||
context: "avatar skeleton XML",
|
||||
}
|
||||
}
|
||||
|
||||
fn node_position(node: Node<'_, '_>) -> usize {
|
||||
node.range().start
|
||||
}
|
||||
|
||||
fn required_attribute<'a>(node: Node<'a, '_>, name: &str) -> Result<&'a str, crate::Error> {
|
||||
node.attribute(name)
|
||||
.filter(|value| !value.is_empty())
|
||||
.ok_or_else(|| parse_error(node_position(node)))
|
||||
}
|
||||
|
||||
fn vector_attribute(node: Node<'_, '_>, name: &str) -> Result<Vec<f32>, crate::Error> {
|
||||
let Some(value) = node.attribute(name) else {
|
||||
return Ok(Vec::new());
|
||||
};
|
||||
let values = value
|
||||
.split_ascii_whitespace()
|
||||
.map(str::parse::<f32>)
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(|_| parse_error(node_position(node)))?;
|
||||
if values.len() != 3 || values.iter().any(|value| !value.is_finite()) {
|
||||
return Err(parse_error(node_position(node)));
|
||||
}
|
||||
Ok(values)
|
||||
}
|
||||
|
||||
fn boolean_attribute(node: Node<'_, '_>, name: &str) -> Result<bool, crate::Error> {
|
||||
match node.attribute(name) {
|
||||
None => Ok(false),
|
||||
Some(value) if value.eq_ignore_ascii_case("true") => Ok(true),
|
||||
Some(value) if value.eq_ignore_ascii_case("false") => Ok(false),
|
||||
Some(_) => Err(parse_error(node_position(node))),
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_base(node: Node<'_, '_>) -> Result<JointBase, crate::Error> {
|
||||
let support = node.attribute("support").unwrap_or_default();
|
||||
if !support.is_empty()
|
||||
&& !support.eq_ignore_ascii_case("base")
|
||||
&& !support.eq_ignore_ascii_case("extended")
|
||||
{
|
||||
return Err(parse_error(node_position(node)));
|
||||
}
|
||||
Ok(JointBase::from_parts(
|
||||
required_attribute(node, "name")?.to_owned(),
|
||||
vector_attribute(node, "pos")?,
|
||||
vector_attribute(node, "rot")?,
|
||||
vector_attribute(node, "scale")?,
|
||||
node.attribute("group").unwrap_or_default().to_owned(),
|
||||
support.to_owned(),
|
||||
vector_attribute(node, "end")?,
|
||||
boolean_attribute(node, "reposition")?,
|
||||
))
|
||||
}
|
||||
|
||||
fn parse_joint(node: Node<'_, '_>, names: &mut HashSet<String>) -> Result<Joint, crate::Error> {
|
||||
if !node.has_tag_name("bone") {
|
||||
return Err(parse_error(node_position(node)));
|
||||
}
|
||||
let base = parse_base(node)?;
|
||||
if !names.insert(base.name.clone()) {
|
||||
return Err(parse_error(node_position(node)));
|
||||
}
|
||||
let aliases = node.attribute("aliases").unwrap_or_default().to_owned();
|
||||
for alias in aliases.split_ascii_whitespace() {
|
||||
if !names.insert(alias.to_owned()) {
|
||||
return Err(parse_error(node_position(node)));
|
||||
}
|
||||
}
|
||||
let mut collision_volumes = Vec::new();
|
||||
let mut bones = Vec::new();
|
||||
for child in node.children().filter(Node::is_element) {
|
||||
if child.has_tag_name("collision_volume") {
|
||||
if child.children().any(|node| node.is_element()) {
|
||||
return Err(parse_error(node_position(child)));
|
||||
}
|
||||
collision_volumes.push(CollisionVolume::from_base(parse_base(child)?));
|
||||
} else if child.has_tag_name("bone") {
|
||||
bones.push(parse_joint(child, names)?);
|
||||
} else {
|
||||
return Err(parse_error(node_position(child)));
|
||||
}
|
||||
}
|
||||
Ok(Joint::from_parts(
|
||||
base,
|
||||
collision_volumes,
|
||||
bones,
|
||||
vector_attribute(node, "pivot")?,
|
||||
aliases,
|
||||
boolean_attribute(node, "connected")?,
|
||||
))
|
||||
}
|
||||
|
||||
pub(crate) fn parse_skeleton_xml(text: &str) -> Result<LindenSkeleton, crate::Error> {
|
||||
let document = Document::parse(text).map_err(|_| parse_error(0))?;
|
||||
let root = document.root_element();
|
||||
if !root.has_tag_name("linden_skeleton") {
|
||||
return Err(parse_error(node_position(root)));
|
||||
}
|
||||
let version_text = required_attribute(root, "version")?;
|
||||
let version = version_text
|
||||
.parse::<f32>()
|
||||
.map_err(|_| parse_error(node_position(root)))?;
|
||||
if !version.is_finite() {
|
||||
return Err(parse_error(node_position(root)));
|
||||
}
|
||||
let num_bones = required_attribute(root, "num_bones")?.to_owned();
|
||||
let expected_bones = num_bones
|
||||
.parse::<usize>()
|
||||
.map_err(|_| parse_error(node_position(root)))?;
|
||||
let num_collision_volumes = required_attribute(root, "num_collision_volumes")?.to_owned();
|
||||
let expected_collision_volumes = num_collision_volumes
|
||||
.parse::<usize>()
|
||||
.map_err(|_| parse_error(node_position(root)))?;
|
||||
let root_bones = root.children().filter(Node::is_element).collect::<Vec<_>>();
|
||||
if root_bones.len() != 1 || !root_bones[0].has_tag_name("bone") {
|
||||
return Err(parse_error(node_position(root)));
|
||||
}
|
||||
let mut names = HashSet::new();
|
||||
let bone = parse_joint(root_bones[0], &mut names)?;
|
||||
let (actual_bones, actual_collision_volumes) = skeleton_counts(&bone);
|
||||
if actual_bones != expected_bones || actual_collision_volumes != expected_collision_volumes {
|
||||
return Err(parse_error(node_position(root)));
|
||||
}
|
||||
Ok(LindenSkeleton::from_parts(
|
||||
bone,
|
||||
version,
|
||||
true,
|
||||
num_bones,
|
||||
num_collision_volumes,
|
||||
))
|
||||
}
|
||||
|
||||
pub(crate) fn skeleton_counts(root: &Joint) -> (usize, usize) {
|
||||
let mut bones = 1;
|
||||
let mut collision_volumes = root.collision_volume.len();
|
||||
if let Some(children) = &root.bone {
|
||||
for child in children {
|
||||
let (child_bones, child_collision_volumes) = skeleton_counts(child);
|
||||
bones += child_bones;
|
||||
collision_volumes += child_collision_volumes;
|
||||
}
|
||||
}
|
||||
(bones, collision_volumes)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn runtime_parser_rejects_count_mismatches_and_unknown_children() {
|
||||
let wrong_count = "<linden_skeleton version=\"1\" num_bones=\"2\" num_collision_volumes=\"0\"><bone name=\"root\"/></linden_skeleton>";
|
||||
assert!(matches!(
|
||||
parse_skeleton_xml(wrong_count),
|
||||
Err(crate::Error::Parse { .. })
|
||||
));
|
||||
let unknown = "<linden_skeleton version=\"1\" num_bones=\"1\" num_collision_volumes=\"0\"><bone name=\"root\"><unknown/></bone></linden_skeleton>";
|
||||
assert!(matches!(
|
||||
parse_skeleton_xml(unknown),
|
||||
Err(crate::Error::Parse { .. })
|
||||
));
|
||||
}
|
||||
}
|
||||
996
crates/libremetaverse/src/skeleton_catalog.rs
Normal file
996
crates/libremetaverse/src/skeleton_catalog.rs
Normal file
@@ -0,0 +1,996 @@
|
||||
// @generated by libremetaverse-codegen; DO NOT EDIT.
|
||||
// Regenerate: cargo run -p libremetaverse-codegen -- generate
|
||||
// Generator: skeleton
|
||||
// Source: codegen/inputs/avatar_skeleton.xml sha256=addb3cc4cd582ed4343d778e06daf90c6b77b61b4ecb4a20d4bf202c2b93908a license=BSD-3-Clause
|
||||
|
||||
#![allow(clippy::float_cmp, clippy::too_many_lines, clippy::unreadable_literal)]
|
||||
pub(crate) fn default_skeleton() -> crate::skeleton::LindenSkeleton {
|
||||
crate::skeleton::LindenSkeleton::from_parts(
|
||||
crate::skeleton::Joint::from_parts(
|
||||
crate::skeleton::JointBase::from_parts(
|
||||
"mPelvis".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32, 1.067_f32],
|
||||
vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32],
|
||||
"Torso".to_owned(),
|
||||
"base".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32, 0.084_f32],
|
||||
true,
|
||||
),
|
||||
vec![
|
||||
crate ::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("PELVIS".to_owned(), vec![- 0.01_f32,
|
||||
0.0_f32,- 0.02_f32], vec![0.0_f32, 8.0_f32, 0.0_f32], vec![0.12_f32,
|
||||
0.16_f32, 0.17_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.03_f32, 0.0_f32, 0.095_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("BUTT".to_owned(), vec![- 0.06_f32,
|
||||
0.0_f32,- 0.1_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.1_f32,
|
||||
0.1_f32, 0.1_f32], "Collision".to_owned(), "base".to_owned(), vec![-
|
||||
0.1_f32, 0.0_f32, 0.0_f32], true))
|
||||
],
|
||||
vec![
|
||||
crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mSpine1".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.084_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Spine".to_owned(), "extended".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32,- 0.084_f32], false), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mSpine2".to_owned(), vec![0.0_f32,
|
||||
0.0_f32,- 0.084_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Spine".to_owned(), "extended".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32, 0.084_f32], false), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTorso".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.084_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Torso".to_owned(), "base".to_owned(), vec![-
|
||||
0.015_f32, 0.0_f32, 0.205_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("BELLY".to_owned(), vec![0.028_f32,
|
||||
0.0_f32, 0.04_f32], vec![0.0_f32, 8.0_f32, 0.0_f32], vec![0.09_f32,
|
||||
0.13_f32, 0.15_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.028_f32, 0.0_f32, 0.094_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("LEFT_HANDLE".to_owned(), vec![0.0_f32,
|
||||
0.1_f32, 0.058_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.05_f32,
|
||||
0.05_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.1_f32, 0.0_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("RIGHT_HANDLE".to_owned(),
|
||||
vec![0.0_f32,- 0.1_f32, 0.058_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.05_f32, 0.05_f32, 0.05_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![0.0_f32,- 0.1_f32, 0.0_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("LOWER_BACK".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.023_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.09_f32,
|
||||
0.13_f32, 0.15_f32], "Collision".to_owned(), "base".to_owned(), vec![-
|
||||
0.1_f32, 0.0_f32, 0.0_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mSpine3".to_owned(), vec![- 0.015_f32,
|
||||
0.0_f32, 0.205_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Spine".to_owned(), "extended".to_owned(),
|
||||
vec![0.015_f32, 0.0_f32,- 0.205_f32], false), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mSpine4".to_owned(), vec![0.015_f32,
|
||||
0.0_f32,- 0.205_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Spine".to_owned(), "extended".to_owned(), vec![-
|
||||
0.015_f32, 0.0_f32, 0.205_f32], false), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mChest".to_owned(), vec![- 0.015_f32,
|
||||
0.0_f32, 0.205_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Torso".to_owned(), "base".to_owned(), vec![-
|
||||
0.01_f32, 0.0_f32, 0.25_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("CHEST".to_owned(), vec![0.028_f32,
|
||||
0.0_f32, 0.07_f32], vec![0.0_f32,- 10.0_f32, 0.0_f32], vec![0.11_f32,
|
||||
0.15_f32, 0.2_f32], "Collision".to_owned(), "base".to_owned(), vec![-
|
||||
0.096_f32, 0.0_f32, 0.152_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("LEFT_PEC".to_owned(), vec![0.119_f32,
|
||||
0.082_f32, 0.042_f32], vec![0.0_f32, 4.29_f32, 0.0_f32], vec![0.05_f32,
|
||||
0.05_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.08_f32, 0.0_f32,- 0.006_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("RIGHT_PEC".to_owned(),
|
||||
vec![0.119_f32,- 0.082_f32, 0.042_f32], vec![0.0_f32, 4.29_f32, 0.0_f32],
|
||||
vec![0.05_f32, 0.05_f32, 0.05_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![0.08_f32, 0.0_f32,- 0.006_f32], true)), crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("UPPER_BACK".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.017_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.09_f32,
|
||||
0.13_f32, 0.15_f32], "Collision".to_owned(), "base".to_owned(), vec![-
|
||||
0.1_f32, 0.0_f32, 0.0_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mNeck".to_owned(), vec![- 0.01_f32,
|
||||
0.0_f32, 0.251_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Torso".to_owned(), "base".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.077_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("NECK".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.02_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.05_f32,
|
||||
0.06_f32, 0.08_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32, 0.08_f32], false))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHead".to_owned(), vec![0.0_f32,-
|
||||
0.0_f32, 0.076_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Torso".to_owned(), "base".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.079_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("HEAD".to_owned(), vec![0.02_f32,
|
||||
0.0_f32, 0.07_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.11_f32,
|
||||
0.09_f32, 0.12_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32, 0.1_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mSkull".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.079_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(), vec![0.0_f32,
|
||||
0.0_f32, 0.033_f32], true), vec![], vec![], vec![0.0_f32, 0.0_f32,
|
||||
0.079_f32], "figureHair avatar_mSkull".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mEyeRight".to_owned(),
|
||||
vec![0.098_f32,- 0.036_f32, 0.079_f32], vec![0.0_f32, 0.0_f32,- 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(),
|
||||
vec![0.025_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.098466_f32,- 0.036_f32, 0.079_f32], "avatar_mEyeRight".to_owned(),
|
||||
false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mEyeLeft".to_owned(), vec![0.098_f32,
|
||||
0.036_f32, 0.079_f32], vec![0.0_f32,- 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(), vec![0.025_f32,
|
||||
0.0_f32, 0.0_f32], true), vec![], vec![], vec![0.098461_f32, 0.036_f32,
|
||||
0.079_f32], "avatar_mEyeLeft".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceRoot".to_owned(), vec![0.025_f32,
|
||||
0.0_f32, 0.045_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Face".to_owned(), "extended".to_owned(),
|
||||
vec![0.02_f32, 0.0_f32, 0.0_f32], false), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyeAltRight".to_owned(),
|
||||
vec![0.073_f32,- 0.036_f32, 0.034_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.025_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.073466_f32,- 0.036_f32, 0.03393_f32], "avatar_mFaceEyeAltRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyeAltLeft".to_owned(),
|
||||
vec![0.073_f32, 0.036_f32, 0.034_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.025_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.073461_f32, 0.036_f32, 0.03393_f32], "avatar_mFaceEyeAltLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceForeheadLeft".to_owned(),
|
||||
vec![0.061_f32, 0.035_f32, 0.083_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.024_f32, 0.004_f32, 0.018_f32], true), vec![],
|
||||
vec![], vec![0.061_f32, 0.035_f32, 0.083_f32], "avatar_mFaceForeheadLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceForeheadRight".to_owned(),
|
||||
vec![0.061_f32,- 0.035_f32, 0.083_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.024_f32,- 0.004_f32, 0.018_f32], true), vec![],
|
||||
vec![], vec![0.061_f32,- 0.035_f32, 0.083_f32],
|
||||
"avatar_mFaceForeheadRight".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyebrowOuterLeft".to_owned(),
|
||||
vec![0.064_f32, 0.051_f32, 0.048_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.023_f32, 0.013_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.064_f32, 0.051_f32, 0.048_f32], "avatar_mFaceEyebrowOuterLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyebrowCenterLeft".to_owned(),
|
||||
vec![0.07_f32, 0.043_f32, 0.056_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.027_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.07_f32, 0.043_f32, 0.056_f32], "avatar_mFaceEyebrowCenterLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyebrowInnerLeft".to_owned(),
|
||||
vec![0.075_f32, 0.022_f32, 0.051_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.026_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.075_f32, 0.022_f32, 0.051_f32], "avatar_mFaceEyebrowInnerLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyebrowOuterRight".to_owned(),
|
||||
vec![0.064_f32,- 0.051_f32, 0.048_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.023_f32,- 0.013_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.064_f32,- 0.051_f32, 0.048_f32], "avatar_mFaceEyebrowOuterRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyebrowCenterRight".to_owned(),
|
||||
vec![0.07_f32,- 0.043_f32, 0.056_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.027_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.07_f32,- 0.043_f32, 0.056_f32], "avatar_mFaceEyebrowCenterRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyebrowInnerRight".to_owned(),
|
||||
vec![0.075_f32,- 0.022_f32, 0.051_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.026_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.075_f32,- 0.022_f32, 0.051_f32], "avatar_mFaceEyebrowInnerRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyeLidUpperLeft".to_owned(),
|
||||
vec![0.073_f32, 0.036_f32, 0.034_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.027_f32, 0.0_f32, 0.005_f32], true), vec![], vec![],
|
||||
vec![0.073_f32, 0.036_f32, 0.034_f32], "avatar_mFaceEyeLidUpperLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyeLidLowerLeft".to_owned(),
|
||||
vec![0.073_f32, 0.036_f32, 0.034_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.024_f32, 0.0_f32,- 0.007_f32], true), vec![], vec![],
|
||||
vec![0.073_f32, 0.036_f32, 0.034_f32], "avatar_mFaceEyeLidLowerLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyeLidUpperRight".to_owned(),
|
||||
vec![0.073_f32,- 0.036_f32, 0.034_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.027_f32, 0.0_f32, 0.005_f32], true), vec![], vec![],
|
||||
vec![0.073_f32,- 0.036_f32, 0.034_f32], "avatar_mFaceEyeLidUpperRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyeLidLowerRight".to_owned(),
|
||||
vec![0.073_f32,- 0.036_f32, 0.034_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Eyes".to_owned(), "extended"
|
||||
.to_owned(), vec![0.024_f32, 0.0_f32,- 0.007_f32], true), vec![], vec![],
|
||||
vec![0.073_f32,- 0.036_f32, 0.034_f32], "avatar_mFaceEyeLidLowerRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEar1Left".to_owned(),
|
||||
vec![0.0_f32, 0.08_f32, 0.002_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Ears".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.019_f32, 0.018_f32, 0.025_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEar2Left".to_owned(), vec![-
|
||||
0.019_f32, 0.018_f32, 0.025_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Ears".to_owned(), "extended"
|
||||
.to_owned(), vec![0.0_f32, 0.0_f32, 0.033_f32], true), vec![], vec![],
|
||||
vec![- 0.019_f32, 0.018_f32, 0.025_f32], "avatar_mFaceEar2Left"
|
||||
.to_owned(), true)], vec![0.0_f32, 0.08_f32, 0.002_f32],
|
||||
"avatar_mFaceEar1Left".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEar1Right".to_owned(),
|
||||
vec![0.0_f32,- 0.08_f32, 0.002_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Ears".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.019_f32,- 0.018_f32, 0.025_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEar2Right".to_owned(), vec![-
|
||||
0.019_f32,- 0.018_f32, 0.025_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Ears".to_owned(), "extended"
|
||||
.to_owned(), vec![0.0_f32, 0.0_f32, 0.033_f32], true), vec![], vec![],
|
||||
vec![- 0.019_f32,- 0.018_f32, 0.025_f32], "avatar_mFaceEar2Right"
|
||||
.to_owned(), true)], vec![0.0_f32,- 0.08_f32, 0.002_f32],
|
||||
"avatar_mFaceEar1Right".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceNoseLeft".to_owned(),
|
||||
vec![0.086_f32, 0.015_f32,- 0.004_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.015_f32, 0.004_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.086_f32, 0.015_f32,- 0.004_f32], "avatar_mFaceNoseLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceNoseCenter".to_owned(),
|
||||
vec![0.102_f32, 0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.025_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.102_f32, 0.0_f32, 0.0_f32], "avatar_mFaceNoseCenter".to_owned(),
|
||||
false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceNoseRight".to_owned(),
|
||||
vec![0.086_f32,- 0.015_f32,- 0.004_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.015_f32,- 0.004_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.086_f32,- 0.015_f32,- 0.004_f32], "avatar_mFaceNoseRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceCheekLowerLeft".to_owned(),
|
||||
vec![0.05_f32, 0.034_f32,- 0.031_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.013_f32, 0.03_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.05_f32, 0.034_f32,- 0.031_f32], "avatar_mFaceCheekLowerLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceCheekUpperLeft".to_owned(),
|
||||
vec![0.07_f32, 0.034_f32,- 0.005_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.022_f32, 0.015_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.07_f32, 0.034_f32,- 0.005_f32], "avatar_mFaceCheekUpperLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceCheekLowerRight".to_owned(),
|
||||
vec![0.05_f32,- 0.034_f32,- 0.031_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.013_f32,- 0.03_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.05_f32,- 0.034_f32,- 0.031_f32], "avatar_mFaceCheekLowerRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceCheekUpperRight".to_owned(),
|
||||
vec![0.07_f32,- 0.034_f32,- 0.005_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.022_f32,- 0.015_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.07_f32,- 0.034_f32,- 0.005_f32], "avatar_mFaceCheekUpperRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceJaw".to_owned(), vec![-
|
||||
0.001_f32, 0.0_f32,- 0.015_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Mouth".to_owned(), "extended"
|
||||
.to_owned(), vec![0.059_f32, 0.0_f32,- 0.039_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceChin".to_owned(), vec![0.074_f32,
|
||||
0.0_f32,- 0.054_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Mouth".to_owned(), "extended".to_owned(),
|
||||
vec![0.021_f32, 0.0_f32,- 0.018_f32], true), vec![], vec![],
|
||||
vec![0.074_f32, 0.0_f32,- 0.054_f32], "avatar_mFaceChin".to_owned(),
|
||||
false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceTeethLower".to_owned(),
|
||||
vec![0.021_f32, 0.0_f32,- 0.039_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Mouth".to_owned(), "extended"
|
||||
.to_owned(), vec![0.035_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipLowerLeft".to_owned(),
|
||||
vec![0.045_f32, 0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.034_f32, 0.017_f32, 0.005_f32], true), vec![],
|
||||
vec![], vec![0.045_f32, 0.0_f32, 0.0_f32], "avatar_mFaceLipLowerLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipLowerRight".to_owned(),
|
||||
vec![0.045_f32, 0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.034_f32,- 0.017_f32, 0.005_f32], true), vec![],
|
||||
vec![], vec![0.045_f32, 0.0_f32, 0.0_f32], "avatar_mFaceLipLowerRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipLowerCenter".to_owned(),
|
||||
vec![0.045_f32, 0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.04_f32, 0.0_f32, 0.002_f32], true), vec![], vec![],
|
||||
vec![0.045_f32, 0.0_f32, 0.0_f32], "avatar_mFaceLipLowerCenter"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceTongueBase".to_owned(),
|
||||
vec![0.039_f32, 0.0_f32, 0.005_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Mouth".to_owned(), "extended"
|
||||
.to_owned(), vec![0.022_f32, 0.0_f32, 0.007_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceTongueTip".to_owned(),
|
||||
vec![0.022_f32, 0.0_f32, 0.007_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Mouth".to_owned(), "extended"
|
||||
.to_owned(), vec![0.01_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.022_f32, 0.0_f32, 0.007_f32], "avatar_mFaceTongueTip".to_owned(),
|
||||
true)], vec![0.039_f32, 0.0_f32, 0.005_f32], "avatar_mFaceTongueBase"
|
||||
.to_owned(), false)], vec![0.021_f32, 0.0_f32,- 0.039_f32],
|
||||
"avatar_mFaceTeethLower".to_owned(), false)], vec![- 0.001_f32, 0.0_f32,-
|
||||
0.015_f32], "avatar_mFaceJaw".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceJawShaper".to_owned(),
|
||||
vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.017_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.0_f32, 0.0_f32, 0.0_f32], "avatar_mFaceJawShaper".to_owned(),
|
||||
false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceForeheadCenter".to_owned(),
|
||||
vec![0.069_f32, 0.0_f32, 0.065_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.036_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.069_f32, 0.0_f32, 0.065_f32], "avatar_mFaceForeheadCenter"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceNoseBase".to_owned(),
|
||||
vec![0.094_f32, 0.0_f32,- 0.016_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Nose".to_owned(), "extended"
|
||||
.to_owned(), vec![0.014_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.094_f32, 0.0_f32,- 0.016_f32], "avatar_mFaceNoseBase".to_owned(),
|
||||
false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceTeethUpper".to_owned(),
|
||||
vec![0.02_f32, 0.0_f32,- 0.03_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Mouth".to_owned(), "extended"
|
||||
.to_owned(), vec![0.035_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipUpperLeft".to_owned(),
|
||||
vec![0.045_f32, 0.0_f32,- 0.003_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.041_f32, 0.015_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.045_f32, 0.0_f32,- 0.003_f32], "avatar_mFaceLipUpperLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipUpperRight".to_owned(),
|
||||
vec![0.045_f32, 0.0_f32,- 0.003_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.041_f32,- 0.015_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.045_f32, 0.0_f32,- 0.003_f32], "avatar_mFaceLipUpperRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipCornerLeft".to_owned(),
|
||||
vec![0.028_f32,- 0.019_f32,- 0.01_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.045_f32, 0.051_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.028_f32,- 0.019_f32,- 0.01_f32], "avatar_mFaceLipCornerLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipCornerRight".to_owned(),
|
||||
vec![0.028_f32, 0.019_f32,- 0.01_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.045_f32,- 0.051_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.028_f32, 0.019_f32,- 0.01_f32], "avatar_mFaceLipCornerRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceLipUpperCenter".to_owned(),
|
||||
vec![0.045_f32, 0.0_f32,- 0.003_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Lips".to_owned(), "extended"
|
||||
.to_owned(), vec![0.043_f32, 0.0_f32, 0.002_f32], true), vec![], vec![],
|
||||
vec![0.045_f32, 0.0_f32,- 0.003_f32], "avatar_mFaceLipUpperCenter"
|
||||
.to_owned(), false)], vec![0.02_f32, 0.0_f32,- 0.03_f32],
|
||||
"avatar_mFaceTeethUpper".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyecornerInnerLeft".to_owned(),
|
||||
vec![0.075_f32, 0.017_f32, 0.032_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.016_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.075_f32, 0.017_f32, 0.032_f32], "avatar_mFaceEyecornerInnerLeft"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceEyecornerInnerRight".to_owned(),
|
||||
vec![0.075_f32,- 0.017_f32, 0.032_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Face".to_owned(), "extended"
|
||||
.to_owned(), vec![0.016_f32, 0.0_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.075_f32,- 0.017_f32, 0.032_f32], "avatar_mFaceEyecornerInnerRight"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFaceNoseBridge".to_owned(),
|
||||
vec![0.091_f32, 0.0_f32, 0.02_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Nose".to_owned(), "extended"
|
||||
.to_owned(), vec![0.015_f32, 0.0_f32, 0.008_f32], true), vec![], vec![],
|
||||
vec![0.091_f32, 0.0_f32, 0.02_f32], "avatar_mFaceNoseBridge".to_owned(),
|
||||
false)], vec![0.025_f32, 0.0_f32, 0.045_f32], "avatar_mFaceRoot"
|
||||
.to_owned(), false)], vec![0.0_f32,- 0.0_f32, 0.07563_f32],
|
||||
"head avatar_mHead".to_owned(), true)], vec![- 0.009507_f32, 0.0_f32,
|
||||
0.251108_f32], "neck avatar_mNeck".to_owned(), true), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mCollarLeft".to_owned(), vec![-
|
||||
0.021_f32, 0.085_f32, 0.165_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.079_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_CLAVICLE".to_owned(), vec![0.02_f32,
|
||||
0.0_f32, 0.02_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.07_f32,
|
||||
0.14_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.1_f32, 0.0_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mShoulderLeft".to_owned(),
|
||||
vec![0.0_f32, 0.079_f32,- 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.247_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_UPPER_ARM".to_owned(), vec![0.0_f32,
|
||||
0.12_f32, 0.01_f32], vec![- 5.0_f32, 0.0_f32, 0.0_f32], vec![0.05_f32,
|
||||
0.17_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.13_f32,- 0.003_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mElbowLeft".to_owned(), vec![0.0_f32,
|
||||
0.248_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(), vec![0.0_f32,
|
||||
0.205_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_LOWER_ARM".to_owned(), vec![0.0_f32,
|
||||
0.1_f32, 0.0_f32], vec![- 3.0_f32, 0.0_f32, 0.0_f32], vec![0.04_f32,
|
||||
0.14_f32, 0.04_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.1_f32,- 0.001_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWristLeft".to_owned(), vec![-
|
||||
0.0_f32, 0.205_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32, 0.06_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_HAND".to_owned(), vec![0.01_f32,
|
||||
0.05_f32, 0.0_f32], vec![- 3.0_f32, 0.0_f32,- 10.0_f32], vec![0.05_f32,
|
||||
0.08_f32, 0.03_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.005_f32, 0.049_f32,- 0.001_f32], false))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandMiddle1Left".to_owned(),
|
||||
vec![0.013_f32, 0.101_f32, 0.015_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.001_f32, 0.04_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandMiddle2Left".to_owned(), vec![-
|
||||
0.001_f32, 0.04_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.001_f32, 0.049_f32,- 0.008_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandMiddle3Left".to_owned(), vec![-
|
||||
0.001_f32, 0.049_f32,- 0.008_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.002_f32, 0.033_f32,- 0.006_f32], false), vec![],
|
||||
vec![], vec![- 0.001_f32, 0.049_f32,- 0.008_f32],
|
||||
"avatar_mHandMiddle3Left".to_owned(), true)], vec![- 0.001_f32,
|
||||
0.04_f32,- 0.006_f32], "avatar_mHandMiddle2Left".to_owned(), true)],
|
||||
vec![0.013_f32, 0.101_f32, 0.015_f32], "avatar_mHandMiddle1Left"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandIndex1Left".to_owned(),
|
||||
vec![0.038_f32, 0.097_f32, 0.015_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.017_f32, 0.036_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandIndex2Left".to_owned(),
|
||||
vec![0.017_f32, 0.036_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.014_f32, 0.032_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandIndex3Left".to_owned(),
|
||||
vec![0.014_f32, 0.032_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.011_f32, 0.025_f32,- 0.004_f32], false), vec![],
|
||||
vec![], vec![0.014_f32, 0.032_f32,- 0.006_f32], "avatar_mHandIndex3Left"
|
||||
.to_owned(), true)], vec![0.017_f32, 0.036_f32,- 0.006_f32],
|
||||
"avatar_mHandIndex2Left".to_owned(), true)], vec![0.038_f32, 0.097_f32,
|
||||
0.015_f32], "avatar_mHandIndex1Left".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandRing1Left".to_owned(), vec![-
|
||||
0.01_f32, 0.099_f32, 0.009_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.013_f32, 0.038_f32,- 0.008_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandRing2Left".to_owned(), vec![-
|
||||
0.013_f32, 0.038_f32,- 0.008_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.013_f32, 0.04_f32,- 0.009_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandRing3Left".to_owned(), vec![-
|
||||
0.013_f32, 0.04_f32,- 0.009_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.01_f32, 0.028_f32,- 0.006_f32], false), vec![],
|
||||
vec![], vec![- 0.013_f32, 0.04_f32,- 0.009_f32], "avatar_mHandRing3Left"
|
||||
.to_owned(), true)], vec![- 0.013_f32, 0.038_f32,- 0.008_f32],
|
||||
"avatar_mHandRing2Left".to_owned(), true)], vec![- 0.01_f32, 0.099_f32,
|
||||
0.009_f32], "avatar_mHandRing1Left".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandPinky1Left".to_owned(), vec![-
|
||||
0.031_f32, 0.095_f32, 0.003_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.024_f32, 0.025_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandPinky2Left".to_owned(), vec![-
|
||||
0.024_f32, 0.025_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.015_f32, 0.018_f32,- 0.004_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandPinky3Left".to_owned(), vec![-
|
||||
0.015_f32, 0.018_f32,- 0.004_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.013_f32, 0.016_f32,- 0.004_f32], false), vec![],
|
||||
vec![], vec![- 0.015_f32, 0.018_f32,- 0.004_f32],
|
||||
"avatar_mHandPinky3Left".to_owned(), true)], vec![- 0.024_f32,
|
||||
0.025_f32,- 0.006_f32], "avatar_mHandPinky2Left".to_owned(), true)],
|
||||
vec![- 0.031_f32, 0.095_f32, 0.003_f32], "avatar_mHandPinky1Left"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandThumb1Left".to_owned(),
|
||||
vec![0.031_f32, 0.026_f32, 0.004_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.028_f32, 0.032_f32, 0.0_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandThumb2Left".to_owned(),
|
||||
vec![0.028_f32, 0.032_f32,- 0.001_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.023_f32, 0.031_f32, 0.0_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandThumb3Left".to_owned(),
|
||||
vec![0.023_f32, 0.031_f32,- 0.001_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.015_f32, 0.025_f32, 0.0_f32], false), vec![], vec![],
|
||||
vec![0.023_f32, 0.031_f32,- 0.001_f32], "avatar_mHandThumb3Left"
|
||||
.to_owned(), true)], vec![0.028_f32, 0.032_f32,- 0.001_f32],
|
||||
"avatar_mHandThumb2Left".to_owned(), true)], vec![0.031_f32, 0.026_f32,
|
||||
0.004_f32], "avatar_mHandThumb1Left".to_owned(), false)], vec![- 0.0_f32,
|
||||
0.204846_f32, 0.0_f32], "lHand avatar_mWristLeft".to_owned(), true)],
|
||||
vec![0.0_f32, 0.248_f32, 0.0_f32], "lForeArm avatar_mElbowLeft"
|
||||
.to_owned(), true)], vec![0.0_f32, 0.079_f32,- 0.0_f32],
|
||||
"lShldr avatar_mShoulderLeft".to_owned(), true)], vec![- 0.020927_f32,
|
||||
0.084665_f32, 0.165396_f32], "lCollar avatar_mCollarLeft".to_owned(),
|
||||
false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mCollarRight".to_owned(), vec![-
|
||||
0.021_f32,- 0.085_f32, 0.165_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32,- 0.079_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_CLAVICLE".to_owned(), vec![0.02_f32,
|
||||
0.0_f32, 0.02_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![0.07_f32,
|
||||
0.14_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32,- 0.1_f32, 0.0_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mShoulderRight".to_owned(),
|
||||
vec![0.0_f32,- 0.079_f32,- 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32,- 0.247_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_UPPER_ARM".to_owned(),
|
||||
vec![0.0_f32,- 0.12_f32, 0.01_f32], vec![5.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.05_f32, 0.17_f32, 0.05_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![0.0_f32,- 0.13_f32,- 0.003_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mElbowRight".to_owned(),
|
||||
vec![0.0_f32,- 0.248_f32,- 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32,- 0.205_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_LOWER_ARM".to_owned(),
|
||||
vec![0.0_f32,- 0.1_f32, 0.0_f32], vec![3.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.04_f32, 0.14_f32, 0.04_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![0.0_f32,- 0.1_f32,- 0.001_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWristRight".to_owned(),
|
||||
vec![0.0_f32,- 0.205_f32,- 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Arms".to_owned(), "base".to_owned(),
|
||||
vec![0.0_f32,- 0.06_f32, 0.0_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_HAND".to_owned(), vec![0.01_f32,-
|
||||
0.05_f32, 0.0_f32], vec![3.0_f32, 0.0_f32, 10.0_f32], vec![0.05_f32,
|
||||
0.08_f32, 0.03_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.005_f32,- 0.049_f32,- 0.001_f32], false))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandMiddle1Right".to_owned(),
|
||||
vec![0.013_f32,- 0.101_f32, 0.015_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.001_f32,- 0.04_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandMiddle2Right".to_owned(), vec![-
|
||||
0.001_f32,- 0.04_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.001_f32,- 0.049_f32,- 0.008_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandMiddle3Right".to_owned(), vec![-
|
||||
0.001_f32,- 0.049_f32,- 0.008_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.002_f32,- 0.033_f32,- 0.006_f32], false), vec![],
|
||||
vec![], vec![- 0.001_f32,- 0.049_f32,- 0.008_f32],
|
||||
"avatar_mHandMiddle3Right".to_owned(), true)], vec![- 0.001_f32,-
|
||||
0.04_f32,- 0.006_f32], "avatar_mHandMiddle2Right".to_owned(), true)],
|
||||
vec![0.013_f32,- 0.101_f32, 0.015_f32], "avatar_mHandMiddle1Right"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandIndex1Right".to_owned(),
|
||||
vec![0.038_f32,- 0.097_f32, 0.015_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.017_f32,- 0.036_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandIndex2Right".to_owned(),
|
||||
vec![0.017_f32,- 0.036_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.014_f32,- 0.032_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandIndex3Right".to_owned(),
|
||||
vec![0.014_f32,- 0.032_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.011_f32,- 0.025_f32,- 0.004_f32], false), vec![],
|
||||
vec![], vec![0.014_f32,- 0.032_f32,- 0.006_f32],
|
||||
"avatar_mHandIndex3Right".to_owned(), true)], vec![0.017_f32,-
|
||||
0.036_f32,- 0.006_f32], "avatar_mHandIndex2Right".to_owned(), true)],
|
||||
vec![0.038_f32,- 0.097_f32, 0.015_f32], "avatar_mHandIndex1Right"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandRing1Right".to_owned(), vec![-
|
||||
0.01_f32,- 0.099_f32, 0.009_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.013_f32,- 0.038_f32,- 0.008_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandRing2Right".to_owned(), vec![-
|
||||
0.013_f32,- 0.038_f32,- 0.008_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.013_f32,- 0.04_f32,- 0.009_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandRing3Right".to_owned(), vec![-
|
||||
0.013_f32,- 0.04_f32,- 0.009_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.01_f32,- 0.028_f32,- 0.006_f32], false), vec![],
|
||||
vec![], vec![- 0.013_f32,- 0.04_f32,- 0.009_f32],
|
||||
"avatar_mHandRing3Right".to_owned(), true)], vec![- 0.013_f32,-
|
||||
0.038_f32,- 0.008_f32], "avatar_mHandRing2Right".to_owned(), true)],
|
||||
vec![- 0.01_f32,- 0.099_f32, 0.009_f32], "avatar_mHandRing1Right"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandPinky1Right".to_owned(), vec![-
|
||||
0.031_f32,- 0.095_f32, 0.003_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.024_f32,- 0.025_f32,- 0.006_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandPinky2Right".to_owned(), vec![-
|
||||
0.024_f32,- 0.025_f32,- 0.006_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.015_f32,- 0.018_f32,- 0.004_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandPinky3Right".to_owned(), vec![-
|
||||
0.015_f32,- 0.018_f32,- 0.004_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.013_f32,- 0.016_f32,- 0.004_f32], false), vec![],
|
||||
vec![], vec![- 0.015_f32,- 0.018_f32,- 0.004_f32],
|
||||
"avatar_mHandPinky3Right".to_owned(), true)], vec![- 0.024_f32,-
|
||||
0.025_f32,- 0.006_f32], "avatar_mHandPinky2Right".to_owned(), true)],
|
||||
vec![- 0.031_f32,- 0.095_f32, 0.003_f32], "avatar_mHandPinky1Right"
|
||||
.to_owned(), false), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandThumb1Right".to_owned(),
|
||||
vec![0.031_f32,- 0.026_f32, 0.004_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.028_f32,- 0.032_f32, 0.0_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandThumb2Right".to_owned(),
|
||||
vec![0.028_f32,- 0.032_f32,- 0.001_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.023_f32,- 0.031_f32, 0.0_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHandThumb3Right".to_owned(),
|
||||
vec![0.023_f32,- 0.031_f32,- 0.001_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Hand".to_owned(), "extended"
|
||||
.to_owned(), vec![0.015_f32,- 0.025_f32, 0.0_f32], false), vec![],
|
||||
vec![], vec![0.023_f32,- 0.031_f32,- 0.001_f32],
|
||||
"avatar_mHandThumb3Right".to_owned(), true)], vec![0.028_f32,-
|
||||
0.032_f32,- 0.001_f32], "avatar_mHandThumb2Right".to_owned(), true)],
|
||||
vec![0.031_f32,- 0.026_f32, 0.004_f32], "avatar_mHandThumb1Right"
|
||||
.to_owned(), false)], vec![- 0.0_f32,- 0.205_f32,- 0.0_f32],
|
||||
"rHand avatar_mWristRight".to_owned(), true)], vec![0.0_f32,- 0.248_f32,-
|
||||
0.0_f32], "rForeArm avatar_mElbowRight".to_owned(), true)],
|
||||
vec![0.0_f32,- 0.079418_f32,- 0.0_f32], "rShldr avatar_mShoulderRight"
|
||||
.to_owned(), true)], vec![- 0.020927_f32,- 0.085_f32, 0.165396_f32],
|
||||
"rCollar avatar_mCollarRight".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWingsRoot".to_owned(), vec![-
|
||||
0.014_f32, 0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.061_f32, 0.0_f32, 0.0_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing1Left".to_owned(), vec![-
|
||||
0.099_f32, 0.105_f32, 0.181_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.168_f32, 0.169_f32, 0.067_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing2Left".to_owned(), vec![-
|
||||
0.168_f32, 0.169_f32, 0.067_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.181_f32, 0.183_f32, 0.0_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing3Left".to_owned(), vec![-
|
||||
0.181_f32, 0.183_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.171_f32, 0.173_f32, 0.0_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing4Left".to_owned(), vec![-
|
||||
0.171_f32, 0.173_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.146_f32, 0.132_f32, 0.0_f32], true), vec![],
|
||||
vec![], vec![- 0.171_f32, 0.173_f32, 0.0_f32], "avatar_mWing4Left"
|
||||
.to_owned(), true), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing4FanLeft".to_owned(), vec![-
|
||||
0.171_f32, 0.173_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.068_f32, 0.062_f32,- 0.159_f32], true), vec![],
|
||||
vec![], vec![- 0.171_f32, 0.173_f32, 0.0_f32], "avatar_mWing4FanLeft"
|
||||
.to_owned(), true)], vec![- 0.181_f32, 0.183_f32, 0.0_f32],
|
||||
"avatar_mWing3Left".to_owned(), true)], vec![- 0.168_f32, 0.169_f32,
|
||||
0.067_f32], "avatar_mWing2Left".to_owned(), true)], vec![- 0.099_f32,
|
||||
0.105_f32, 0.181_f32], "avatar_mWing1Left".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing1Right".to_owned(), vec![-
|
||||
0.099_f32,- 0.105_f32, 0.181_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.168_f32,- 0.169_f32, 0.067_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing2Right".to_owned(), vec![-
|
||||
0.168_f32,- 0.169_f32, 0.067_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.181_f32,- 0.183_f32, 0.0_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing3Right".to_owned(), vec![-
|
||||
0.181_f32,- 0.183_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.171_f32,- 0.173_f32, 0.0_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing4Right".to_owned(), vec![-
|
||||
0.171_f32,- 0.173_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.146_f32,- 0.132_f32, 0.0_f32], true), vec![],
|
||||
vec![], vec![- 0.171_f32,- 0.173_f32, 0.0_f32], "avatar_mWing4Right"
|
||||
.to_owned(), true), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mWing4FanRight".to_owned(), vec![-
|
||||
0.171_f32,- 0.173_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Wing".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.068_f32,- 0.062_f32,- 0.159_f32], true), vec![],
|
||||
vec![], vec![- 0.171_f32,- 0.173_f32, 0.0_f32], "avatar_mWing4FanRight"
|
||||
.to_owned(), true)], vec![- 0.181_f32,- 0.183_f32, 0.0_f32],
|
||||
"avatar_mWing3Right".to_owned(), true)], vec![- 0.168_f32,- 0.169_f32,
|
||||
0.067_f32], "avatar_mWing2Right".to_owned(), true)], vec![- 0.099_f32,-
|
||||
0.105_f32, 0.181_f32], "avatar_mWing1Right".to_owned(), false)], vec![-
|
||||
0.014_f32, 0.0_f32, 0.0_f32], "avatar_mWingsRoot".to_owned(), false)],
|
||||
vec![- 0.015368_f32, 0.0_f32, 0.204877_f32], "chest avatar_mChest"
|
||||
.to_owned(), true)], vec![0.015368_f32, 0.0_f32,- 0.204877_f32],
|
||||
"avatar_mSpine4".to_owned(), true)], vec![- 0.015368_f32, 0.0_f32,
|
||||
0.204877_f32], "avatar_mSpine3".to_owned(), true)], vec![0.0_f32,
|
||||
0.0_f32, 0.084073_f32], "abdomen avatar_mTorso".to_owned(), true)],
|
||||
vec![0.0_f32, 0.0_f32,- 0.084073_f32], "avatar_mSpine2".to_owned(),
|
||||
true)], vec![0.0_f32, 0.0_f32, 0.084073_f32], "avatar_mSpine1"
|
||||
.to_owned(), true), crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHipRight".to_owned(),
|
||||
vec![0.034_f32,- 0.129_f32,- 0.041_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Legs".to_owned(), "base".to_owned(),
|
||||
vec![- 0.001_f32, 0.049_f32,- 0.491_f32], true), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_UPPER_LEG".to_owned(), vec![-
|
||||
0.02_f32, 0.05_f32,- 0.22_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.09_f32, 0.09_f32, 0.32_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![0.0_f32, 0.0_f32,- 0.2_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mKneeRight".to_owned(), vec![-
|
||||
0.001_f32, 0.049_f32,- 0.491_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Legs".to_owned(), "base".to_owned(),
|
||||
vec![- 0.029_f32, 0.0_f32,- 0.469_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_LOWER_LEG".to_owned(), vec![-
|
||||
0.02_f32, 0.0_f32,- 0.2_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.06_f32, 0.06_f32, 0.25_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![- 0.01_f32, 0.0_f32,- 0.15_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mAnkleRight".to_owned(), vec![-
|
||||
0.029_f32, 0.0_f32,- 0.468_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Legs".to_owned(), "base".to_owned(),
|
||||
vec![0.112_f32, 0.0_f32,- 0.061_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("R_FOOT".to_owned(), vec![0.077_f32,
|
||||
0.0_f32,- 0.041_f32], vec![0.0_f32, 10.0_f32, 0.0_f32], vec![0.13_f32,
|
||||
0.05_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.089_f32, 0.0_f32,- 0.026_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFootRight".to_owned(),
|
||||
vec![0.112_f32,- 0.0_f32,- 0.061_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(),
|
||||
vec![0.105_f32,- 0.01_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mToeRight".to_owned(), vec![0.109_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(), vec![0.02_f32,
|
||||
0.0_f32, 0.0_f32], false), vec![], vec![], vec![0.105399_f32,-
|
||||
0.010408_f32,- 0.000104_f32], "avatar_mToeRight".to_owned(), false)],
|
||||
vec![0.111956_f32,- 0.0_f32,- 0.060637_f32], "avatar_mFootRight"
|
||||
.to_owned(), true)], vec![- 0.028869_f32, 0.0_f32,- 0.468494_f32],
|
||||
"rFoot avatar_mAnkleRight".to_owned(), true)], vec![- 0.00078_f32,
|
||||
0.048635_f32,- 0.490922_f32], "rShin avatar_mKneeRight".to_owned(),
|
||||
true)], vec![0.03362_f32,- 0.128806_f32,- 0.041086_f32],
|
||||
"rThigh avatar_mHipRight".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHipLeft".to_owned(), vec![0.034_f32,
|
||||
0.127_f32,- 0.041_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Legs".to_owned(), "base".to_owned(), vec![-
|
||||
0.001_f32,- 0.046_f32,- 0.491_f32], true), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_UPPER_LEG".to_owned(), vec![-
|
||||
0.02_f32,- 0.05_f32,- 0.22_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.09_f32, 0.09_f32, 0.32_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![0.0_f32, 0.0_f32,- 0.2_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mKneeLeft".to_owned(), vec![-
|
||||
0.001_f32,- 0.046_f32,- 0.491_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Legs".to_owned(), "base".to_owned(),
|
||||
vec![- 0.029_f32, 0.001_f32,- 0.469_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_LOWER_LEG".to_owned(), vec![-
|
||||
0.02_f32, 0.0_f32,- 0.2_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![0.06_f32, 0.06_f32, 0.25_f32], "Collision".to_owned(), "base"
|
||||
.to_owned(), vec![- 0.01_f32, 0.0_f32,- 0.15_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mAnkleLeft".to_owned(), vec![-
|
||||
0.029_f32, 0.001_f32,- 0.468_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Legs".to_owned(), "base".to_owned(),
|
||||
vec![0.112_f32, 0.0_f32,- 0.061_f32], false), vec![crate
|
||||
::skeleton::CollisionVolume::from_base(crate
|
||||
::skeleton::JointBase::from_parts("L_FOOT".to_owned(), vec![0.077_f32,
|
||||
0.0_f32,- 0.041_f32], vec![0.0_f32, 10.0_f32, 0.0_f32], vec![0.13_f32,
|
||||
0.05_f32, 0.05_f32], "Collision".to_owned(), "base".to_owned(),
|
||||
vec![0.089_f32, 0.0_f32,- 0.026_f32], true))], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mFootLeft".to_owned(),
|
||||
vec![0.112_f32,- 0.0_f32,- 0.061_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(),
|
||||
vec![0.105_f32, 0.008_f32, 0.001_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mToeLeft".to_owned(), vec![0.109_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Extra".to_owned(), "base".to_owned(), vec![0.02_f32,
|
||||
0.0_f32, 0.0_f32], false), vec![], vec![], vec![0.105387_f32,
|
||||
0.00827_f32, 0.000871_f32], "avatar_mToeLeft".to_owned(), false)],
|
||||
vec![0.111956_f32,- 0.0_f32,- 0.06062_f32], "avatar_mFootLeft"
|
||||
.to_owned(), true)], vec![- 0.028887_f32, 0.001378_f32,- 0.468449_f32],
|
||||
"lFoot avatar_mAnkleLeft".to_owned(), true)], vec![- 0.000887_f32,-
|
||||
0.045568_f32,- 0.491053_f32], "lShin avatar_mKneeLeft".to_owned(),
|
||||
true)], vec![0.033757_f32, 0.126765_f32,- 0.040998_f32],
|
||||
"lThigh avatar_mHipLeft".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTail1".to_owned(), vec![- 0.116_f32,
|
||||
0.0_f32, 0.047_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Tail".to_owned(), "extended".to_owned(), vec![-
|
||||
0.197_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTail2".to_owned(), vec![- 0.197_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Tail".to_owned(), "extended".to_owned(), vec![-
|
||||
0.168_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTail3".to_owned(), vec![- 0.168_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Tail".to_owned(), "extended".to_owned(), vec![-
|
||||
0.142_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTail4".to_owned(), vec![- 0.142_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Tail".to_owned(), "extended".to_owned(), vec![-
|
||||
0.112_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTail5".to_owned(), vec![- 0.112_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Tail".to_owned(), "extended".to_owned(), vec![-
|
||||
0.094_f32, 0.0_f32, 0.0_f32], true), vec![], vec![crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mTail6".to_owned(), vec![- 0.094_f32,
|
||||
0.0_f32, 0.0_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Tail".to_owned(), "extended".to_owned(), vec![-
|
||||
0.089_f32, 0.0_f32, 0.0_f32], true), vec![], vec![], vec![- 0.094_f32,
|
||||
0.0_f32, 0.0_f32], "avatar_mTail6".to_owned(), true)], vec![- 0.112_f32,
|
||||
0.0_f32, 0.0_f32], "avatar_mTail5".to_owned(), true)], vec![- 0.142_f32,
|
||||
0.0_f32, 0.0_f32], "avatar_mTail4".to_owned(), true)], vec![- 0.168_f32,
|
||||
0.0_f32, 0.0_f32], "avatar_mTail3".to_owned(), true)], vec![- 0.197_f32,
|
||||
0.0_f32, 0.0_f32], "avatar_mTail2".to_owned(), true)], vec![- 0.116_f32,
|
||||
0.0_f32, 0.047_f32], "avatar_mTail1".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mGroin".to_owned(), vec![0.064_f32,
|
||||
0.0_f32,- 0.097_f32], vec![0.0_f32, 0.0_f32, 0.0_f32], vec![1.0_f32,
|
||||
1.0_f32, 1.0_f32], "Groin".to_owned(), "extended".to_owned(),
|
||||
vec![0.004_f32, 0.0_f32,- 0.066_f32], false), vec![], vec![],
|
||||
vec![0.064_f32, 0.0_f32,- 0.097_f32], "avatar_mGroin".to_owned(), false),
|
||||
crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimbsRoot".to_owned(), vec![-
|
||||
0.2_f32, 0.0_f32, 0.084_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.204_f32, 0.0_f32, 0.0_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb1Left".to_owned(), vec![-
|
||||
0.204_f32, 0.129_f32,- 0.125_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![0.002_f32,- 0.046_f32,- 0.491_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb2Left".to_owned(),
|
||||
vec![0.002_f32,- 0.046_f32,- 0.491_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.03_f32,- 0.003_f32,- 0.468_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb3Left".to_owned(), vec![-
|
||||
0.03_f32,- 0.003_f32,- 0.468_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![0.112_f32, 0.0_f32,- 0.061_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb4Left".to_owned(),
|
||||
vec![0.112_f32, 0.0_f32,- 0.061_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![0.105_f32, 0.008_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.112_f32, 0.0_f32,- 0.061_f32], "avatar_mHindLimb4Left".to_owned(),
|
||||
true)], vec![- 0.03_f32,- 0.003_f32,- 0.468_f32], "avatar_mHindLimb3Left"
|
||||
.to_owned(), true)], vec![0.002_f32,- 0.046_f32,- 0.491_f32],
|
||||
"avatar_mHindLimb2Left".to_owned(), true)], vec![- 0.204_f32, 0.129_f32,-
|
||||
0.125_f32], "avatar_mHindLimb1Left".to_owned(), false), crate
|
||||
::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb1Right".to_owned(), vec![-
|
||||
0.204_f32,- 0.129_f32,- 0.125_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![0.002_f32, 0.046_f32,- 0.491_f32], true), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb2Right".to_owned(),
|
||||
vec![0.002_f32, 0.046_f32,- 0.491_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![- 0.03_f32, 0.003_f32,- 0.468_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb3Right".to_owned(), vec![-
|
||||
0.03_f32, 0.003_f32,- 0.468_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![0.112_f32, 0.0_f32,- 0.061_f32], false), vec![],
|
||||
vec![crate ::skeleton::Joint::from_parts(crate
|
||||
::skeleton::JointBase::from_parts("mHindLimb4Right".to_owned(),
|
||||
vec![0.112_f32, 0.0_f32,- 0.061_f32], vec![0.0_f32, 0.0_f32, 0.0_f32],
|
||||
vec![1.0_f32, 1.0_f32, 1.0_f32], "Limb".to_owned(), "extended"
|
||||
.to_owned(), vec![0.105_f32,- 0.008_f32, 0.0_f32], true), vec![], vec![],
|
||||
vec![0.112_f32, 0.0_f32,- 0.061_f32], "avatar_mHindLimb4Right"
|
||||
.to_owned(), true)], vec![- 0.03_f32, 0.003_f32,- 0.468_f32],
|
||||
"avatar_mHindLimb3Right".to_owned(), true)], vec![0.002_f32, 0.046_f32,-
|
||||
0.491_f32], "avatar_mHindLimb2Right".to_owned(), true)], vec![-
|
||||
0.204_f32,- 0.129_f32,- 0.125_f32], "avatar_mHindLimb1Right".to_owned(),
|
||||
false)], vec![- 0.2_f32, 0.0_f32, 0.084_f32], "avatar_mHindLimbsRoot"
|
||||
.to_owned(), false)
|
||||
],
|
||||
vec![0.0_f32, 0.0_f32, 1.067015_f32],
|
||||
"hip avatar_mPelvis".to_owned(),
|
||||
false,
|
||||
),
|
||||
2.0_f32,
|
||||
false,
|
||||
"133".to_owned(),
|
||||
"26".to_owned(),
|
||||
)
|
||||
}
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[test]
|
||||
fn generated_default_shape() {
|
||||
let skeleton = default_skeleton();
|
||||
assert_eq!(skeleton.version(), 2.0);
|
||||
assert_eq!(skeleton.num_bones(), "133");
|
||||
assert_eq!(skeleton.num_collision_volumes(), "26");
|
||||
assert_eq!(skeleton.bone().base.name(), "mPelvis");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user