Adds Xtilt to BirdLarge skeleton

This commit is contained in:
Snowram 2021-09-21 01:19:34 +02:00 committed by Robin Gilh
parent cf6bf74f7a
commit 3c2de422db
2 changed files with 11 additions and 6 deletions

View File

@ -7,7 +7,7 @@ use core::f32::consts::PI;
pub struct RunAnimation;
impl Animation for RunAnimation {
type Dependency<'a> = (Vec3<f32>, Vec3<f32>, Vec3<f32>, f32);
type Dependency<'a> = (Vec3<f32>, Vec3<f32>, Vec3<f32>, Vec3<f32>, f32);
type Skeleton = BirdLargeSkeleton;
#[cfg(feature = "use-dyn-lib")]
@ -16,7 +16,7 @@ impl Animation for RunAnimation {
#[cfg_attr(feature = "be-dyn-lib", export_name = "bird_large_run")]
fn update_skeleton_inner<'a>(
skeleton: &Self::Skeleton,
(velocity, orientation, last_ori, acc_vel): Self::Dependency<'a>,
(velocity, orientation, last_ori, avg_vel, acc_vel): Self::Dependency<'a>,
anim_time: f32,
rate: &mut f32,
s_a: &SkeletonAttr,
@ -64,6 +64,7 @@ impl Animation for RunAnimation {
} else {
0.0
} * 1.3;
let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()) * speednorm;
next.head.scale = Vec3::one() * 0.99;
next.neck.scale = Vec3::one() * 1.01;
@ -110,9 +111,9 @@ impl Animation for RunAnimation {
next.chest.position = Vec3::new(
0.0,
s_a.chest.0,
s_a.chest.1 + short * 0.5 + speednorm * -2.0,
s_a.chest.1 + short * 0.5 + x_tilt * 10.0 + speednorm * -2.0,
) * s_a.scaler;
next.chest.orientation = Quaternion::rotation_x(-0.1 + short * 0.07)
next.chest.orientation = Quaternion::rotation_x(-0.1 + short * 0.07 + x_tilt)
* Quaternion::rotation_y(tilt * 0.8)
* Quaternion::rotation_z(shortalt * 0.10);
@ -177,9 +178,9 @@ impl Animation for RunAnimation {
next.chest.position = Vec3::new(
0.0,
s_a.chest.0,
s_a.chest.1 + short * 0.5 + 0.5 * speednorm,
s_a.chest.1 + short * 0.5 + x_tilt * 10.0 + 0.5 * speednorm,
) * s_a.scaler;
next.chest.orientation = Quaternion::rotation_x(short * 0.07)
next.chest.orientation = Quaternion::rotation_x(short * 0.07 + x_tilt)
* Quaternion::rotation_y(tilt * 0.8)
* Quaternion::rotation_z(shortalt * 0.10);

View File

@ -3336,6 +3336,9 @@ impl FigureMgr {
FigureState::new(renderer, BirdLargeSkeleton::default(), body)
});
// 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,
@ -3366,6 +3369,7 @@ impl FigureMgr {
// TODO: Update to use the quaternion.
ori * anim::vek::Vec3::<f32>::unit_y(),
state.last_ori * anim::vek::Vec3::<f32>::unit_y(),
rel_avg_vel,
state.acc_vel,
),
state.state_time,