diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index 0dfa722f6e..71bbaadc35 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -68,7 +68,7 @@ bincode = "1.2" deunicode = "1.0" uvth = "3.1.1" authc = { git = "https://gitlab.com/veloren/auth.git", rev = "65571ade0d954a0e0bd995fdb314854ff146ab97" } -const-tweaker = { version = "0.2.1", optional = true } +const-tweaker = { version = "0.2.4", optional = true } [target.'cfg(target_os = "macos")'.dependencies] dispatch = "0.1.4" diff --git a/voxygen/src/anim/character/attack.rs b/voxygen/src/anim/character/attack.rs index 736c595ae6..de331b7ccf 100644 --- a/voxygen/src/anim/character/attack.rs +++ b/voxygen/src/anim/character/attack.rs @@ -52,7 +52,7 @@ impl Animation for AttackAnimation { Some(ToolKind::Sword(_)) => { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, - -2.0 + skeleton_attr.neck_forward, + 0.0 + skeleton_attr.neck_forward, skeleton_attr.neck_height + 14.0, ); next.head.ori = Quaternion::rotation_z(slow * 0.08) @@ -102,7 +102,7 @@ impl Animation for AttackAnimation { Some(ToolKind::Axe(_)) => { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right + slowax * 2.0, - -2.0 + skeleton_attr.neck_forward + slowax * -2.0, + 0.0 + skeleton_attr.neck_forward + slowax * -2.0, skeleton_attr.neck_height + 13.0, ); next.head.ori = Quaternion::rotation_z(slowax * 0.25) @@ -160,7 +160,7 @@ impl Animation for AttackAnimation { next.main.scale = Vec3::one(); next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right + slower * 3.0, - -2.0 + skeleton_attr.neck_forward + slower * -3.0, + 0.0 + skeleton_attr.neck_forward + slower * -3.0, skeleton_attr.neck_height + 12.0, ); next.head.ori = Quaternion::rotation_z(slower * 0.25) @@ -191,7 +191,7 @@ impl Animation for AttackAnimation { Some(ToolKind::Staff(_)) => { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, - -2.0 + skeleton_attr.neck_forward + decel * 0.8, + 0.0 + skeleton_attr.neck_forward + decel * 0.8, skeleton_attr.neck_height + 14.0, ); next.head.ori = Quaternion::rotation_z(decel * 0.25) @@ -237,7 +237,7 @@ impl Animation for AttackAnimation { Some(ToolKind::Shield(_)) => { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, - -2.0 + skeleton_attr.neck_forward + decel * 0.8, + 0.0 + skeleton_attr.neck_forward + decel * 0.8, skeleton_attr.neck_height + 21.0, ); next.head.ori = Quaternion::rotation_z(decel * 0.25) @@ -289,7 +289,7 @@ impl Animation for AttackAnimation { Some(ToolKind::Bow(_)) => { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, - -2.0 + skeleton_attr.neck_forward + decel * 0.8, + 0.0 + skeleton_attr.neck_forward + decel * 0.8, skeleton_attr.neck_height + 21.0, ); next.head.ori = Quaternion::rotation_z(decel * -0.25) diff --git a/voxygen/src/anim/character/climb.rs b/voxygen/src/anim/character/climb.rs index 67fa4b810c..fc738e4ff5 100644 --- a/voxygen/src/anim/character/climb.rs +++ b/voxygen/src/anim/character/climb.rs @@ -35,8 +35,8 @@ impl Animation for ClimbAnimation { next.head.offset = Vec3::new( 0.0, - -1.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 11.5 + wave_cos * 1.3, + -4.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 13.50 + wave_cos * 0.2, ); next.head.ori = Quaternion::rotation_z(wave * 0.1) * Quaternion::rotation_x(0.6) @@ -49,12 +49,12 @@ impl Animation for ClimbAnimation { * Quaternion::rotation_y(wave_test * -0.12); next.chest.scale = Vec3::one(); - next.belt.offset = Vec3::new(0.0, 1.0, -3.5 + wave_cos * 1.1); - next.belt.ori = Quaternion::rotation_z(wave_test * 0.25) * Quaternion::rotation_x(0.0); + next.belt.offset = Vec3::new(0.0, 1.0, -2.0); + next.belt.ori = Quaternion::rotation_z(wave_test * 0.0) * Quaternion::rotation_x(0.0); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 1.0, -6.0 + wave_cos * 1.1); - next.shorts.ori = Quaternion::rotation_z(wave_test * 0.25) + next.shorts.offset = Vec3::new(0.0, 1.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(wave_test * 0.0) * Quaternion::rotation_x(0.1) * Quaternion::rotation_y(wave_test * 0.10); next.shorts.scale = Vec3::one(); diff --git a/voxygen/src/anim/character/equip.rs b/voxygen/src/anim/character/equip.rs new file mode 100644 index 0000000000..35fb623223 --- /dev/null +++ b/voxygen/src/anim/character/equip.rs @@ -0,0 +1,254 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use std::{f32::consts::PI, ops::Mul}; + +use vek::*; + +pub struct EquipAnimation; + +impl Animation for EquipAnimation { + type Dependency = (Option, f32, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, _velocity, global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + let lab = 1.0; + let foot = (((5.0) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 1.6).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 1.6).sin()); + let short = (((5.0) + / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 1.6).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 1.6).sin()); + let long = (((5.0) + / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 0.8).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 0.8).sin()); + + let equip_slow = 1.0 + (anim_time as f32 * 1.2 + PI).cos(); + let equip_slowa = 1.0 + (anim_time as f32 * 1.2 + PI / 4.0).cos(); + + let wave_ultra_slow = (anim_time as f32 * 1.0 + PI).sin(); + let wave_ultra_slow_cos = (anim_time as f32 * 3.0 + PI).cos(); + + let wave = (anim_time as f32 * 1.0).sin(); + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Sword(_)) => { + next.l_hand.offset = Vec3::new(-0.25, -5.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.57) * Quaternion::rotation_y(-0.2); + next.l_hand.scale = Vec3::one() * 1.04; + next.r_hand.offset = Vec3::new(1.25, -5.5, -8.0); + next.r_hand.ori = Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 0.0, -6.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = + Vec3::new(-3.0 + equip_slowa * -1.5, -5.0, 12.0 + equip_slow * 1.5); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(2.5) + * Quaternion::rotation_z(1.57); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Axe(_)) => { + next.l_hand.offset = Vec3::new(-4.0, 3.0, 6.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(-2.5, 9.0, 4.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(-6.0, 10.0, -1.0); + next.main.ori = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(-0.8); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_x(0.2) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Hammer(_)) => { + next.l_hand.offset = Vec3::new(-7.0 + 9.0, 4.6 + 1.5, 7.5 - 1.6); + next.l_hand.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.32); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(8.0, 5.75, 4.0); + next.r_hand.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.22); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(6.0, 7.0, 0.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(-1.35) + * Quaternion::rotation_z(1.57); + next.main.scale = Vec3::one(); + + next.control.offset = + Vec3::new(-3.0 + equip_slowa * -1.5, -12.0, 12.0 + equip_slow * 1.5); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(1.35 + 2.5) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Staff(_)) => { + next.l_hand.offset = Vec3::new(1.0, -2.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(9.0, 1.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(1.8) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(-0.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(11.0, 9.0, 10.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(3.14 + 0.3) + * Quaternion::rotation_z(0.9); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(wave_ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(wave_ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Shield(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Bow(_)) => { + next.l_hand.offset = Vec3::new(1.0, -4.0, -1.0); + next.l_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); + next.r_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(wave_ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(wave_ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Dagger(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Debug(_)) => { + next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); + next.l_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(7.0, 2.5, -1.25); + next.r_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + 5.0 + skeleton_attr.weapon_x, + 8.75 + skeleton_attr.weapon_y, + -2.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(-1.27) + * Quaternion::rotation_z(wave * -0.25); + next.main.scale = Vec3::one(); + }, + _ => {}, + } + let head_look = Vec2::new( + ((global_time + anim_time) as f32 / 6.0) + .floor() + .mul(7331.0) + .sin() + * 0.2, + ((global_time + anim_time) as f32 / 6.0) + .floor() + .mul(1337.0) + .sin() + * 0.1, + ); + next.head.offset = Vec3::new( + 0.0, + -3.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 13.0 + short * 0.2, + ); + next.head.ori = Quaternion::rotation_z(head_look.x + long * 0.1 - short * 0.2) + * Quaternion::rotation_x(head_look.y + 0.35); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 9.0 + short * 1.1); + next.chest.ori = Quaternion::rotation_z(short * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(short * 0.15); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(short * 0.4); + next.shorts.scale = Vec3::one(); + + next.l_foot.offset = Vec3::new(-3.4, foot * 1.0, 9.0); + next.l_foot.ori = Quaternion::rotation_x(foot * -1.2); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, foot * -1.0, 9.0); + next.r_foot.ori = Quaternion::rotation_x(foot * 1.2); + next.r_foot.scale = Vec3::one(); + + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_x(-0.2); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + next + } +} diff --git a/voxygen/src/anim/character/idleequip.rs b/voxygen/src/anim/character/idleequip.rs new file mode 100644 index 0000000000..be36ef275c --- /dev/null +++ b/voxygen/src/anim/character/idleequip.rs @@ -0,0 +1,252 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use std::{f32::consts::PI, ops::Mul}; + +use vek::*; + +pub struct IdleEquipAnimation; + +impl Animation for IdleEquipAnimation { + type Dependency = (Option, f32, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, _velocity, global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + let _lab = 1.0; + let wave_slow_cos = (anim_time as f32 * 6.0 + PI).cos(); + let equip_slow = 1.0 + (anim_time as f32 * 10.0 + PI).cos(); + let equip_slowa = 1.0 + (anim_time as f32 * 10.0 + PI / 4.0).cos(); + + let wave_ultra_slow = (anim_time as f32 * 1.0 + PI).sin(); + let wave_ultra_slow_cos = (anim_time as f32 * 3.0 + PI).cos(); + + let wave = (anim_time as f32 * 1.0).sin(); + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Sword(_)) => { + next.l_hand.offset = Vec3::new(-0.25, -5.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.57) * Quaternion::rotation_y(-0.2); + next.l_hand.scale = Vec3::one() * 1.04; + next.r_hand.offset = Vec3::new(1.25, -5.5, -8.0); + next.r_hand.ori = Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 0.0, -6.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = + Vec3::new(-3.0 + equip_slowa * -1.5, -5.0, 12.0 + equip_slow * 1.5); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(2.5) + * Quaternion::rotation_z(1.57); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Axe(_)) => { + next.l_hand.offset = Vec3::new(-4.0, 3.0, 6.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(-2.5, 9.0, 4.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(-6.0, 10.0, -1.0); + next.main.ori = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(-0.8); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_x(0.2) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Hammer(_)) => { + next.l_hand.offset = Vec3::new(-7.0 + 9.0, 4.6 + 1.5, 7.5 - 1.6); + next.l_hand.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.32); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(8.0, 5.75, 4.0); + next.r_hand.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.22); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(6.0, 7.0, 0.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(-1.35) + * Quaternion::rotation_z(1.57); + next.main.scale = Vec3::one(); + + next.control.offset = + Vec3::new(-3.0 + equip_slowa * -1.5, -12.0, 12.0 + equip_slow * 1.5); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(1.35 + 2.5) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Staff(_)) => { + next.l_hand.offset = Vec3::new(1.0, -2.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(9.0, 1.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(1.8) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(-0.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(11.0, 9.0, 10.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(3.14 + 0.3) + * Quaternion::rotation_z(0.9); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(wave_ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(wave_ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Shield(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Bow(_)) => { + next.l_hand.offset = Vec3::new(1.0, -4.0, -1.0); + next.l_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); + next.r_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(wave_ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(wave_ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Dagger(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Debug(_)) => { + next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); + next.l_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(7.0, 2.5, -1.25); + next.r_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + 5.0 + skeleton_attr.weapon_x, + 8.75 + skeleton_attr.weapon_y, + -2.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(-1.27) + * Quaternion::rotation_z(wave * -0.25); + next.main.scale = Vec3::one(); + }, + _ => {}, + } + let head_look = Vec2::new( + ((global_time + anim_time) as f32 / 10.0) + .floor() + .mul(7331.0) + .sin() + * 0.2, + ((global_time + anim_time) as f32 / 10.0) + .floor() + .mul(1337.0) + .sin() + * 0.1, + ); + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0 + wave_ultra_slow * 0.1, + ); + next.head.ori = + Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y.abs()); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0 + wave_slow_cos * 0.5, 0.0, 7.0 + wave_ultra_slow * 0.5); + next.chest.ori = + Quaternion::rotation_y(wave_ultra_slow_cos * 0.04) * Quaternion::rotation_z(0.15); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = + Quaternion::rotation_y(wave_ultra_slow_cos * 0.03) * Quaternion::rotation_z(0.22); + next.belt.scale = Vec3::one() * 1.02; + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(0.3); + next.shorts.scale = Vec3::one(); + + next.l_foot.offset = Vec3::new(-3.4, -2.5, 8.0); + next.l_foot.ori = Quaternion::rotation_x(wave_ultra_slow_cos * 0.035 - 0.2); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, 3.5, 8.0); + next.r_foot.ori = Quaternion::rotation_x(wave_ultra_slow * 0.035); + next.r_foot.scale = Vec3::one(); + + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_x(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/character/mod.rs b/voxygen/src/anim/character/mod.rs index 29827d9620..6d4beec894 100644 --- a/voxygen/src/anim/character/mod.rs +++ b/voxygen/src/anim/character/mod.rs @@ -4,8 +4,10 @@ pub mod blockidle; pub mod charge; pub mod cidle; pub mod climb; +pub mod equip; pub mod gliding; pub mod idle; +pub mod idleequip; pub mod idlewield; pub mod jump; pub mod roll; @@ -20,11 +22,11 @@ pub mod wield; // Reexports pub use self::{ attack::AttackAnimation, block::BlockAnimation, blockidle::BlockIdleAnimation, - charge::ChargeAnimation, cidle::CidleAnimation, climb::ClimbAnimation, - gliding::GlidingAnimation, idle::IdleAnimation, idlewield::IdleWieldAnimation, - jump::JumpAnimation, roll::RollAnimation, run::RunAnimation, shoot::ShootAnimation, - sit::SitAnimation, spin::SpinAnimation, stand::StandAnimation, swim::SwimAnimation, - wield::WieldAnimation, + charge::ChargeAnimation, cidle::CidleAnimation, climb::ClimbAnimation, equip::EquipAnimation, + gliding::GlidingAnimation, idle::IdleAnimation, idleequip::IdleEquipAnimation, + idlewield::IdleWieldAnimation, jump::JumpAnimation, roll::RollAnimation, run::RunAnimation, + shoot::ShootAnimation, sit::SitAnimation, spin::SpinAnimation, stand::StandAnimation, + swim::SwimAnimation, wield::WieldAnimation, }; use super::{Bone, Skeleton}; diff --git a/voxygen/src/anim/character/stand.rs b/voxygen/src/anim/character/stand.rs index 4528ad2b87..b26188efaf 100644 --- a/voxygen/src/anim/character/stand.rs +++ b/voxygen/src/anim/character/stand.rs @@ -46,12 +46,12 @@ impl Animation for StandAnimation { next.chest.ori = Quaternion::rotation_z(head_look.x * 0.6); next.chest.scale = Vec3::one() * 1.01; - next.belt.offset = Vec3::new(0.0, 0.0, -2.0 + slow * 0.3); //5 - next.belt.ori = Quaternion::rotation_z(head_look.x * 0.4); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); //5 + next.belt.ori = Quaternion::rotation_z(head_look.x * -0.1); next.belt.scale = Vec3::one() + breathe * 0.05; - next.shorts.offset = Vec3::new(0.0, 0.0, -5.0 + slow * 0.3); //2 - next.shorts.ori = Quaternion::rotation_x(0.0); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); //2 + next.shorts.ori = Quaternion::rotation_x(head_look.x * -0.2); next.shorts.scale = Vec3::one(); next.l_hand.offset = Vec3::new(-7.0, -0.25 + slow * 0.15, 5.0 + slow * 0.5); diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 2579efcc9c..036c3ad62a 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -488,6 +488,15 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::CastFireball(_) => { + anim::character::ShootAnimation::update_skeleton( + &target_base, + (active_tool_kind, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, CharacterState::Boost(_) => { anim::character::AttackAnimation::update_skeleton( &target_base, @@ -566,7 +575,7 @@ impl FigureMgr { }*/ CharacterState::Equipping { .. } => { if vel.0.magnitude_squared() > 0.5 { - anim::character::WieldAnimation::update_skeleton( + anim::character::EquipAnimation::update_skeleton( &target_base, (active_tool_kind, vel.0.magnitude(), time), state.state_time, @@ -574,7 +583,7 @@ impl FigureMgr { skeleton_attr, ) } else { - anim::character::IdleWieldAnimation::update_skeleton( + anim::character::IdleEquipAnimation::update_skeleton( &target_base, (active_tool_kind, vel.0.magnitude(), time), state.state_time,