From fe1656931c5aff2b6ac5a4f9662b7acd5233d6e3 Mon Sep 17 00:00:00 2001 From: Snowram Date: Wed, 3 Jun 2020 02:56:42 +0200 Subject: [PATCH] Add legs to quadruped_medium --- .../quadruped_medium_lateral_manifest.ron | 384 +++++++++++++++--- voxygen/src/anim/src/quadruped_medium/mod.rs | 45 +- .../audio/sfx/event_mapper/movement/mod.rs | 2 + voxygen/src/scene/figure/cache.rs | 24 +- voxygen/src/scene/figure/load.rs | 112 ++++- voxygen/src/scene/figure/mod.rs | 2 +- 6 files changed, 480 insertions(+), 89 deletions(-) diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron index ed7260aa95..a91a680737 100644 --- a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -1,288 +1,544 @@ ({ (Grolgar, Male): ( - left_front: ( + leg_lf: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.grolgar.male.leg_lf"), + ), + leg_rf: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.grolgar.male.leg_rf"), + ), + leg_lb: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.grolgar.male.leg_lb"), + ), + leg_rb: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.grolgar.male.leg_rb"), + ), + foot_lf: ( offset: (-2.5, -4.0, -1.5), lateral: ("npc.grolgar.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-2.5, -4.0, -1.5), lateral: ("npc.grolgar.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-2.5, -4.0, -3.0), lateral: ("npc.grolgar.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-2.5, -4.0, -3.0), lateral: ("npc.grolgar.male.foot_rb"), ), ), (Grolgar, Female): ( - left_front: ( + leg_lf: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.grolgar.female.leg_lf"), + ), + leg_rf: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.grolgar.female.leg_rf"), + ), + leg_lb: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.grolgar.female.leg_lb"), + ), + leg_rb: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.grolgar.female.leg_rb"), + ), + foot_lf: ( offset: (-2.5, -4.0, -1.5), lateral: ("npc.grolgar.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-2.5, -4.0, -1.5), lateral: ("npc.grolgar.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-2.5, -4.0, -3.0), lateral: ("npc.grolgar.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-2.5, -4.0, -3.0), lateral: ("npc.grolgar.female.foot_rb"), ), ), (Saber, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -4.0, -3.5), + lateral: ("npc.saber.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -4.0, -3.5), + lateral: ("npc.saber.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.saber.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.saber.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -4.0, -3.5), lateral: ("npc.saber.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -4.0, -3.5), lateral: ("npc.saber.male.foot_rb"), ), ), (Saber, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -4.0, -3.5), + lateral: ("npc.saber.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.saber.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.saber.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.saber.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -4.0, -3.5), lateral: ("npc.saber.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.saber.female.foot_rb"), ), ), (Viper, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.viper.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.viper.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.viper.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.viper.male.foot_rb"), ), ), (Viper, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.viper.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.viper.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.viper.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.viper.female.foot_rb"), ), ), (Tuskram, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -4.5), + lateral: ("npc.tuskram.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -4.5), + lateral: ("npc.tuskram.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -4.0, -5.5), + lateral: ("npc.tuskram.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -4.0, -5.5), + lateral: ("npc.tuskram.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -4.5), lateral: ("npc.tuskram.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -4.5), lateral: ("npc.tuskram.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -4.0, -5.5), lateral: ("npc.tuskram.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -4.0, -5.5), lateral: ("npc.tuskram.male.foot_rb"), ), ), (Tuskram, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -4.5), + lateral: ("npc.tuskram.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -4.5), + lateral: ("npc.tuskram.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -4.0, -5.5), + lateral: ("npc.tuskram.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -4.0, -5.5), + lateral: ("npc.tuskram.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -4.5), lateral: ("npc.tuskram.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -4.5), lateral: ("npc.tuskram.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -4.0, -5.5), lateral: ("npc.tuskram.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -4.0, -5.5), lateral: ("npc.tuskram.female.foot_rb"), ), ), (Alligator, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.alligator.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.alligator.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.alligator.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.alligator.male.foot_rb"), ), ), (Alligator, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.alligator.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.alligator.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.alligator.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.alligator.female.foot_rb"), ), ), (Monitor, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.monitor.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.monitor.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.monitor.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.monitor.male.foot_rb"), ), ), (Monitor, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.monitor.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.monitor.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.monitor.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.monitor.female.foot_rb"), ), ), (Lion, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.lion.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.lion.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.lion.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.lion.male.foot_rb"), ), ), (Lion, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.lion.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.lion.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.lion.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.lion.female.foot_rb"), ), ), (Tarasque, Male): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.male.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.male.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.male.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.male.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.tarasque.male.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.tarasque.male.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.tarasque.male.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.tarasque.male.foot_rb"), ), ), (Tarasque, Female): ( - left_front: ( + leg_lf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.female.leg_lf"), + ), + leg_rf: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.female.leg_rf"), + ), + leg_lb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.female.leg_lb"), + ), + leg_rb: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.female.leg_rb"), + ), + foot_lf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.tarasque.female.foot_lf"), ), - right_front: ( + foot_rf: ( offset: (-1.5, -1.5, -2.5), lateral: ("npc.tarasque.female.foot_rf"), ), - left_back: ( + foot_lb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.tarasque.female.foot_lb"), ), - right_back: ( + foot_rb: ( offset: (-1.5, -2.0, -3.5), lateral: ("npc.tarasque.female.foot_rb"), ), diff --git a/voxygen/src/anim/src/quadruped_medium/mod.rs b/voxygen/src/anim/src/quadruped_medium/mod.rs index bf65ab0750..febfc12325 100644 --- a/voxygen/src/anim/src/quadruped_medium/mod.rs +++ b/voxygen/src/anim/src/quadruped_medium/mod.rs @@ -18,6 +18,10 @@ pub struct QuadrupedMediumSkeleton { torso_back: Bone, torso_mid: Bone, ears: Bone, + leg_lf: Bone, + leg_rf: Bone, + leg_lb: Bone, + leg_rb: Bone, foot_lf: Bone, foot_rf: Bone, foot_lb: Bone, @@ -31,10 +35,7 @@ impl QuadrupedMediumSkeleton { impl Skeleton for QuadrupedMediumSkeleton { type Attr = SkeletonAttr; - #[cfg(feature = "use-dyn-lib")] - const COMPUTE_FN: &'static [u8] = b"quadruped_medium_compute_mats\0"; - - fn bone_count(&self) -> usize { 11 } + fn bone_count(&self) -> usize { 15 } #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_compute_mats")] fn compute_matrices_inner(&self) -> ([FigureBoneData; 16], Vec3) { @@ -51,15 +52,15 @@ impl Skeleton for QuadrupedMediumSkeleton { FigureBoneData::new(self.torso_back.compute_base_matrix()), FigureBoneData::new(torso_mid_mat), FigureBoneData::new(head_upper_mat * ears_mat), + FigureBoneData::new(self.leg_lf.compute_base_matrix()), + FigureBoneData::new(self.leg_rf.compute_base_matrix()), + FigureBoneData::new(self.leg_lb.compute_base_matrix()), + FigureBoneData::new(self.leg_rb.compute_base_matrix()), FigureBoneData::new(self.foot_lf.compute_base_matrix()), FigureBoneData::new(self.foot_rf.compute_base_matrix()), FigureBoneData::new(self.foot_lb.compute_base_matrix()), FigureBoneData::new(self.foot_rb.compute_base_matrix()), FigureBoneData::default(), - FigureBoneData::default(), - FigureBoneData::default(), - FigureBoneData::default(), - FigureBoneData::default(), ], Vec3::default(), ) @@ -73,6 +74,10 @@ impl Skeleton for QuadrupedMediumSkeleton { self.torso_back.interpolate(&target.torso_back, dt); self.torso_mid.interpolate(&target.torso_mid, dt); self.ears.interpolate(&target.ears, dt); + self.leg_lf.interpolate(&target.leg_lf, dt); + self.leg_rf.interpolate(&target.leg_rf, dt); + self.leg_lb.interpolate(&target.leg_lb, dt); + self.leg_rb.interpolate(&target.leg_rb, dt); self.foot_lf.interpolate(&target.foot_lf, dt); self.foot_rf.interpolate(&target.foot_rf, dt); self.foot_lb.interpolate(&target.foot_lb, dt); @@ -88,6 +93,8 @@ pub struct SkeletonAttr { torso_back: (f32, f32), torso_mid: (f32, f32), ears: (f32, f32), + leg_f: (f32, f32, f32), + leg_b: (f32, f32, f32), feet_f: (f32, f32, f32), feet_b: (f32, f32, f32), height: f32, @@ -114,6 +121,8 @@ impl Default for SkeletonAttr { torso_back: (0.0, 0.0), torso_mid: (0.0, 0.0), ears: (0.0, 0.0), + leg_f: (0.0, 0.0, 0.0), + leg_b: (0.0, 0.0, 0.0), feet_f: (0.0, 0.0, 0.0), feet_b: (0.0, 0.0, 0.0), height: (0.0), @@ -195,6 +204,26 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Lion, _) => (-2.0, 4.0), (Tarasque, _) => (1.5, -2.0), }, + leg_f: match (body.species, body.body_type) { + (Grolgar, _) => (5.0, 6.0, 2.0), + (Saber, _) => (4.0, 6.0, 3.0), + (Viper, _) => (4.0, 6.0, 3.0), + (Tuskram, _) => (4.0, 6.0, 4.5), + (Alligator, _) => (4.0, 6.0, 3.0), + (Monitor, _) => (4.0, 6.0, 3.0), + (Lion, _) => (5.0, 6.0, 3.0), + (Tarasque, _) => (4.0, 6.0, 3.0), + }, + leg_b: match (body.species, body.body_type) { + (Grolgar, _) => (5.0, -4.0, 3.0), + (Saber, _) => (4.0, -6.0, 3.5), + (Viper, _) => (4.0, -4.0, 3.5), + (Tuskram, _) => (4.0, -8.0, 5.5), + (Alligator, _) => (4.0, -4.0, 3.5), + (Monitor, _) => (4.0, -6.0, 3.5), + (Lion, _) => (5.5, -8.0, 3.5), + (Tarasque, _) => (4.0, -8.0, 3.5), + }, feet_f: match (body.species, body.body_type) { (Grolgar, _) => (5.0, 6.0, 2.0), (Saber, _) => (4.0, 6.0, 3.0), diff --git a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs index fd4263ed1b..a884066274 100644 --- a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs +++ b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs @@ -66,6 +66,7 @@ impl EventMapper for MovementEventMapper { Body::Humanoid(_) => Self::map_movement_event(character, physics, state, vel.0), Body::QuadrupedMedium(_) | Body::QuadrupedSmall(_) + | Body::QuadrupedLow(_) | Body::BirdMedium(_) | Body::BirdSmall(_) | Body::BipedLarge(_) => Self::map_non_humanoid_movement_event(physics, vel.0), @@ -190,6 +191,7 @@ impl MovementEventMapper { Body::Humanoid(_) => 0.9, Body::QuadrupedSmall(_) => 0.3, Body::QuadrupedMedium(_) => 0.7, + Body::QuadrupedLow(_) => 0.7, Body::BirdMedium(_) => 0.3, Body::BirdSmall(_) => 0.2, Body::BipedLarge(_) => 1.0, diff --git a/voxygen/src/scene/figure/cache.rs b/voxygen/src/scene/figure/cache.rs index e250e73795..9bab8b701a 100644 --- a/voxygen/src/scene/figure/cache.rs +++ b/voxygen/src/scene/figure/cache.rs @@ -295,6 +295,26 @@ impl FigureModelCache { body.body_type, generate_mesh, )), + Some(quadruped_medium_lateral_spec.mesh_leg_lf( + body.species, + body.body_type, + generate_mesh, + )), + Some(quadruped_medium_lateral_spec.mesh_leg_rf( + body.species, + body.body_type, + generate_mesh, + )), + Some(quadruped_medium_lateral_spec.mesh_leg_lb( + body.species, + body.body_type, + generate_mesh, + )), + Some(quadruped_medium_lateral_spec.mesh_leg_rb( + body.species, + body.body_type, + generate_mesh, + )), Some(quadruped_medium_lateral_spec.mesh_foot_lf( body.species, body.body_type, @@ -316,10 +336,6 @@ impl FigureModelCache { generate_mesh, )), None, - None, - None, - None, - None, ] }, Body::BirdMedium(body) => { diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index aa64fe2e8f..5913b31cd0 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -1231,10 +1231,14 @@ struct QuadrupedMediumCentralSubSpec { pub struct QuadrupedMediumLateralSpec(HashMap<(QMSpecies, QMBodyType), SidedQMLateralVoxSpec>); #[derive(Serialize, Deserialize)] struct SidedQMLateralVoxSpec { - left_front: QuadrupedMediumLateralSubSpec, - right_front: QuadrupedMediumLateralSubSpec, - left_back: QuadrupedMediumLateralSubSpec, - right_back: QuadrupedMediumLateralSubSpec, + leg_lf: QuadrupedMediumLateralSubSpec, + leg_rf: QuadrupedMediumLateralSubSpec, + leg_lb: QuadrupedMediumLateralSubSpec, + leg_rb: QuadrupedMediumLateralSubSpec, + foot_lf: QuadrupedMediumLateralSubSpec, + foot_rf: QuadrupedMediumLateralSubSpec, + foot_lb: QuadrupedMediumLateralSubSpec, + foot_rb: QuadrupedMediumLateralSubSpec, } #[derive(Serialize, Deserialize)] struct QuadrupedMediumLateralSubSpec { @@ -1434,9 +1438,9 @@ impl QuadrupedMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); }, }; - let lateral = graceful_load_segment(&spec.left_front.lateral.0); + let lateral = graceful_load_segment(&spec.foot_lf.lateral.0); - generate_mesh(&lateral, Vec3::from(spec.left_front.offset)) + generate_mesh(&lateral, Vec3::from(spec.foot_lf.offset)) } pub fn mesh_foot_rf( @@ -1455,9 +1459,9 @@ impl QuadrupedMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); }, }; - let lateral = graceful_load_segment(&spec.right_front.lateral.0); + let lateral = graceful_load_segment(&spec.foot_rf.lateral.0); - generate_mesh(&lateral, Vec3::from(spec.right_front.offset)) + generate_mesh(&lateral, Vec3::from(spec.foot_rf.offset)) } pub fn mesh_foot_lb( @@ -1476,9 +1480,9 @@ impl QuadrupedMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); }, }; - let lateral = graceful_load_segment(&spec.left_back.lateral.0); + let lateral = graceful_load_segment(&spec.foot_lb.lateral.0); - generate_mesh(&lateral, Vec3::from(spec.left_back.offset)) + generate_mesh(&lateral, Vec3::from(spec.foot_lb.offset)) } pub fn mesh_foot_rb( @@ -1497,9 +1501,93 @@ impl QuadrupedMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); }, }; - let lateral = graceful_load_segment(&spec.right_back.lateral.0); + let lateral = graceful_load_segment(&spec.foot_rb.lateral.0); - generate_mesh(&lateral, Vec3::from(spec.right_back.offset)) + generate_mesh(&lateral, Vec3::from(spec.foot_rb.offset)) + } + + pub fn mesh_leg_lf( + &self, + species: QMSpecies, + body_type: QMBodyType, + generate_mesh: impl FnOnce(&Segment, Vec3) -> Mesh, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); + }, + }; + let lateral = graceful_load_segment(&spec.leg_lf.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.leg_lf.offset)) + } + + pub fn mesh_leg_rf( + &self, + species: QMSpecies, + body_type: QMBodyType, + generate_mesh: impl FnOnce(&Segment, Vec3) -> Mesh, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); + }, + }; + let lateral = graceful_load_segment(&spec.leg_rf.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.leg_rf.offset)) + } + + pub fn mesh_leg_lb( + &self, + species: QMSpecies, + body_type: QMBodyType, + generate_mesh: impl FnOnce(&Segment, Vec3) -> Mesh, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); + }, + }; + let lateral = graceful_load_segment(&spec.leg_lb.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.leg_lb.offset)) + } + + pub fn mesh_leg_rb( + &self, + species: QMSpecies, + body_type: QMBodyType, + generate_mesh: impl FnOnce(&Segment, Vec3) -> Mesh, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); + }, + }; + let lateral = graceful_load_segment(&spec.leg_rb.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.leg_rb.offset)) } } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 4a8633cac7..712d8648d8 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -394,7 +394,7 @@ impl FigureMgr { .quadruped_medium_states .get(&entity) .map(|state| state.lpindex), - Body::QuadrupedLow(_) => self + Body::QuadrupedLow(_) => self .quadruped_low_states .get(&entity) .map(|state| state.lpindex),