From a7f5b90f0ee403f530115f8e007d0704a341be9a Mon Sep 17 00:00:00 2001 From: jshipsey Date: Tue, 13 Apr 2021 18:56:26 -0400 Subject: [PATCH] 2h/1h bug fix, staggers --- voxygen/anim/src/biped_large/mod.rs | 4 +- voxygen/anim/src/biped_large/stunned.rs | 435 ++++++++++++++++++++++ voxygen/anim/src/character/chargeswing.rs | 34 +- voxygen/anim/src/character/dash.rs | 27 +- voxygen/anim/src/character/spinmelee.rs | 36 +- voxygen/anim/src/character/staggered.rs | 223 ++++++----- voxygen/anim/src/character/stunned.rs | 224 ++++++----- voxygen/src/scene/figure/mod.rs | 36 ++ 8 files changed, 785 insertions(+), 234 deletions(-) create mode 100644 voxygen/anim/src/biped_large/stunned.rs diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index d277b5dc38..4cc4b49c65 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -13,6 +13,7 @@ pub mod shockwave; pub mod shoot; pub mod spin; pub mod spinmelee; +pub mod stunned; pub mod summon; pub mod wield; @@ -22,7 +23,8 @@ pub use self::{ charge::ChargeAnimation, dash::DashAnimation, equip::EquipAnimation, idle::IdleAnimation, jump::JumpAnimation, leapmelee::LeapAnimation, run::RunAnimation, shockwave::ShockwaveAnimation, shoot::ShootAnimation, spin::SpinAnimation, - spinmelee::SpinMeleeAnimation, summon::SummonAnimation, wield::WieldAnimation, + spinmelee::SpinMeleeAnimation, stunned::StunnedAnimation, summon::SummonAnimation, + wield::WieldAnimation, }; use super::{make_bone, vek::*, FigureBoneData, Skeleton}; diff --git a/voxygen/anim/src/biped_large/stunned.rs b/voxygen/anim/src/biped_large/stunned.rs new file mode 100644 index 0000000000..8cc8a838b5 --- /dev/null +++ b/voxygen/anim/src/biped_large/stunned.rs @@ -0,0 +1,435 @@ +use super::{ + super::{vek::*, Animation}, + BipedLargeSkeleton, SkeletonAttr, +}; +use common::{ + comp::item::{ToolKind, UniqueKind}, + states::utils::StageSection, +}; +use std::{f32::consts::PI, ops::Mul}; + +pub struct StunnedAnimation; + +impl Animation for StunnedAnimation { + type Dependency = ( + Option, + Option, + Vec3, + f32, + f32, + Option, + ); + type Skeleton = BipedLargeSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"biped_large_stunned\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_stunned")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (active_tool_kind, _second_tool_kind, velocity, global_time, acc_vel, stage_section): Self::Dependency, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + let speed = Vec2::::from(velocity).magnitude(); + + let lab: f32 = 0.65 * s_a.tempo; //.65 + + let (movement1base, movement2) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0), + Some(StageSection::Recover) => (1.0, anim_time.powf(4.0)), + _ => (0.0, 0.0), + }; + let pullback = 1.0 - movement2; + let movement1 = movement1base * pullback; + let torso = (anim_time * lab + 1.5 * PI).sin(); + let speednorm = (speed / 12.0).powf(0.4); + let foothoril = (acc_vel * lab + PI * 1.45).sin() * speednorm; + let foothorir = (acc_vel * lab + PI * (0.45)).sin() * speednorm; + let footrotl = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 1.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab + PI * 1.4).sin()); + + let footrotr = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 0.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab + PI * 0.4).sin()); + let slower = (anim_time * 1.0 + PI).sin(); + let slow = (anim_time * 3.5 + PI).sin(); + + let tailmove = Vec2::new( + (global_time / 2.0 + anim_time / 2.0) + .floor() + .mul(7331.0) + .sin() + * 0.25, + (global_time / 2.0 + anim_time / 2.0) + .floor() + .mul(1337.0) + .sin() + * 0.125, + ); + + let look = Vec2::new( + (global_time / 2.0 + anim_time / 8.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + (global_time / 2.0 + anim_time / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + + let breathe = if s_a.beast { + // Controls for the beast breathing + let intensity = 0.04; + let lenght = 1.5; + let chop = 0.2; + let chop_freq = 60.0; + intensity * (lenght * anim_time).sin() + + 0.05 * chop * (anim_time * chop_freq).sin() * (anim_time * lenght).cos() + } else { + 0.0 + }; + + let footvertl = (anim_time * 16.0 * lab).sin(); + let footvertr = (anim_time * 16.0 * lab + PI).sin(); + let handhoril = (anim_time * 16.0 * lab + PI * 1.4).sin(); + let handhorir = (anim_time * 16.0 * lab + PI * 0.4).sin(); + + let short = (acc_vel * lab).sin() * speednorm; + + let shortalt = (anim_time * lab * 16.0 + PI / 2.0).sin(); + + if s_a.beast { + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + } else { + next.jaw.position = Vec3::new(0.0, s_a.jaw.0 - slower * 0.12, s_a.jaw.1 + slow * 0.2); + + next.hold.scale = Vec3::one() * 0.0; + + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_x(0.0); + + next.hand_l.position = Vec3::new(s_a.grip.1, 0.0, s_a.grip.0); + next.hand_r.position = Vec3::new(-s_a.grip.1, 0.0, s_a.grip.0); + + next.hand_l.orientation = Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_x(0.0); + + if speed > 0.5 { + next.shoulder_l.position = Vec3::new( + -s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.0, + ); + next.shoulder_l.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotr * -0.2) * speednorm); + + next.shoulder_r.position = Vec3::new( + s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.0, + ); + next.shoulder_r.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotl * -0.2) * speednorm); + } else { + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1) * 1.02; + next.head.orientation = Quaternion::rotation_z(look.x * 0.6 + movement1 * 1.0) + * Quaternion::rotation_x(look.y * 0.6); + + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + torso * -0.5); + next.upper_torso.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + + next.lower_torso.position = + Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1 + torso * 0.5); + next.lower_torso.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.lower_torso.scale = Vec3::one() * 1.02; + + next.jaw.position = + Vec3::new(0.0, s_a.jaw.0 - slower * 0.12, s_a.jaw.1 + slow * 0.2); + next.jaw.orientation = Quaternion::rotation_x(-0.1 + breathe * 2.0); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_z(0.0 + slow * 0.2 + tailmove.x) + * Quaternion::rotation_x(0.0); + + next.shoulder_l.position = + Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_l.orientation = + Quaternion::rotation_y(0.0) * Quaternion::rotation_x(0.3); + + next.shoulder_r.position = + Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_r.orientation = + Quaternion::rotation_y(0.0) * Quaternion::rotation_x(0.3); + } + match active_tool_kind { + Some(ToolKind::SwordSimple) => { + next.control_l.position = Vec3::new(-1.0, 1.0, 1.0); + next.control_r.position = Vec3::new(0.0, 2.0, -3.0); + + next.control.position = Vec3::new( + -3.0, + 5.0 + s_a.grip.0 / 1.2, + -4.0 + -s_a.grip.0 / 2.0 + short * -1.5, + ); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.2); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.2) + * Quaternion::rotation_y(0.2) + * Quaternion::rotation_z(0.0); + + next.control.orientation = + Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(-0.1); + }, + Some(ToolKind::BowSimple) | Some(ToolKind::Bow) => { + next.control_l.position = Vec3::new(-1.0, -2.0, -3.0); + next.control_r.position = Vec3::new(0.0, 4.0, 1.0); + + next.control.position = Vec3::new( + -1.0, + 6.0 + s_a.grip.0 / 1.2, + -5.0 + -s_a.grip.0 / 2.0 + short * -1.5, + ); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.2); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.2) + * Quaternion::rotation_y(0.2) + * Quaternion::rotation_z(0.0); + + next.control.orientation = Quaternion::rotation_x(-0.2 + short * 0.2) + * Quaternion::rotation_y(1.0) + * Quaternion::rotation_z(-0.3); + }, + Some(ToolKind::HammerSimple) | Some(ToolKind::AxeSimple) => { + next.control_l.position = Vec3::new(-1.0, 2.0, 12.0); + next.control_r.position = Vec3::new(1.0, 2.0, -2.0); + + next.control.position = Vec3::new( + 4.0, + 0.0 + s_a.grip.0 / 1.0, + -s_a.grip.0 / 0.8 + short * -1.5, + ); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.0); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.0 + 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + + next.control.orientation = + Quaternion::rotation_x(-1.0 + short * 0.2) * Quaternion::rotation_y(-1.8); + }, + Some(ToolKind::StaffSimple) + | Some(ToolKind::Unique(UniqueKind::MindflayerStaff)) => { + next.control_l.position = Vec3::new(-1.0, 3.0, 12.0); + next.control_r.position = Vec3::new(1.0, 2.0, 2.0); + + next.control.position = Vec3::new( + -3.0, + 3.0 + s_a.grip.0 / 1.2, + -11.0 + -s_a.grip.0 / 2.0 + short * -1.5, + ); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.5); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.5) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(0.0); + + next.control.orientation = + Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(-0.1); + }, + Some(ToolKind::Unique(UniqueKind::WendigoMagic)) => { + next.control_l.position = Vec3::new(-9.0, 19.0, -13.0); + next.control_r.position = Vec3::new(9.0, 19.0, -13.0); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 3.0) * Quaternion::rotation_y(-0.15); + next.control_r.orientation = + Quaternion::rotation_x(PI / 3.0) * Quaternion::rotation_y(0.15); + }, + Some(ToolKind::Unique(UniqueKind::TidalClaws)) => { + next.control_l.position = Vec3::new(-14.0, 12.0, -12.0); + next.control_r.position = Vec3::new(14.0, 12.0, -12.0); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 3.0) * Quaternion::rotation_y(-0.15); + next.control_r.orientation = + Quaternion::rotation_x(PI / 3.0) * Quaternion::rotation_y(0.15); + }, + Some(ToolKind::Unique(UniqueKind::BeastClaws)) => { + next.shoulder_l.position = + Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + + next.shoulder_r.position = + Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + + next.hand_l.position = + Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2 + torso * 0.6); + + next.hand_r.position = + Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2 + torso * 0.6); + + if speed < 0.5 { + next.head.position = + Vec3::new(0.0, s_a.head.0, s_a.head.1 + torso * 0.2) * 1.02; + next.head.orientation = Quaternion::rotation_z(look.x * 0.6) + * Quaternion::rotation_x(look.y * 0.6); + + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + torso * 0.5); + + next.lower_torso.position = + Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1 + torso * 0.15); + + next.jaw.orientation = Quaternion::rotation_x(-0.1); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_z(slow * 0.2 + tailmove.x); + + next.second.orientation = Quaternion::rotation_x(PI); + + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_y(0.0); + + next.shoulder_l.position = + Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + + next.hand_l.position = + Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2 + torso * 0.6); + + next.hand_r.position = + Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2 + torso * 0.6); + + next.leg_l.position = + Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 + torso * 0.2); + next.leg_l.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + + next.leg_r.position = + Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 + torso * 0.2); + next.leg_r.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + } else { + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1) * 1.02; + next.head.orientation = + Quaternion::rotation_z(short * -0.18) * Quaternion::rotation_x(-0.05); + next.head.scale = Vec3::one() * 1.02; + + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + shortalt * -1.5); + next.upper_torso.orientation = Quaternion::rotation_z(short * 0.18); + + next.lower_torso.position = + Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1); + next.lower_torso.orientation = + Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); + next.lower_torso.scale = Vec3::one() * 1.02; + + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(0.0); + next.jaw.scale = Vec3::one() * 1.02; + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(shortalt * 0.3); + + next.second.position = Vec3::new(0.0, 0.0, 0.0); + next.second.orientation = Quaternion::rotation_x(PI) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.second.scale = Vec3::one() * 0.0; + + next.control.position = Vec3::new(0.0, 0.0, 0.0); + next.control.orientation = Quaternion::rotation_z(0.0); + + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_y(0.0); + + next.shoulder_l.position = Vec3::new( + -s_a.shoulder.0, + s_a.shoulder.1 + foothoril * -3.0, + s_a.shoulder.2, + ); + next.shoulder_l.orientation = Quaternion::rotation_x(footrotl * -0.36) + * Quaternion::rotation_y(0.1) + * Quaternion::rotation_z(footrotl * 0.3); + + next.shoulder_r.position = Vec3::new( + s_a.shoulder.0, + s_a.shoulder.1 + foothorir * -3.0, + s_a.shoulder.2, + ); + next.shoulder_r.orientation = Quaternion::rotation_x(footrotr * -0.36) + * Quaternion::rotation_y(-0.1) + * Quaternion::rotation_z(footrotr * -0.3); + + next.hand_l.position = Vec3::new( + -1.0 + -s_a.hand.0, + s_a.hand.1 + foothoril * -4.0, + s_a.hand.2 + foothoril * 1.0, + ); + next.hand_l.orientation = + Quaternion::rotation_x(0.15 + (handhoril * -1.2).max(-0.3)) + * Quaternion::rotation_y(handhoril * -0.1); + + next.hand_r.position = Vec3::new( + 1.0 + s_a.hand.0, + s_a.hand.1 + foothorir * -4.0, + s_a.hand.2 + foothorir * 1.0, + ); + next.hand_r.orientation = + Quaternion::rotation_x(0.15 + (handhorir * -1.2).max(-0.3)) + * Quaternion::rotation_y(handhorir * 0.1); + next.hand_r.scale = Vec3::one() * 1.04; + + next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2) * 0.98; + next.leg_l.orientation = Quaternion::rotation_z(short * 0.18) + * Quaternion::rotation_x(foothoril * 0.3); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2) * 0.98; + + next.leg_r.orientation = Quaternion::rotation_z(short * 0.18) + * Quaternion::rotation_x(foothorir * 0.3); + + next.foot_l.position = Vec3::new( + -s_a.foot.0, + s_a.foot.1 + foothoril * 8.5, + s_a.foot.2 + ((footvertl * 6.5).max(0.0)), + ); + next.foot_l.orientation = Quaternion::rotation_x(-0.5 + footrotl * 0.85); + + next.foot_r.position = Vec3::new( + s_a.foot.0, + s_a.foot.1 + foothorir * 8.5, + s_a.foot.2 + ((footvertr * 6.5).max(0.0)), + ); + next.foot_r.orientation = Quaternion::rotation_x(-0.5 + footrotr * 0.85); + + next.torso.orientation = Quaternion::rotation_x(-0.25); + } + }, + _ => {}, + } + }; + + if s_a.float { + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + slower * 1.0 + 4.0, + ); + next.foot_l.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + next.foot_r.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + } + + next + } +} diff --git a/voxygen/anim/src/character/chargeswing.rs b/voxygen/anim/src/character/chargeswing.rs index eb399f7560..46f8ac321f 100644 --- a/voxygen/anim/src/character/chargeswing.rs +++ b/voxygen/anim/src/character/chargeswing.rs @@ -109,30 +109,26 @@ impl Animation for ChargeswingAnimation { }; match hands { - (Some(Hands::One), Some(Hands::One)) | (Some(Hands::One), None) => { - match ability_info.and_then(|a| a.tool) { - Some(ToolKind::Hammer) | Some(ToolKind::HammerSimple) => { - next.control_l.position = Vec3::new( - -7.0 + move1 * 4.0, - 8.0 + move1 * 2.0 + move2 * 4.0, - 2.0 + move1 * -1.0 + slowrise * 20.0, - ); - next.control_l.orientation = Quaternion::rotation_x(-0.3 + move2 * -1.0) - * Quaternion::rotation_y( - tension * 0.07 + move1 * -1.2 + slowrise * 0.5, - ) - * Quaternion::rotation_z(move2 * 1.0); - next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); - next.hand_l.orientation = Quaternion::rotation_x(1.57) - }, + (Some(Hands::One), _) => match ability_info.and_then(|a| a.tool) { + Some(ToolKind::Hammer) | Some(ToolKind::HammerSimple) => { + next.control_l.position = Vec3::new( + -7.0 + move1 * 4.0, + 8.0 + move1 * 2.0 + move2 * 4.0, + 2.0 + move1 * -1.0 + slowrise * 20.0, + ); + next.control_l.orientation = Quaternion::rotation_x(-0.3 + move2 * -1.0) + * Quaternion::rotation_y(tension * 0.07 + move1 * -1.2 + slowrise * 0.5) + * Quaternion::rotation_z(move2 * 1.0); + next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57) + }, - _ => {}, - } + _ => {}, }, (_, _) => {}, }; match hands { - (Some(Hands::One), Some(Hands::One)) | (None, Some(Hands::One)) => { + (None | Some(Hands::One), Some(Hands::One)) => { match ability_info.and_then(|a| a.tool) { Some(ToolKind::Hammer) | Some(ToolKind::HammerSimple) => { next.control_r.position = Vec3::new( diff --git a/voxygen/anim/src/character/dash.rs b/voxygen/anim/src/character/dash.rs index 163a39067f..7f1d692ea3 100644 --- a/voxygen/anim/src/character/dash.rs +++ b/voxygen/anim/src/character/dash.rs @@ -115,26 +115,23 @@ impl Animation for DashAnimation { }; match hands { - (Some(Hands::One), Some(Hands::One)) | (Some(Hands::One), None) => { - match ability_info.and_then(|a| a.tool) { - Some(ToolKind::Sword) | Some(ToolKind::SwordSimple) => { - next.control_l.position = - Vec3::new(-7.0, 8.0 + move3 * 5.0, 2.0 + move1 * 4.0); - next.control_l.orientation = - Quaternion::rotation_x(-0.3 + move2 * 1.0 + move3 * 1.0) - * Quaternion::rotation_y(move1 * -1.2 + move3 * -1.5) - * Quaternion::rotation_z(move2 * 1.0 + move3 * 1.5); - next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); - next.hand_l.orientation = Quaternion::rotation_x(1.57) - }, + (Some(Hands::One), _) => match ability_info.and_then(|a| a.tool) { + Some(ToolKind::Sword) | Some(ToolKind::SwordSimple) => { + next.control_l.position = Vec3::new(-7.0, 8.0 + move3 * 5.0, 2.0 + move1 * 4.0); + next.control_l.orientation = + Quaternion::rotation_x(-0.3 + move2 * 1.0 + move3 * 1.0) + * Quaternion::rotation_y(move1 * -1.2 + move3 * -1.5) + * Quaternion::rotation_z(move2 * 1.0 + move3 * 1.5); + next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57) + }, - _ => {}, - } + _ => {}, }, (_, _) => {}, }; match hands { - (Some(Hands::One), Some(Hands::One)) | (None, Some(Hands::One)) => { + (None | Some(Hands::One), Some(Hands::One)) => { match ability_info.and_then(|a| a.tool) { Some(ToolKind::Sword) | Some(ToolKind::SwordSimple) => { next.control_r.position = Vec3::new( diff --git a/voxygen/anim/src/character/spinmelee.rs b/voxygen/anim/src/character/spinmelee.rs index 51f5994d17..4466152af4 100644 --- a/voxygen/anim/src/character/spinmelee.rs +++ b/voxygen/anim/src/character/spinmelee.rs @@ -144,30 +144,28 @@ impl Animation for SpinMeleeAnimation { (_, _) => {}, }; match hands { - (Some(Hands::One), Some(Hands::One)) | (Some(Hands::One), None) => { - match ability_info.and_then(|a| a.tool) { - Some(ToolKind::Sword) => { - next.control_l.position = Vec3::new(-7.0, 8.0, 2.0); - next.control_l.orientation = Quaternion::rotation_x(-0.3 + move1 * -0.5) - * Quaternion::rotation_z(move1 * 1.57); - next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); - next.hand_l.orientation = Quaternion::rotation_x(1.57) - }, - Some(ToolKind::Axe) => { - next.control_l.position = Vec3::new(-7.0, 8.0, 2.0); - next.control_l.orientation = Quaternion::rotation_x(-0.3 + move1 * -1.3) - * Quaternion::rotation_z(move1 * -1.57); - next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); - next.hand_l.orientation = Quaternion::rotation_x(1.57) - }, + (Some(Hands::One), _) => match ability_info.and_then(|a| a.tool) { + Some(ToolKind::Sword) => { + next.control_l.position = Vec3::new(-7.0, 8.0, 2.0); + next.control_l.orientation = Quaternion::rotation_x(-0.3 + move1 * -0.5) + * Quaternion::rotation_z(move1 * 1.57); + next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57) + }, + Some(ToolKind::Axe) => { + next.control_l.position = Vec3::new(-7.0, 8.0, 2.0); + next.control_l.orientation = Quaternion::rotation_x(-0.3 + move1 * -1.3) + * Quaternion::rotation_z(move1 * -1.57); + next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57) + }, - _ => {}, - } + _ => {}, }, (_, _) => {}, }; match hands { - (Some(Hands::One), Some(Hands::One)) | (None, Some(Hands::One)) => { + (None | Some(Hands::One), Some(Hands::One)) => { match ability_info.and_then(|a| a.tool) { Some(ToolKind::Sword) => { next.control_r.position = Vec3::new(7.0, 8.0, 2.0 + move1 * 10.0); diff --git a/voxygen/anim/src/character/staggered.rs b/voxygen/anim/src/character/staggered.rs index 96233722f1..967d4c1ce7 100644 --- a/voxygen/anim/src/character/staggered.rs +++ b/voxygen/anim/src/character/staggered.rs @@ -2,20 +2,25 @@ use super::{ super::{vek::*, Animation}, CharacterSkeleton, SkeletonAttr, }; -use common::{comp::item::ToolKind, states::utils::StageSection}; +use common::{ + comp::item::{Hands, ToolKind}, + states::utils::StageSection, +}; pub struct StaggeredAnimation; +type StaggeredAnimationDependency = ( + Option, + Option, + (Option, Option), + f32, + f32, + Option, + f32, + bool, +); impl Animation for StaggeredAnimation { - type Dependency = ( - Option, - Option, - f32, - f32, - Option, - f32, - bool, - ); + type Dependency = StaggeredAnimationDependency; type Skeleton = CharacterSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -28,6 +33,7 @@ impl Animation for StaggeredAnimation { ( active_tool_kind, _second_tool_kind, + hands, _velocity, global_time, stage_section, @@ -67,89 +73,126 @@ impl Animation for StaggeredAnimation { if wield_status { next.main.position = Vec3::new(0.0, 0.0, 0.0); next.main.orientation = Quaternion::rotation_x(0.0); - match active_tool_kind { - Some(ToolKind::Sword) => { - next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2); + match hands { + (Some(Hands::Two), _) => match active_tool_kind { + Some(ToolKind::Sword) | Some(ToolKind::SwordSimple) => { + next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4); + next.hand_r.position = Vec3::new(s_a.shr.0, s_a.shr.1, s_a.shr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.shr.3) * Quaternion::rotation_y(s_a.shr.4); + + next.control.position = Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2); + next.control.orientation = Quaternion::rotation_x(s_a.sc.3); + }, + Some(ToolKind::Axe) => { + next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.ahl.3) * Quaternion::rotation_y(s_a.ahl.4); + next.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1, s_a.ahr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.ahr.3) * Quaternion::rotation_z(s_a.ahr.5); + + next.control.position = Vec3::new(s_a.ac.0, s_a.ac.1, s_a.ac.2); + next.control.orientation = Quaternion::rotation_x(s_a.ac.3) + * Quaternion::rotation_y(s_a.ac.4) + * Quaternion::rotation_z(s_a.ac.5); + }, + Some(ToolKind::Hammer | ToolKind::Pick) => { + next.hand_l.position = Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.hhl.3) * Quaternion::rotation_y(s_a.hhl.4); + next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.hhr.3) * Quaternion::rotation_y(s_a.hhr.4); + + next.control.position = Vec3::new(s_a.hc.0, s_a.hc.1, s_a.hc.2); + next.control.orientation = Quaternion::rotation_x(s_a.hc.3) + * Quaternion::rotation_y(s_a.hc.4) + * Quaternion::rotation_z(s_a.hc.5); + }, + Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { + next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); + + next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); + + next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); + next.hand_l.orientation = Quaternion::rotation_x(s_a.sthl.3); + + next.control.orientation = Quaternion::rotation_x(s_a.stc.3) + * Quaternion::rotation_y(s_a.stc.4) + * Quaternion::rotation_z(s_a.stc.5); + }, + Some(ToolKind::Bow) => { + next.hand_l.position = Vec3::new(s_a.bhl.0, s_a.bhl.1, s_a.bhl.2); + next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3); + next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); + next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3); + + next.hold.position = Vec3::new(0.0, -1.0, -5.2); + next.hold.orientation = Quaternion::rotation_x(-1.57); + next.hold.scale = Vec3::one() * 1.0; + + next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2); + next.control.orientation = + Quaternion::rotation_y(s_a.bc.4) * Quaternion::rotation_z(s_a.bc.5); + }, + Some(ToolKind::Debug) => { + next.hand_l.position = Vec3::new(-7.0, 4.0, 3.0); + next.hand_l.orientation = Quaternion::rotation_x(1.27); + next.main.position = Vec3::new(-5.0, 5.0, 23.0); + next.main.orientation = Quaternion::rotation_x(3.14); + }, + Some(ToolKind::Farming) => { + next.hand_l.position = Vec3::new(9.0, 1.0, 1.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57); + next.hand_r.position = Vec3::new(9.0, 1.0, 11.0); + next.hand_r.orientation = Quaternion::rotation_x(1.57); + next.main.position = Vec3::new(7.5, 7.5, 13.2); + next.main.orientation = Quaternion::rotation_y(3.14); + + next.control.position = Vec3::new(-11.0, 1.8, 4.0); + }, + _ => {}, + }, + (_, _) => {}, + }; + match hands { + (Some(Hands::One), _) => { + next.control_l.position = Vec3::new(-7.0, 8.0, 2.0); + next.control_l.orientation = Quaternion::rotation_x(-0.3); + next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57) + }, + (_, _) => {}, + }; + match hands { + (None | Some(Hands::One), Some(Hands::One)) => { + next.control_r.position = Vec3::new(7.0, 8.0, 2.0); + next.control_r.orientation = Quaternion::rotation_x(-0.3); + next.hand_r.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_r.orientation = Quaternion::rotation_x(1.57) + }, + (_, _) => {}, + }; + match hands { + (None, None) | (None, Some(Hands::One)) => { + next.hand_l.position = Vec3::new(-4.5, 8.0, 5.0); next.hand_l.orientation = - Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4); - next.hand_r.position = Vec3::new(s_a.shr.0, s_a.shr.1, s_a.shr.2); + Quaternion::rotation_x(1.9) * Quaternion::rotation_y(-0.5) + }, + (_, _) => {}, + }; + match hands { + (None, None) | (Some(Hands::One), None) => { + next.hand_r.position = Vec3::new(4.5, 8.0, 5.0); next.hand_r.orientation = - Quaternion::rotation_x(s_a.shr.3) * Quaternion::rotation_y(s_a.shr.4); - - next.control.position = Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2); - next.control.orientation = Quaternion::rotation_x(s_a.sc.3); + Quaternion::rotation_x(1.9) * Quaternion::rotation_y(0.5) }, - Some(ToolKind::Axe) => { - next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.ahl.3) * Quaternion::rotation_y(s_a.ahl.4); - next.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1, s_a.ahr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.ahr.3) * Quaternion::rotation_z(s_a.ahr.5); - - next.control.position = Vec3::new(s_a.ac.0, s_a.ac.1, s_a.ac.2); - next.control.orientation = Quaternion::rotation_x(s_a.ac.3) - * Quaternion::rotation_y(s_a.ac.4) - * Quaternion::rotation_z(s_a.ac.5); - }, - Some(ToolKind::Hammer | ToolKind::Pick) => { - next.hand_l.position = Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.hhl.3) * Quaternion::rotation_y(s_a.hhl.4); - next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.hhr.3) * Quaternion::rotation_y(s_a.hhr.4); - - next.control.position = Vec3::new(s_a.hc.0, s_a.hc.1, s_a.hc.2); - next.control.orientation = Quaternion::rotation_x(s_a.hc.3) - * Quaternion::rotation_y(s_a.hc.4) - * Quaternion::rotation_z(s_a.hc.5); - }, - Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { - next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); - - next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); - - next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.sthl.3); - - next.control.orientation = Quaternion::rotation_x(s_a.stc.3) - * Quaternion::rotation_y(s_a.stc.4) - * Quaternion::rotation_z(s_a.stc.5); - }, - Some(ToolKind::Bow) => { - next.hand_l.position = Vec3::new(s_a.bhl.0, s_a.bhl.1, s_a.bhl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3); - next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); - next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3); - - next.hold.position = Vec3::new(0.0, -1.0, -5.2); - next.hold.orientation = Quaternion::rotation_x(-1.57); - next.hold.scale = Vec3::one() * 1.0; - - next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2); - next.control.orientation = - Quaternion::rotation_y(s_a.bc.4) * Quaternion::rotation_z(s_a.bc.5); - }, - Some(ToolKind::Debug) => { - next.hand_l.position = Vec3::new(-7.0, 4.0, 3.0); - next.hand_l.orientation = Quaternion::rotation_x(1.27); - next.main.position = Vec3::new(-5.0, 5.0, 23.0); - next.main.orientation = Quaternion::rotation_x(3.14); - }, - Some(ToolKind::Farming) => { - next.hand_l.position = Vec3::new(9.0, 1.0, 1.0); - next.hand_l.orientation = Quaternion::rotation_x(1.57); - next.hand_r.position = Vec3::new(9.0, 1.0, 11.0); - next.hand_r.orientation = Quaternion::rotation_x(1.57); - next.main.position = Vec3::new(7.5, 7.5, 13.2); - next.main.orientation = Quaternion::rotation_y(3.14); - - next.control.position = Vec3::new(-11.0, 1.8, 4.0); - }, - _ => {}, + (_, _) => {}, } } else if mirror > 0.0 { next.hand_r.position = Vec3::new( diff --git a/voxygen/anim/src/character/stunned.rs b/voxygen/anim/src/character/stunned.rs index bbb7fa980d..56e68dfab0 100644 --- a/voxygen/anim/src/character/stunned.rs +++ b/voxygen/anim/src/character/stunned.rs @@ -2,20 +2,25 @@ use super::{ super::{vek::*, Animation}, CharacterSkeleton, SkeletonAttr, }; -use common::{comp::item::ToolKind, states::utils::StageSection}; +use common::{ + comp::item::{Hands, ToolKind}, + states::utils::StageSection, +}; pub struct StunnedAnimation; +type StunnedAnimationDependency = ( + Option, + Option, + (Option, Option), + f32, + f32, + Option, + f32, + bool, +); impl Animation for StunnedAnimation { - type Dependency = ( - Option, - Option, - f32, - f32, - Option, - f32, - bool, - ); + type Dependency = StunnedAnimationDependency; type Skeleton = CharacterSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -28,6 +33,7 @@ impl Animation for StunnedAnimation { ( active_tool_kind, _second_tool_kind, + hands, _velocity, global_time, stage_section, @@ -65,89 +71,127 @@ impl Animation for StunnedAnimation { if wield_status { next.main.position = Vec3::new(0.0, 0.0, 0.0); next.main.orientation = Quaternion::rotation_x(0.0); - match active_tool_kind { - Some(ToolKind::Sword) => { - next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2); + + match hands { + (Some(Hands::Two), _) => match active_tool_kind { + Some(ToolKind::Sword) | Some(ToolKind::SwordSimple) => { + next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4); + next.hand_r.position = Vec3::new(s_a.shr.0, s_a.shr.1, s_a.shr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.shr.3) * Quaternion::rotation_y(s_a.shr.4); + + next.control.position = Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2); + next.control.orientation = Quaternion::rotation_x(s_a.sc.3); + }, + Some(ToolKind::Axe) => { + next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.ahl.3) * Quaternion::rotation_y(s_a.ahl.4); + next.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1, s_a.ahr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.ahr.3) * Quaternion::rotation_z(s_a.ahr.5); + + next.control.position = Vec3::new(s_a.ac.0, s_a.ac.1, s_a.ac.2); + next.control.orientation = Quaternion::rotation_x(s_a.ac.3) + * Quaternion::rotation_y(s_a.ac.4) + * Quaternion::rotation_z(s_a.ac.5); + }, + Some(ToolKind::Hammer | ToolKind::Pick) => { + next.hand_l.position = Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.hhl.3) * Quaternion::rotation_y(s_a.hhl.4); + next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.hhr.3) * Quaternion::rotation_y(s_a.hhr.4); + + next.control.position = Vec3::new(s_a.hc.0, s_a.hc.1, s_a.hc.2); + next.control.orientation = Quaternion::rotation_x(s_a.hc.3) + * Quaternion::rotation_y(s_a.hc.4) + * Quaternion::rotation_z(s_a.hc.5); + }, + Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { + next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); + + next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); + + next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); + next.hand_l.orientation = Quaternion::rotation_x(s_a.sthl.3); + + next.control.orientation = Quaternion::rotation_x(s_a.stc.3) + * Quaternion::rotation_y(s_a.stc.4) + * Quaternion::rotation_z(s_a.stc.5); + }, + Some(ToolKind::Bow) => { + next.hand_l.position = Vec3::new(s_a.bhl.0, s_a.bhl.1, s_a.bhl.2); + next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3); + next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); + next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3); + + next.hold.position = Vec3::new(0.0, -1.0, -5.2); + next.hold.orientation = Quaternion::rotation_x(-1.57); + next.hold.scale = Vec3::one() * 1.0; + + next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2); + next.control.orientation = + Quaternion::rotation_y(s_a.bc.4) * Quaternion::rotation_z(s_a.bc.5); + }, + Some(ToolKind::Debug) => { + next.hand_l.position = Vec3::new(-7.0, 4.0, 3.0); + next.hand_l.orientation = Quaternion::rotation_x(1.27); + next.main.position = Vec3::new(-5.0, 5.0, 23.0); + next.main.orientation = Quaternion::rotation_x(3.14); + }, + Some(ToolKind::Farming) => { + next.hand_l.position = Vec3::new(9.0, 1.0, 1.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57); + next.hand_r.position = Vec3::new(9.0, 1.0, 11.0); + next.hand_r.orientation = Quaternion::rotation_x(1.57); + next.main.position = Vec3::new(7.5, 7.5, 13.2); + next.main.orientation = Quaternion::rotation_y(3.14); + + next.control.position = Vec3::new(-11.0, 1.8, 4.0); + }, + _ => {}, + }, + (_, _) => {}, + }; + match hands { + (Some(Hands::One), _) => { + next.control_l.position = Vec3::new(-7.0, 8.0, 2.0); + next.control_l.orientation = Quaternion::rotation_x(-0.3); + next.hand_l.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_l.orientation = Quaternion::rotation_x(1.57) + }, + (_, _) => {}, + }; + match hands { + (None | Some(Hands::One), Some(Hands::One)) => { + next.control_r.position = Vec3::new(7.0, 8.0, 2.0); + next.control_r.orientation = Quaternion::rotation_x(-0.3); + next.hand_r.position = Vec3::new(0.0, -0.5, 0.0); + next.hand_r.orientation = Quaternion::rotation_x(1.57) + }, + (_, _) => {}, + }; + match hands { + (None, None) | (None, Some(Hands::One)) => { + next.hand_l.position = Vec3::new(-4.5, 8.0, 5.0); next.hand_l.orientation = - Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4); - next.hand_r.position = Vec3::new(s_a.shr.0, s_a.shr.1, s_a.shr.2); + Quaternion::rotation_x(1.9) * Quaternion::rotation_y(-0.5) + }, + (_, _) => {}, + }; + match hands { + (None, None) | (Some(Hands::One), None) => { + next.hand_r.position = Vec3::new(4.5, 8.0, 5.0); next.hand_r.orientation = - Quaternion::rotation_x(s_a.shr.3) * Quaternion::rotation_y(s_a.shr.4); - - next.control.position = Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2); - next.control.orientation = Quaternion::rotation_x(s_a.sc.3); + Quaternion::rotation_x(1.9) * Quaternion::rotation_y(0.5) }, - Some(ToolKind::Axe) => { - next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.ahl.3) * Quaternion::rotation_y(s_a.ahl.4); - next.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1, s_a.ahr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.ahr.3) * Quaternion::rotation_z(s_a.ahr.5); - - next.control.position = Vec3::new(s_a.ac.0, s_a.ac.1, s_a.ac.2); - next.control.orientation = Quaternion::rotation_x(s_a.ac.3) - * Quaternion::rotation_y(s_a.ac.4) - * Quaternion::rotation_z(s_a.ac.5); - }, - Some(ToolKind::Hammer | ToolKind::Pick) => { - next.hand_l.position = Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.hhl.3) * Quaternion::rotation_y(s_a.hhl.4); - next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.hhr.3) * Quaternion::rotation_y(s_a.hhr.4); - - next.control.position = Vec3::new(s_a.hc.0, s_a.hc.1, s_a.hc.2); - next.control.orientation = Quaternion::rotation_x(s_a.hc.3) - * Quaternion::rotation_y(s_a.hc.4) - * Quaternion::rotation_z(s_a.hc.5); - }, - Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { - next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); - - next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); - - next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.sthl.3); - - next.control.orientation = Quaternion::rotation_x(s_a.stc.3) - * Quaternion::rotation_y(s_a.stc.4) - * Quaternion::rotation_z(s_a.stc.5); - }, - Some(ToolKind::Bow) => { - next.hand_l.position = Vec3::new(s_a.bhl.0, s_a.bhl.1, s_a.bhl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3); - next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); - next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3); - - next.hold.position = Vec3::new(0.0, -1.0, -5.2); - next.hold.orientation = Quaternion::rotation_x(-1.57); - next.hold.scale = Vec3::one() * 1.0; - - next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2); - next.control.orientation = - Quaternion::rotation_y(s_a.bc.4) * Quaternion::rotation_z(s_a.bc.5); - }, - Some(ToolKind::Debug) => { - next.hand_l.position = Vec3::new(-7.0, 4.0, 3.0); - next.hand_l.orientation = Quaternion::rotation_x(1.27); - next.main.position = Vec3::new(-5.0, 5.0, 23.0); - next.main.orientation = Quaternion::rotation_x(3.14); - }, - Some(ToolKind::Farming) => { - next.hand_l.position = Vec3::new(9.0, 1.0, 1.0); - next.hand_l.orientation = Quaternion::rotation_x(1.57); - next.hand_r.position = Vec3::new(9.0, 1.0, 11.0); - next.hand_r.orientation = Quaternion::rotation_x(1.57); - next.main.position = Vec3::new(7.5, 7.5, 13.2); - next.main.orientation = Quaternion::rotation_y(3.14); - - next.control.position = Vec3::new(-11.0, 1.8, 4.0); - }, - _ => {}, + (_, _) => {}, } } else if mirror > 0.0 { next.hand_r.position = Vec3::new( diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index bc45025b2a..02204ecfb2 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -1228,6 +1228,7 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, + hands, rel_vel.magnitude(), time, Some(s.stage_section), @@ -1245,6 +1246,7 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, + hands, rel_vel.magnitude(), time, Some(s.stage_section), @@ -3582,6 +3584,40 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::Stunned(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + match s.static_data.poise_state { + PoiseState::Normal + | PoiseState::Interrupted + | PoiseState::Stunned + | PoiseState::Dazed + | PoiseState::KnockedDown => { + anim::biped_large::StunnedAnimation::update_skeleton( + &target_base, + ( + active_tool_kind, + second_tool_kind, + rel_vel, + state.state_time, + state.acc_vel, + Some(s.stage_section), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + } + }, CharacterState::Blink(s) => { let stage_time = s.timer.as_secs_f32();