From ab26efa97061026bf97016686f83dd1e1614452e Mon Sep 17 00:00:00 2001 From: Snowram <robin.gilh@gmail.com> Date: Sat, 17 Apr 2021 12:38:00 +0200 Subject: [PATCH] Improves bird_large anims --- .../voxel/bird_large_lateral_manifest.ron | 40 +++--- common/src/states/utils.rs | 2 +- voxygen/anim/src/bird_large/feed.rs | 8 +- voxygen/anim/src/bird_large/fly.rs | 30 ++--- voxygen/anim/src/bird_large/run.rs | 37 +++--- voxygen/anim/src/bird_large/stunned.rs | 27 +--- voxygen/src/scene/figure/mod.rs | 15 +-- voxygen/src/ui/widgets/item_tooltip.rs | 2 +- world/src/layer/wildlife.rs | 119 ++++++++++++++---- 9 files changed, 157 insertions(+), 123 deletions(-) diff --git a/assets/voxygen/voxel/bird_large_lateral_manifest.ron b/assets/voxygen/voxel/bird_large_lateral_manifest.ron index b470d45287..f739190d0e 100644 --- a/assets/voxygen/voxel/bird_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/bird_large_lateral_manifest.ron @@ -2,7 +2,7 @@ (Phoenix, Male): ( wing_in_l: ( offset: (-6.0, -5.0, -2.0), - lateral: ("npc.phoenix.male.wing_in_l"), + lateral: ("npc.phoenix.male.wing_in_r"), ), wing_in_r: ( offset: (0.0, -5.0, -2.0), @@ -10,7 +10,7 @@ ), wing_mid_l: ( offset: (-2.5, -7.0, -2.0), - lateral: ("npc.phoenix.male.wing_mid_l"), + lateral: ("npc.phoenix.male.wing_mid_r"), ), wing_mid_r: ( offset: (-2.5, -7.0, -2.0), @@ -18,7 +18,7 @@ ), wing_out_l: ( offset: (-9.0, -8.0, -2.0), - lateral: ("npc.phoenix.male.wing_out_l"), + lateral: ("npc.phoenix.male.wing_out_r"), ), wing_out_r: ( offset: (0.0, -8.0, -2.0), @@ -26,7 +26,7 @@ ), leg_l: ( offset: (-1.5, -1.5, -1.5), - lateral: ("npc.phoenix.male.leg_l"), + lateral: ("npc.phoenix.male.leg_r"), ), leg_r: ( offset: (-1.5, -1.5, -1.5), @@ -34,7 +34,7 @@ ), foot_l: ( offset: (-1.5, -2.0, -4.0), - lateral: ("npc.phoenix.male.foot_l"), + lateral: ("npc.phoenix.male.foot_r"), ), foot_r: ( offset: (-1.5, -2.0, -4.0), @@ -44,7 +44,7 @@ (Phoenix, Female): ( wing_in_l: ( offset: (-6.0, -5.0, -2.0), - lateral: ("npc.phoenix.male.wing_in_l"), + lateral: ("npc.phoenix.male.wing_in_r"), ), wing_in_r: ( offset: (0.0, -5.0, -2.0), @@ -52,7 +52,7 @@ ), wing_mid_l: ( offset: (-2.5, -7.0, -2.0), - lateral: ("npc.phoenix.male.wing_mid_l"), + lateral: ("npc.phoenix.male.wing_mid_r"), ), wing_mid_r: ( offset: (-2.5, -7.0, -2.0), @@ -60,7 +60,7 @@ ), wing_out_l: ( offset: (-9.0, -8.0, -2.0), - lateral: ("npc.phoenix.male.wing_out_l"), + lateral: ("npc.phoenix.male.wing_out_r"), ), wing_out_r: ( offset: (0.0, -8.0, -2.0), @@ -68,7 +68,7 @@ ), leg_l: ( offset: (-1.5, -1.5, -1.5), - lateral: ("npc.phoenix.male.leg_l"), + lateral: ("npc.phoenix.male.leg_r"), ), leg_r: ( offset: (-1.5, -1.5, -1.5), @@ -76,7 +76,7 @@ ), foot_l: ( offset: (-1.5, -2.0, -4.0), - lateral: ("npc.phoenix.male.foot_l"), + lateral: ("npc.phoenix.male.foot_r"), ), foot_r: ( offset: (-1.5, -2.0, -4.0), @@ -86,7 +86,7 @@ (Cockatrice, Male): ( wing_in_l: ( offset: (-7.0, -8.0, -2.0), - lateral: ("npc.cockatrice.male.wing_in_l"), + lateral: ("npc.cockatrice.male.wing_in_r"), ), wing_in_r: ( offset: (0.0, -8.0, -2.0), @@ -94,7 +94,7 @@ ), wing_mid_l: ( offset: (-5.0, -9.0, -2.0), - lateral: ("npc.cockatrice.male.wing_mid_l"), + lateral: ("npc.cockatrice.male.wing_mid_r"), ), wing_mid_r: ( offset: (0.0, -9.0, -2.0), @@ -102,7 +102,7 @@ ), wing_out_l: ( offset: (-10.0, -11.0, -2.0), - lateral: ("npc.cockatrice.male.wing_out_l"), + lateral: ("npc.cockatrice.male.wing_out_r"), ), wing_out_r: ( offset: (0.0, -11.0, -2.0), @@ -110,7 +110,7 @@ ), leg_l: ( offset: (-3.0, -4.5, -4.0), - lateral: ("npc.cockatrice.male.leg_l"), + lateral: ("npc.cockatrice.male.leg_r"), ), leg_r: ( offset: (-3.0, -4.5, -4.0), @@ -118,7 +118,7 @@ ), foot_l: ( offset: (-3.5, -5.5, -10.0), - lateral: ("npc.cockatrice.male.foot_l"), + lateral: ("npc.cockatrice.male.foot_r"), ), foot_r: ( offset: (-3.5, -5.5, -10.0), @@ -128,7 +128,7 @@ (Cockatrice, Female): ( wing_in_l: ( offset: (-7.0, -8.0, -2.0), - lateral: ("npc.cockatrice.male.wing_in_l"), + lateral: ("npc.cockatrice.male.wing_in_r"), ), wing_in_r: ( offset: (0.0, -8.0, -2.0), @@ -136,7 +136,7 @@ ), wing_mid_l: ( offset: (-5.0, -9.0, -2.0), - lateral: ("npc.cockatrice.male.wing_mid_l"), + lateral: ("npc.cockatrice.male.wing_mid_r"), ), wing_mid_r: ( offset: (0.0, -9.0, -2.0), @@ -144,7 +144,7 @@ ), wing_out_l: ( offset: (-10.0, -11.0, -2.0), - lateral: ("npc.cockatrice.male.wing_out_l"), + lateral: ("npc.cockatrice.male.wing_out_r"), ), wing_out_r: ( offset: (0.0, -11.0, -2.0), @@ -152,7 +152,7 @@ ), leg_l: ( offset: (-3.0, -4.5, -4.0), - lateral: ("npc.cockatrice.male.leg_l"), + lateral: ("npc.cockatrice.male.leg_r"), ), leg_r: ( offset: (-3.0, -4.5, -4.0), @@ -160,7 +160,7 @@ ), foot_l: ( offset: (-3.5, -5.5, -10.0), - lateral: ("npc.cockatrice.male.foot_l"), + lateral: ("npc.cockatrice.male.foot_r"), ), foot_r: ( offset: (-3.5, -5.5, -10.0), diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index d5a5acdf23..9b8e4f75de 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -77,7 +77,7 @@ impl Body { Body::BirdMedium(_) => 80.0, Body::FishMedium(_) => 80.0, Body::Dragon(_) => 250.0, - Body::BirdLarge(_) => 75.0, + Body::BirdLarge(_) => 110.0, Body::FishSmall(_) => 60.0, Body::BipedSmall(biped_small) => match biped_small.species { biped_small::Species::Haniwa => 65.0, diff --git a/voxygen/anim/src/bird_large/feed.rs b/voxygen/anim/src/bird_large/feed.rs index 8b8acf44fe..9e61647de6 100644 --- a/voxygen/anim/src/bird_large/feed.rs +++ b/voxygen/anim/src/bird_large/feed.rs @@ -54,11 +54,11 @@ impl Animation for FeedAnimation { next.chest.orientation = Quaternion::rotation_x(-0.5); next.neck.position = Vec3::new(0.0, s_a.neck.0, s_a.neck.1); - next.neck.orientation = Quaternion::rotation_x(-0.8); + next.neck.orientation = Quaternion::rotation_x(-0.2); next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_z(duck_head_look.x) - * Quaternion::rotation_x(0.2 - duck_head_look.y.abs() + wave_slow_cos * 0.01); + * Quaternion::rotation_x(-0.2 - duck_head_look.y.abs() + wave_slow_cos * 0.01); next.beak.position = Vec3::new(0.0, s_a.beak.0, s_a.beak.1); next.beak.orientation = Quaternion::rotation_x(beak * -0.1 - 0.1); @@ -89,9 +89,9 @@ impl Animation for FeedAnimation { next.wing_out_r.orientation = Quaternion::rotation_y(0.2) * Quaternion::rotation_z(-0.2); next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2) / 8.0; - next.leg_l.orientation = Quaternion::rotation_x(0.5); + next.leg_l.orientation = Quaternion::rotation_x(0.0); next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2) / 8.0; - next.leg_r.orientation = Quaternion::rotation_x(0.5); + next.leg_r.orientation = Quaternion::rotation_x(0.0); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); next.foot_l.orientation = Quaternion::rotation_x(0.0); diff --git a/voxygen/anim/src/bird_large/fly.rs b/voxygen/anim/src/bird_large/fly.rs index 5d987d74a4..227be64ae0 100644 --- a/voxygen/anim/src/bird_large/fly.rs +++ b/voxygen/anim/src/bird_large/fly.rs @@ -6,7 +6,7 @@ use super::{ pub struct FlyAnimation; impl Animation for FlyAnimation { - type Dependency = (Vec3<f32>, Vec3<f32>, Vec3<f32>, f32, Vec3<f32>, f32); + type Dependency = (Vec3<f32>, Vec3<f32>, Vec3<f32>); type Skeleton = BirdLargeSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -15,7 +15,7 @@ impl Animation for FlyAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_large_fly")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (velocity, orientation, last_ori, _global_time, _avg_vel, _acc_vel): Self::Dependency, + (velocity, orientation, last_ori): Self::Dependency, anim_time: f32, _rate: &mut f32, s_a: &SkeletonAttr, @@ -25,6 +25,7 @@ impl Animation for FlyAnimation { let slow = (anim_time * 2.0).sin(); let fast = (anim_time * 4.0).sin(); + // Harmonic series hack to get a sine/saw mix let freq = 8.0; let off1 = 0.0; let off2 = -1.7; @@ -59,7 +60,6 @@ impl Animation for FlyAnimation { next.head.scale = Vec3::one() * 0.98; next.neck.scale = Vec3::one() * 1.02; - next.beak.scale = Vec3::one() * 0.98; next.leg_l.scale = Vec3::one() / 8.0 * 0.98; next.leg_r.scale = Vec3::one() / 8.0 * 0.98; next.foot_l.scale = Vec3::one() * 1.02; @@ -73,12 +73,12 @@ impl Animation for FlyAnimation { next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_x( - (-0.6 + 0.2 * velocity.xy().magnitude() / 5.0).min(-0.3) + fast * 0.05, + (-0.5 + 0.2 * velocity.xy().magnitude() / 5.0).min(-0.3) + fast * 0.05, ); next.beak.position = Vec3::new(0.0, s_a.beak.0, s_a.beak.1); - if velocity.z > 2.0 || velocity.xy().magnitude() < 1.8 { + if velocity.z > 2.0 || velocity.xy().magnitude() < 12.0 { next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 - flap4 * 1.5) * s_a.scaler / 8.0; next.chest.orientation = Quaternion::rotation_x( @@ -105,24 +105,24 @@ impl Animation for FlyAnimation { next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); next.tail_front.orientation = - Quaternion::rotation_x(-flap2 * 0.2) * Quaternion::rotation_z(-tilt * 1.0); + Quaternion::rotation_x(-flap2 * 0.2 + 0.1) * Quaternion::rotation_z(-tilt * 1.0); next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); next.tail_rear.orientation = - Quaternion::rotation_x(-flap3 * 0.3) * Quaternion::rotation_z(-tilt * 1.0); + Quaternion::rotation_x(-flap3 * 0.3 + 0.15) * Quaternion::rotation_z(-tilt * 0.8); next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 - flap4 * 1.5) / 8.0; next.leg_l.orientation = Quaternion::rotation_x( - (-1.0 * velocity.xy().magnitude() / 5.0).max(-1.0) + flap1 * -0.1, + (-1.0 * velocity.xy().magnitude() / 5.0).max(-1.2) + flap1 * -0.1, ) * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 - flap4 * 1.5) / 8.0; next.leg_r.orientation = Quaternion::rotation_x( - (-1.0 * velocity.xy().magnitude() / 5.0).max(-1.0) + flap1 * -0.1, + (-1.0 * velocity.xy().magnitude() / 5.0).max(-1.2) + flap1 * -0.1, ) * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(flap1 * -0.05); + next.foot_l.orientation = Quaternion::rotation_x(flap1 * -0.1); next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_x(flap1 * -0.05); + next.foot_r.orientation = Quaternion::rotation_x(flap1 * -0.1); } else { next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + slow * 0.05) * s_a.scaler / 8.0; @@ -154,16 +154,16 @@ impl Animation for FlyAnimation { next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); next.tail_front.orientation = - Quaternion::rotation_x(slow * 0.04) * Quaternion::rotation_z(-tilt * 1.0); + Quaternion::rotation_x(0.04 - slow * 0.04) * Quaternion::rotation_z(-tilt * 1.0); next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); next.tail_rear.orientation = - Quaternion::rotation_x(-0.2 + slow * 0.08) * Quaternion::rotation_z(-tilt * 1.0); + Quaternion::rotation_x(slow * 0.08) * Quaternion::rotation_z(-tilt * 0.8); next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 + slow * 0.05) / 8.0; - next.leg_l.orientation = Quaternion::rotation_x(-1.0 + slow * -0.05) + next.leg_l.orientation = Quaternion::rotation_x(-1.2 + slow * -0.05) * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 + slow * 0.05) / 8.0; - next.leg_r.orientation = Quaternion::rotation_x(-1.0 + slow * -0.05) + next.leg_r.orientation = Quaternion::rotation_x(-1.2 + slow * -0.05) * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); diff --git a/voxygen/anim/src/bird_large/run.rs b/voxygen/anim/src/bird_large/run.rs index b2088f0c4e..cde5f7aba5 100644 --- a/voxygen/anim/src/bird_large/run.rs +++ b/voxygen/anim/src/bird_large/run.rs @@ -7,7 +7,7 @@ use std::f32::consts::PI; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (Vec3<f32>, Vec3<f32>, Vec3<f32>, f32, Vec3<f32>, f32); + type Dependency = (Vec3<f32>, Vec3<f32>, Vec3<f32>, f32); type Skeleton = BirdLargeSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -16,8 +16,8 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_large_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (velocity, orientation, last_ori, _global_time, _avg_vel, acc_vel): Self::Dependency, - _anim_time: f32, + (velocity, orientation, last_ori, acc_vel): Self::Dependency, + anim_time: f32, rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { @@ -28,25 +28,29 @@ impl Animation for RunAnimation { //let speednorm = speed / 13.0; let speednorm = (speed / 13.0).powf(0.25); - let speedmult = 2.0; + let speedmult = 0.8; let lab: f32 = 0.6; //6 + // acc_vel and anim_time mix to make sure phase lenght isn't starting at + // +infinite + let mixed_vel = acc_vel + anim_time * 5.0; //sets run frequency using speed, with anim_time setting a floor + let short = ((1.0 / (0.72 - + 0.28 * ((acc_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()).powi(2))) + + 0.28 * ((mixed_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()).powi(2))) .sqrt()) - * ((acc_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()) + * ((mixed_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()) * speednorm; // - let shortalt = (acc_vel * 1.0 * lab * speedmult + PI * 3.0 / 8.0 - 0.5).sin() * speednorm; + let shortalt = (mixed_vel * 1.0 * lab * speedmult + PI * 3.0 / 8.0 - 0.5).sin() * speednorm; //FL - let foot1a = (acc_vel * 1.0 * lab * speedmult + 0.0 + PI).sin() * speednorm; //1.5 - let foot1b = (acc_vel * 1.0 * lab * speedmult + 1.57 + PI).sin() * speednorm; //1.9 + let foot1a = (mixed_vel * 1.0 * lab * speedmult + 0.0 + PI).sin() * speednorm; //1.5 + let foot1b = (mixed_vel * 1.0 * lab * speedmult + 1.57 + PI).sin() * speednorm; //1.9 //FR - let foot2a = (acc_vel * 1.0 * lab * speedmult).sin() * speednorm; //1.2 - let foot2b = (acc_vel * 1.0 * lab * speedmult + 1.57).sin() * speednorm; //1.6 + let foot2a = (mixed_vel * 1.0 * lab * speedmult).sin() * speednorm; //1.2 + let foot2b = (mixed_vel * 1.0 * lab * speedmult + 1.57).sin() * speednorm; //1.6 let ori: Vec2<f32> = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); let tilt = if ::vek::Vec2::new(ori, last_ori) @@ -63,7 +67,6 @@ impl Animation for RunAnimation { next.head.scale = Vec3::one() * 0.98; next.neck.scale = Vec3::one() * 1.02; - next.beak.scale = Vec3::one() * 0.98; next.leg_l.scale = Vec3::one() / 8.0 * 0.98; next.leg_r.scale = Vec3::one() / 8.0 * 0.98; next.foot_l.scale = Vec3::one() * 1.02; @@ -94,18 +97,16 @@ impl Animation for RunAnimation { * Quaternion::rotation_z(shortalt * 0.10); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); - next.tail_front.orientation = Quaternion::rotation_x(short * -0.02); + next.tail_front.orientation = Quaternion::rotation_x(0.6 + short * -0.02); next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); - next.tail_rear.orientation = Quaternion::rotation_x(short * -0.1); + next.tail_rear.orientation = Quaternion::rotation_x(-0.2 + short * -0.1); next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); - next.wing_in_l.orientation = - Quaternion::rotation_y(-s_a.wings_angle) * Quaternion::rotation_z(0.2); - next.wing_in_r.orientation = - Quaternion::rotation_y(s_a.wings_angle) * Quaternion::rotation_z(-0.2); + next.wing_in_l.orientation = Quaternion::rotation_y(-0.8) * Quaternion::rotation_z(0.2); + next.wing_in_r.orientation = Quaternion::rotation_y(0.8) * Quaternion::rotation_z(-0.2); next.wing_mid_l.position = Vec3::new(-s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2); next.wing_mid_r.position = Vec3::new(s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2); diff --git a/voxygen/anim/src/bird_large/stunned.rs b/voxygen/anim/src/bird_large/stunned.rs index 782af0f881..62a1905a7e 100644 --- a/voxygen/anim/src/bird_large/stunned.rs +++ b/voxygen/anim/src/bird_large/stunned.rs @@ -3,12 +3,11 @@ use super::{ BirdLargeSkeleton, SkeletonAttr, }; use common::states::utils::StageSection; -use std::ops::Mul; pub struct StunnedAnimation; impl Animation for StunnedAnimation { - type Dependency = (f32, f32, Option<StageSection>, f32); + type Dependency = (f32, Option<StageSection>, f32); type Skeleton = BirdLargeSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -17,25 +16,13 @@ impl Animation for StunnedAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_large_stunned")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (_velocity, global_time, stage_section, timer): Self::Dependency, + (global_time, stage_section, timer): Self::Dependency, anim_time: f32, _rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let duck_head_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 wave_slow_cos = (anim_time * 4.5).cos(); let (movement1base, movement2, twitch) = match stage_section { @@ -64,19 +51,16 @@ impl Animation for StunnedAnimation { next.chest.orientation = Quaternion::rotation_x(movement1base * 0.5); next.neck.position = Vec3::new(0.0, s_a.neck.0, s_a.neck.1); - next.neck.orientation = Quaternion::rotation_x(0.0); next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_z(twitch2 * 0.8) - * Quaternion::rotation_x(-duck_head_look.y.abs() + wave_slow_cos * 0.01); + next.head.orientation = + Quaternion::rotation_z(twitch2 * 0.8) * Quaternion::rotation_x(wave_slow_cos * 0.01); next.beak.position = Vec3::new(0.0, s_a.beak.0, s_a.beak.1); next.beak.orientation = Quaternion::rotation_x(-movement1abs * 0.8); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); - next.tail_front.orientation = Quaternion::rotation_x(0.0); next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); - next.tail_rear.orientation = Quaternion::rotation_x(0.0); next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); @@ -99,12 +83,9 @@ impl Animation for StunnedAnimation { next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2) / 8.0; next.leg_l.orientation = Quaternion::rotation_x(movement1abs * 0.8); next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2) / 8.0; - next.leg_r.orientation = Quaternion::rotation_x(0.0); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(0.0); next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_x(0.0); next } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index ab1e900fe7..baaacc7f60 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -3283,9 +3283,6 @@ impl FigureMgr { FigureState::new(renderer, BirdLargeSkeleton::default()) }); - // Average velocity relative to the current ground - let rel_avg_vel = state.avg_vel - physics.ground_vel; - let (character, last_character) = match (character, last_character) { (Some(c), Some(l)) => (c, l), _ => continue, @@ -3316,8 +3313,6 @@ impl FigureMgr { // TODO: Update to use the quaternion. ori * anim::vek::Vec3::<f32>::unit_y(), state.last_ori * anim::vek::Vec3::<f32>::unit_y(), - time, - rel_avg_vel, state.acc_vel, ), state.state_time, @@ -3332,9 +3327,6 @@ impl FigureMgr { // TODO: Update to use the quaternion. ori * anim::vek::Vec3::<f32>::unit_y(), state.last_ori * anim::vek::Vec3::<f32>::unit_y(), - time, - rel_avg_vel, - state.acc_vel, ), state.state_time, &mut state_animation_rate, @@ -3440,12 +3432,7 @@ impl FigureMgr { | PoiseState::KnockedDown => { anim::bird_large::StunnedAnimation::update_skeleton( &target_base, - ( - rel_vel.magnitude(), - time, - Some(s.stage_section), - state.state_time, - ), + (time, Some(s.stage_section), state.state_time), stage_progress, &mut state_animation_rate, skeleton_attr, diff --git a/voxygen/src/ui/widgets/item_tooltip.rs b/voxygen/src/ui/widgets/item_tooltip.rs index 62b106643a..7d66c154d9 100644 --- a/voxygen/src/ui/widgets/item_tooltip.rs +++ b/voxygen/src/ui/widgets/item_tooltip.rs @@ -1058,7 +1058,7 @@ impl<'a> Widget for ItemTooltip<'a> { .w(text_w) .get_h(ui) .unwrap_or(0.0) - + V_PAD + + V_PAD * 2.0 } else { 0.0 }; diff --git a/world/src/layer/wildlife.rs b/world/src/layer/wildlife.rs index 92b4204ed2..8e2c007608 100644 --- a/world/src/layer/wildlife.rs +++ b/world/src/layer/wildlife.rs @@ -367,7 +367,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..11) { + .with_body(match rng.gen_range(0..10) { 0 => quadruped_small::Body { species: quadruped_small::Species::Fox, body_type: quadruped_small::BodyType::Male, @@ -408,14 +408,9 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( &quadruped_medium::Species::Hirdrasil, ) .into(), - 9 => quadruped_small::Body::random_with( - rng, - &quadruped_small::Species::Truffler, - ) - .into(), _ => quadruped_small::Body::random_with( rng, - &quadruped_small::Species::Batfox, + &quadruped_small::Species::Truffler, ) .into(), }) @@ -431,6 +426,26 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( * 8.0 }, }, + // Temperate solitary wild night + Entry { + make_entity: |pos, rng| { + EntityInfo::at(pos) + .with_body( + quadruped_small::Body::random_with(rng, &quadruped_small::Species::Batfox) + .into(), + ) + .with_alignment(Alignment::Enemy) + }, + group_size: 1..2, + is_underwater: false, + day_period: vec![Night], + get_density: |c, _col| { + close(c.temp, CONFIG.temperate_temp + 0.1, 0.6) + * BASE_DENSITY + * close(c.humidity, CONFIG.forest_hum, 0.6) + * 0.8 + }, + }, // Rare temperate solitary enemies Entry { make_entity: |pos, rng| { @@ -583,10 +598,29 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( close(c.temp, CONFIG.tropical_temp + 0.2, 0.2) * close(c.humidity, CONFIG.jungle_hum, 0.2) * BASE_DENSITY - * 3.0 + * 2.8 }, }, - // Jungle rare solitary wild + // Jungle solitary ennemies day + Entry { + make_entity: |pos, rng| { + EntityInfo::at(pos) + .with_body( + theropod::Body::random_with(rng, &theropod::Species::Sunlizard).into(), + ) + .with_alignment(Alignment::Enemy) + }, + group_size: 1..2, + is_underwater: false, + day_period: vec![Morning, Noon, Evening], + get_density: |c, _col| { + close(c.temp, CONFIG.tropical_temp + 0.2, 0.2) + * close(c.humidity, CONFIG.jungle_hum, 0.2) + * BASE_DENSITY + * 0.5 + }, + }, + // Jungle rare solitary wild day Entry { make_entity: |pos, rng| { EntityInfo::at(pos) @@ -607,7 +641,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( }, group_size: 1..2, is_underwater: false, - day_period: vec![Night, Morning, Noon, Evening], + day_period: vec![Morning, Noon, Evening], get_density: |c, _col| { close(c.temp, CONFIG.tropical_temp + 0.2, 0.2) * close(c.humidity, CONFIG.jungle_hum, 0.2) @@ -619,16 +653,12 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..5) { + .with_body(match rng.gen_range(0..4) { 0 => bird_medium::Body::random_with(rng, &bird_medium::Species::Parrot) .into(), - 1 => { - quadruped_low::Body::random_with(rng, &quadruped_low::Species::Monitor) - .into() - }, - 2 => bird_large::Body::random_with(rng, &bird_large::Species::Cockatrice) + 1 => bird_large::Body::random_with(rng, &bird_large::Species::Cockatrice) .into(), - 3 => quadruped_small::Body::random_with( + 2 => quadruped_small::Body::random_with( rng, &quadruped_small::Species::Quokka, ) @@ -650,6 +680,26 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( * 8.0 }, }, + // Jungle solitary wild day + Entry { + make_entity: |pos, rng| { + EntityInfo::at(pos) + .with_body( + quadruped_low::Body::random_with(rng, &quadruped_low::Species::Monitor) + .into(), + ) + .with_alignment(Alignment::Enemy) + }, + group_size: 1..2, + is_underwater: false, + day_period: vec![Morning, Noon, Evening], + get_density: |c, _col| { + close(c.temp, CONFIG.tropical_temp + 0.2, 0.3) + * close(c.humidity, CONFIG.jungle_hum, 0.2) + * BASE_DENSITY + * 2.0 + }, + }, // Tropical rare river enemy Entry { make_entity: |pos, rng| { @@ -867,7 +917,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..7) { + .with_body(match rng.gen_range(0..4) { 0 => quadruped_small::Body::random_with( rng, &quadruped_small::Species::Holladon, @@ -882,21 +932,36 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( &quadruped_medium::Species::Camel, ) .into(), - 3 => quadruped_low::Body { - species: quadruped_low::Species::Salamander, - body_type: quadruped_low::BodyType::Male, - } - .into(), - 4 => quadruped_small::Body::random_with( + 3 => quadruped_small::Body::random_with( rng, &quadruped_small::Species::Porcupine, ) .into(), - 5 => quadruped_small::Body { + _ => quadruped_small::Body { species: quadruped_small::Species::Hare, body_type: quadruped_small::BodyType::Male, } .into(), + }) + .with_alignment(Alignment::Wild) + }, + group_size: 1..2, + is_underwater: false, + day_period: vec![Night, Morning, Noon, Evening], + get_density: |c, _col| { + close(c.temp, CONFIG.desert_temp + 0.2, 0.3) * BASE_DENSITY * 3.8 + }, + }, + // Desert solitary wild day + Entry { + make_entity: |pos, rng| { + EntityInfo::at(pos) + .with_body(match rng.gen_range(0..3) { + 1 => quadruped_low::Body { + species: quadruped_low::Species::Salamander, + body_type: quadruped_low::BodyType::Male, + } + .into(), _ => quadruped_small::Body::random_with( rng, &quadruped_small::Species::Gecko, @@ -907,9 +972,9 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( }, group_size: 1..2, is_underwater: false, - day_period: vec![Night, Morning, Noon, Evening], + day_period: vec![Morning, Noon, Evening], get_density: |c, _col| { - close(c.temp, CONFIG.desert_temp + 0.2, 0.3) * BASE_DENSITY * 5.0 + close(c.temp, CONFIG.desert_temp + 0.2, 0.3) * BASE_DENSITY * 1.0 }, }, // Underwater temperate