refining pace setup. refined species anim variables

This commit is contained in:
jshipsey 2020-08-26 02:47:21 -04:00
parent 47d5c635de
commit 883aa1754b
2 changed files with 76 additions and 63 deletions

View File

@ -229,7 +229,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Lion, _) => (6.5, -6.5, -2.0), (Lion, _) => (6.5, -6.5, -2.0),
(Tarasque, _) => (7.0, -8.0, -6.0), (Tarasque, _) => (7.0, -8.0, -6.0),
(Tiger, _) => (6.0, -5.0, -3.0), (Tiger, _) => (6.0, -5.0, -3.0),
(Wolf, _) => (4.5, -6.5, -1.0), (Wolf, _) => (4.5, -6.5, -1.5),
(Frostfang, _) => (5.5, -5.5, -2.0), (Frostfang, _) => (5.5, -5.5, -2.0),
(Mouflon, _) => (4.0, -5.0, -5.0), (Mouflon, _) => (4.0, -5.0, -5.0),
(Catoblepas, _) => (7.0, 2.0, -6.0), (Catoblepas, _) => (7.0, 2.0, -6.0),
@ -242,7 +242,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Lion, _) => (6.0, -6.0, -2.0), (Lion, _) => (6.0, -6.0, -2.0),
(Tarasque, _) => (6.0, -6.5, -6.5), (Tarasque, _) => (6.0, -6.5, -6.5),
(Tiger, _) => (6.0, -7.5, -3.0), (Tiger, _) => (6.0, -7.5, -3.0),
(Wolf, _) => (5.0, -6.5, -2.5), (Wolf, _) => (5.0, -6.5, -3.0),
(Frostfang, _) => (3.5, -4.5, -2.0), (Frostfang, _) => (3.5, -4.5, -2.0),
(Mouflon, _) => (3.5, -8.0, -4.5), (Mouflon, _) => (3.5, -8.0, -4.5),
(Catoblepas, _) => (6.0, -2.5, -2.5), (Catoblepas, _) => (6.0, -2.5, -2.5),
@ -310,7 +310,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Wolf, _) => (1.0), (Wolf, _) => (1.0),
(Frostfang, _) => (1.2), (Frostfang, _) => (1.2),
(Mouflon, _) => (1.1), (Mouflon, _) => (1.1),
(Catoblepas, _) => (0.9), (Catoblepas, _) => (0.0),
(Bonerattler, _) => (0.8), (Bonerattler, _) => (0.8),
}, },
tempo: match (body.species, body.body_type) { tempo: match (body.species, body.body_type) {

View File

@ -2,7 +2,7 @@ use super::{
super::{vek::*, Animation}, super::{vek::*, Animation},
QuadrupedMediumSkeleton, SkeletonAttr, QuadrupedMediumSkeleton, SkeletonAttr,
}; };
use std::f32::consts::PI; use std::{f32::consts::PI, ops::Mul};
pub struct RunAnimation; pub struct RunAnimation;
@ -16,7 +16,7 @@ impl Animation for RunAnimation {
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_run")] #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_run")]
fn update_skeleton_inner( fn update_skeleton_inner(
skeleton: &Self::Skeleton, skeleton: &Self::Skeleton,
(velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, (velocity, orientation, last_ori, global_time, avg_vel): Self::Dependency,
anim_time: f64, anim_time: f64,
rate: &mut f32, rate: &mut f32,
skeleton_attr: &SkeletonAttr, skeleton_attr: &SkeletonAttr,
@ -24,30 +24,39 @@ impl Animation for RunAnimation {
let mut next = (*skeleton).clone(); let mut next = (*skeleton).clone();
let speed = Vec2::<f32>::from(velocity).magnitude(); let speed = Vec2::<f32>::from(velocity).magnitude();
*rate = 1.0; *rate = 1.0;
//let increasefreqtest = (((1.0/speed)*3.0).round()).min(5.0);
let lab = 0.6; //6 let lab = 0.6; //6
let amplitude = (speed / 24.0).max(0.25); let amplitude = (speed / 24.0).max(0.25);
let amplitude2 = (speed * 1.4 / 24.0).min(0.8); let amplitude2 = (speed * 1.4 / 24.0).max(0.6);
let amplitude3 = (speed / 24.0).min(0.7); let amplitude3 = (speed / 24.0).max(0.35);
let speedmult = if speed > 0.0 { let speedmult = if speed > 0.0 {
1.2 * (1.0 * skeleton_attr.tempo) 1.2 * (1.0 * skeleton_attr.tempo)
} else { } else {
0.9 * (1.0 * skeleton_attr.tempo) 0.9 * (1.0 * skeleton_attr.tempo)
}; };
//println!("{:?}", avg_speed);
let canceler = speed / 24.0; let canceler = speed / 24.0;
let short = (((1.0) let short = (((1.0)
/ (0.72 / (0.72
+ 0.28 + 0.28
* ((anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * -0.15).sin()) * ((anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15).sin())
.powf(2.0 as f32))) .powf(2.0 as f32)))
.sqrt()) .sqrt())
* ((anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * -0.15).sin()); * ((anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15).sin());
// //
let shortalt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.35).sin(); let shortalt = (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * 0.35).sin();
let look = Vec2::new(
let noisify1 = (anim_time as f32 * 13.0 * lab as f32 * speedmult).sin() * 0.1; ((global_time + anim_time) as f32 / 2.0)
let noisify2 = (anim_time as f32 * 17.0 * lab as f32 * speedmult).sin() * 0.1; .floor()
.mul(7331.0)
.sin()
* 0.5,
((global_time + anim_time) as f32 / 2.0)
.floor()
.mul(1337.0)
.sin()
* 0.25,
);
let speedadjust = if speed < 5.0 { 0.0 } else { speed }; let speedadjust = if speed < 5.0 { 0.0 } else { speed };
let shift1 = speedadjust / 24.0 * 0.0; let shift1 = speedadjust / 24.0 * 0.0;
@ -56,39 +65,32 @@ impl Animation for RunAnimation {
let shift4 = speedadjust / 24.0 * PI / 4.0; let shift4 = speedadjust / 24.0 * PI / 4.0;
//FL //FL
let foot1a = let foot1a = (anim_time as f32 * (16.0) * lab as f32 * speedmult
(anim_time as f32 * 16.0 * lab as f32 * speedmult + noisify1 + PI * (0.0 + shift1)) + PI * (0.0 + canceler * 0.08 + shift1))
.sin(); //1.5 .sin(); //1.5
let foot1b = let foot1b = (anim_time as f32 * (16.0) * lab as f32 * speedmult
(anim_time as f32 * 16.0 * lab as f32 * speedmult + noisify1 + PI * (0.4 + shift1)) + PI * (0.4 + canceler * 0.08 + shift1))
.sin(); //1.9 .sin(); //1.9
//FR //FR
let foot2a = (anim_time as f32 * 16.0 * lab as f32 * speedmult let foot2a =
+ noisify2 (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * (PI / 4.0 + shift2)).sin(); //1.2
+ PI * (PI / 4.0 + shift2)) let foot2b = (anim_time as f32 * (16.0) * lab as f32 * speedmult
.sin(); //1.2
let foot2b = (anim_time as f32 * 16.0 * lab as f32 * speedmult
+ noisify2
+ PI * (0.4 + PI / 4.0 + shift2)) + PI * (0.4 + PI / 4.0 + shift2))
.sin(); //1.6 .sin(); //1.6
//BL //BL
let foot3a = let foot3a =
(anim_time as f32 * 16.0 * lab as f32 * speedmult + noisify1 + PI * (0.0 + shift3)) (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * (0.0 + shift3)).sin(); //0.0
.sin(); //0.0
let foot3b = let foot3b =
(anim_time as f32 * 16.0 * lab as f32 * speedmult + noisify1 + PI * (0.4 + shift3)) (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * (0.4 + shift3)).sin(); //0.4
.sin(); //0.4
//BR //BR
let foot4a = (anim_time as f32 * 16.0 * lab as f32 * speedmult let foot4a = (anim_time as f32 * (16.0) * lab as f32 * speedmult
+ noisify2 + PI * (0.0 + canceler * 0.15 + PI / 4.0 + shift4))
+ PI * (0.0 + PI / 4.0 + shift4))
.sin(); //0.3 .sin(); //0.3
let foot4b = (anim_time as f32 * 16.0 * lab as f32 * speedmult let foot4b = (anim_time as f32 * (16.0) * lab as f32 * speedmult
+ noisify2 + PI * (0.4 + canceler * 0.15 + PI / 4.0 + shift4))
+ PI * (0.4 + PI / 4.0 + shift4))
.sin(); //0.7 .sin(); //0.7
// //
@ -110,8 +112,9 @@ impl Animation for RunAnimation {
//Gallop //Gallop
next.head_upper.position = next.head_upper.position =
Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1);
next.head_upper.orientation = Quaternion::rotation_x(amplitude * short * -0.03 - 0.1) next.head_upper.orientation =
* Quaternion::rotation_z(tilt * -1.2) Quaternion::rotation_x(look.y * 0.1 / canceler + amplitude * short * -0.03 - 0.1)
* Quaternion::rotation_z(look.x * 0.1 / canceler + tilt * -1.2)
* Quaternion::rotation_y(tilt * 0.8); * Quaternion::rotation_y(tilt * 0.8);
next.head_upper.scale = Vec3::one(); next.head_upper.scale = Vec3::one();
@ -134,10 +137,14 @@ impl Animation for RunAnimation {
next.torso_front.position = Vec3::new( next.torso_front.position = Vec3::new(
0.0, 0.0,
skeleton_attr.torso_front.0, skeleton_attr.torso_front.0,
skeleton_attr.torso_front.1 + canceler * shortalt * 2.5 + x_tilt * 10.0, skeleton_attr.torso_front.1
+ canceler * 1.0
+ canceler * shortalt * 2.5
+ x_tilt * 10.0,
) * skeleton_attr.scaler ) * skeleton_attr.scaler
/ 11.0; / 11.0;
next.torso_front.orientation = Quaternion::rotation_x(amplitude * short * -0.13 + x_tilt) next.torso_front.orientation =
Quaternion::rotation_x((amplitude * (short * -0.13).max(-0.2)) + x_tilt)
* Quaternion::rotation_y(tilt * 0.8) * Quaternion::rotation_y(tilt * 0.8)
* Quaternion::rotation_z(tilt * -1.5); * Quaternion::rotation_z(tilt * -1.5);
next.torso_front.scale = Vec3::one() * skeleton_attr.scaler / 11.0; next.torso_front.scale = Vec3::one() * skeleton_attr.scaler / 11.0;
@ -161,7 +168,7 @@ impl Animation for RunAnimation {
skeleton_attr.leg_f.1 + amplitude3 * foot1a * -1.3, skeleton_attr.leg_f.1 + amplitude3 * foot1a * -1.3,
skeleton_attr.leg_f.2 + canceler + amplitude3 * foot1b * -1.9, skeleton_attr.leg_f.2 + canceler + amplitude3 * foot1b * -1.9,
); );
next.leg_fl.orientation = Quaternion::rotation_x(amplitude3 * foot1b * -0.65) next.leg_fl.orientation = Quaternion::rotation_x(amplitude3 * foot1b * -0.55)
* Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_z(tilt * -0.5)
* Quaternion::rotation_y(tilt * 1.5); * Quaternion::rotation_y(tilt * 1.5);
next.leg_fl.scale = Vec3::one() * 1.02; next.leg_fl.scale = Vec3::one() * 1.02;
@ -171,27 +178,29 @@ impl Animation for RunAnimation {
skeleton_attr.leg_f.1 + amplitude3 * foot2a * -1.3, skeleton_attr.leg_f.1 + amplitude3 * foot2a * -1.3,
skeleton_attr.leg_f.2 + canceler + amplitude3 * foot2b * -1.9, skeleton_attr.leg_f.2 + canceler + amplitude3 * foot2b * -1.9,
); );
next.leg_fr.orientation = Quaternion::rotation_x(amplitude3 * foot2b * -0.65) next.leg_fr.orientation = Quaternion::rotation_x(amplitude3 * foot2b * -0.55)
* Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_z(tilt * -0.5)
* Quaternion::rotation_y(tilt * 1.5); * Quaternion::rotation_y(tilt * 1.5);
next.leg_fr.scale = Vec3::one() * 1.02; next.leg_fr.scale = Vec3::one() * 1.02;
next.leg_bl.position = Vec3::new( next.leg_bl.position = Vec3::new(
-skeleton_attr.leg_b.0, -skeleton_attr.leg_b.0,
skeleton_attr.leg_b.1 + amplitude3 * foot3a * -1.7, skeleton_attr.leg_b.1 + amplitude3 * foot3a * -1.9,
skeleton_attr.leg_b.2 + canceler + amplitude3 * foot3b * -1.9, skeleton_attr.leg_b.2 + canceler + amplitude3 * ((foot3b * -2.6).min(1.0)),
); );
next.leg_bl.orientation = Quaternion::rotation_x(amplitude3 * foot3b * -0.45 - 0.2) next.leg_bl.orientation =
Quaternion::rotation_x(amplitude3 * foot3b * -0.5 - 0.2 * canceler)
* Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_y(tilt * 1.5)
* Quaternion::rotation_z(tilt * -1.5); * Quaternion::rotation_z(tilt * -1.5);
next.leg_bl.scale = Vec3::one() * 1.02; next.leg_bl.scale = Vec3::one() * 1.02;
next.leg_br.position = Vec3::new( next.leg_br.position = Vec3::new(
skeleton_attr.leg_b.0, skeleton_attr.leg_b.0,
skeleton_attr.leg_b.1 + amplitude3 * foot4a * -1.7, skeleton_attr.leg_b.1 + amplitude3 * foot4a * -1.9,
skeleton_attr.leg_b.2 + canceler + amplitude3 * foot4b * -1.9, skeleton_attr.leg_b.2 + canceler + amplitude3 * ((foot4b * -2.6).min(1.0)),
); );
next.leg_br.orientation = Quaternion::rotation_x(amplitude3 * foot4b * -0.45 - 0.2) next.leg_br.orientation =
Quaternion::rotation_x(amplitude3 * foot4b * -0.5 - 0.2 * canceler)
* Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_y(tilt * 1.5)
* Quaternion::rotation_z(tilt * -1.5); * Quaternion::rotation_z(tilt * -1.5);
next.leg_br.scale = Vec3::one() * 1.02; next.leg_br.scale = Vec3::one() * 1.02;
@ -200,10 +209,12 @@ impl Animation for RunAnimation {
-skeleton_attr.feet_f.0, -skeleton_attr.feet_f.0,
skeleton_attr.feet_f.1, skeleton_attr.feet_f.1,
skeleton_attr.feet_f.2 skeleton_attr.feet_f.2
+ ((amplitude2 * foot1a * 2.7 * skeleton_attr.maximize).max(0.0)), + ((amplitude2 * foot1a * 2.7
+ amplitude2 * foot1a * skeleton_attr.maximize * canceler)
.max(0.0)),
); );
next.foot_fl.orientation = Quaternion::rotation_x( next.foot_fl.orientation = Quaternion::rotation_x(
(1.0 - skeleton_attr.dampen) * -1.0 + amplitude2 * foot1b * -0.9, ((1.0 - skeleton_attr.dampen) * -1.0) * canceler + amplitude2 * foot1b * -0.7,
) * Quaternion::rotation_y(tilt * -1.0); ) * Quaternion::rotation_y(tilt * -1.0);
next.foot_fl.scale = Vec3::one() * 0.96; next.foot_fl.scale = Vec3::one() * 0.96;
@ -211,30 +222,32 @@ impl Animation for RunAnimation {
skeleton_attr.feet_f.0, skeleton_attr.feet_f.0,
skeleton_attr.feet_f.1, skeleton_attr.feet_f.1,
skeleton_attr.feet_f.2 skeleton_attr.feet_f.2
+ ((amplitude2 * foot2a * 2.7 * skeleton_attr.maximize).max(0.0)), + ((amplitude2 * foot2a * 2.7
+ amplitude2 * foot2a * skeleton_attr.maximize * canceler)
.max(0.0)),
); );
next.foot_fr.orientation = Quaternion::rotation_x( next.foot_fr.orientation = Quaternion::rotation_x(
(1.0 - skeleton_attr.dampen) * -1.0 + amplitude2 * foot2b * -0.9, ((1.0 - skeleton_attr.dampen) * -1.0) * canceler + amplitude2 * foot2b * -0.7,
) * Quaternion::rotation_y(tilt * -1.0); ) * Quaternion::rotation_y(tilt * -1.0);
next.foot_fr.scale = Vec3::one() * 0.96; next.foot_fr.scale = Vec3::one() * 0.96;
next.foot_bl.position = Vec3::new( next.foot_bl.position = Vec3::new(
-skeleton_attr.feet_b.0, -skeleton_attr.feet_b.0,
skeleton_attr.feet_b.1, skeleton_attr.feet_b.1,
skeleton_attr.feet_b.2 + ((amplitude2 * foot3a * 1.8).max(-0.0)), skeleton_attr.feet_b.2 + ((amplitude2 * foot3a * 2.5).max(-1.0)),
); );
next.foot_bl.orientation = next.foot_bl.orientation =
Quaternion::rotation_x(amplitude2 * foot3b * -1.3 - 0.2 * speed / 24.0) Quaternion::rotation_x(amplitude2 * foot3b * -0.5 - 0.2 * canceler)
* Quaternion::rotation_y(tilt * -1.0); * Quaternion::rotation_y(tilt * -1.0);
next.foot_bl.scale = Vec3::one() * 0.96; next.foot_bl.scale = Vec3::one() * 0.96;
next.foot_br.position = Vec3::new( next.foot_br.position = Vec3::new(
skeleton_attr.feet_b.0, skeleton_attr.feet_b.0,
skeleton_attr.feet_b.1, skeleton_attr.feet_b.1,
skeleton_attr.feet_b.2 + ((amplitude2 * foot4a * 1.8).max(0.0)), skeleton_attr.feet_b.2 + ((amplitude2 * foot4a * 2.5).max(-1.0)),
); );
next.foot_br.orientation = next.foot_br.orientation =
Quaternion::rotation_x(amplitude2 * foot4b * -1.3 - 0.2 * speed / 24.0) Quaternion::rotation_x(amplitude2 * foot4b * -0.5 - 0.2 * canceler)
* Quaternion::rotation_y(tilt * -1.0); * Quaternion::rotation_y(tilt * -1.0);
next.foot_br.scale = Vec3::one() * 0.96; next.foot_br.scale = Vec3::one() * 0.96;
next next