mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'zesterer/better-anims' into 'master'
Improving some animations See merge request veloren/veloren!4127
This commit is contained in:
commit
0f2d4c261a
@ -150,7 +150,7 @@
|
||||
"voxygen.audio.sfx.footsteps.stepdirt_4",
|
||||
"voxygen.audio.sfx.footsteps.stepdirt_5",
|
||||
],
|
||||
threshold: 1.8,
|
||||
threshold: 0.5,
|
||||
subtitle: "subtitle-footsteps_earth",
|
||||
),
|
||||
QuadRun(Earth): (
|
||||
@ -161,7 +161,7 @@
|
||||
"voxygen.audio.sfx.footsteps.stepdirt_4",
|
||||
"voxygen.audio.sfx.footsteps.stepdirt_5",
|
||||
],
|
||||
threshold: 0.9,
|
||||
threshold: 0.25,
|
||||
subtitle: "subtitle-footsteps_earth",
|
||||
),
|
||||
Run(Grass): (
|
||||
@ -173,7 +173,7 @@
|
||||
"voxygen.audio.sfx.footsteps.stepgrass_5",
|
||||
"voxygen.audio.sfx.footsteps.stepgrass_6",
|
||||
],
|
||||
threshold: 1.8,
|
||||
threshold: 1.0,
|
||||
subtitle: "subtitle-footsteps_grass",
|
||||
),
|
||||
QuadRun(Grass): (
|
||||
@ -185,7 +185,7 @@
|
||||
"voxygen.audio.sfx.footsteps.stepgrass_5",
|
||||
"voxygen.audio.sfx.footsteps.stepgrass_6",
|
||||
],
|
||||
threshold: 0.9,
|
||||
threshold: 0.5,
|
||||
subtitle: "subtitle-footsteps_grass",
|
||||
),
|
||||
// For when sand 1) exists and 2) has unique sounds
|
||||
@ -215,7 +215,7 @@
|
||||
"voxygen.audio.sfx.footsteps.snow_step_2",
|
||||
"voxygen.audio.sfx.footsteps.snow_step_3",
|
||||
],
|
||||
threshold: 1.8,
|
||||
threshold: 1.0,
|
||||
subtitle: "subtitle-footsteps_snow",
|
||||
),
|
||||
QuadRun(Snow): (
|
||||
@ -224,7 +224,7 @@
|
||||
"voxygen.audio.sfx.footsteps.snow_step_2",
|
||||
"voxygen.audio.sfx.footsteps.snow_step_3",
|
||||
],
|
||||
threshold: 0.9,
|
||||
threshold: 0.5,
|
||||
subtitle: "subtitle-footsteps_snow",
|
||||
),
|
||||
Run(Rock): (
|
||||
@ -242,7 +242,7 @@
|
||||
"voxygen.audio.sfx.footsteps.stone_step_11",
|
||||
"voxygen.audio.sfx.footsteps.stone_step_12",
|
||||
],
|
||||
threshold: 1.8,
|
||||
threshold: 1.0,
|
||||
subtitle: "subtitle-footsteps_rock",
|
||||
),
|
||||
QuadRun(Rock): (
|
||||
@ -260,7 +260,7 @@
|
||||
"voxygen.audio.sfx.footsteps.stone_step_11",
|
||||
"voxygen.audio.sfx.footsteps.stone_step_12",
|
||||
],
|
||||
threshold: 0.9,
|
||||
threshold: 0.5,
|
||||
subtitle: "subtitle-footsteps_rock",
|
||||
),
|
||||
Roll: (
|
||||
|
@ -2404,6 +2404,7 @@ impl From<(&CharacterAbility, AbilityInfo, &JoinData<'_>)> for CharacterState {
|
||||
timer: Duration::default(),
|
||||
stage_section: StageSection::Buildup,
|
||||
was_wielded: false, // false by default. utils might set it to true
|
||||
prev_aimed_dir: None,
|
||||
is_sneaking: false,
|
||||
was_combo: None,
|
||||
}),
|
||||
|
@ -275,6 +275,18 @@ impl Body {
|
||||
)
|
||||
}
|
||||
|
||||
/// The length of the stride of the body, in metres (not accounting for
|
||||
/// different legs)
|
||||
pub fn stride_length(&self) -> f32 {
|
||||
if let Body::Humanoid(body) = self {
|
||||
body.scaler() * 3.75
|
||||
} else {
|
||||
// Rough heuristic
|
||||
let dims = self.dimensions();
|
||||
0.65 + (dims.y + dims.z) * 0.6
|
||||
}
|
||||
}
|
||||
|
||||
pub fn scale(&self) -> Scale {
|
||||
let s = match self {
|
||||
Body::BirdMedium(bird_medium) => match bird_medium.species {
|
||||
|
@ -9,6 +9,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::*,
|
||||
},
|
||||
util::Dir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -41,6 +42,8 @@ pub struct Data {
|
||||
pub stage_section: StageSection,
|
||||
/// Had weapon
|
||||
pub was_wielded: bool,
|
||||
/// What direction were we previously aiming in?
|
||||
pub prev_aimed_dir: Option<Dir>,
|
||||
/// Is sneaking, true if previous state was also considered sneaking
|
||||
pub is_sneaking: bool,
|
||||
/// Was in state with combo
|
||||
|
@ -58,6 +58,7 @@ impl Body {
|
||||
quadruped_small::Species::Rabbit => 110.0,
|
||||
quadruped_small::Species::Cat => 150.0,
|
||||
quadruped_small::Species::Quokka => 100.0,
|
||||
quadruped_small::Species::MossySnail => 20.0,
|
||||
_ => 125.0,
|
||||
},
|
||||
Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species {
|
||||
@ -1246,6 +1247,9 @@ fn handle_ability(
|
||||
roll.is_sneaking = true;
|
||||
}
|
||||
}
|
||||
if data.character.is_aimed() {
|
||||
roll.prev_aimed_dir = Some(data.controller.inputs.look_dir);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -1553,6 +1557,11 @@ pub fn end_ability(data: &JoinData<'_>, update: &mut StateUpdate) {
|
||||
time_entered: *data.time,
|
||||
});
|
||||
}
|
||||
if let CharacterState::Roll(roll) = data.character {
|
||||
if let Some(dir) = roll.prev_aimed_dir {
|
||||
update.ori = dir.into();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn end_melee_ability(data: &JoinData<'_>, update: &mut StateUpdate) {
|
||||
|
@ -69,6 +69,7 @@ impl Animation for ChargeswingAnimation {
|
||||
Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4);
|
||||
next.hand_r.position =
|
||||
Vec3::new(-s_a.sc.0 + 6.0 + move1 * -12.0, -4.0 + move1 * 3.0, -2.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(PI * 0.5);
|
||||
next.control.position = Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2 + move2 * 5.0);
|
||||
next.control.orientation = Quaternion::rotation_x(s_a.sc.3 + move1 * -0.9)
|
||||
* Quaternion::rotation_y(move1 * 1.0 + move2 * -1.0)
|
||||
|
@ -230,7 +230,7 @@ impl Animation for FinisherMeleeAnimation {
|
||||
let move2_reset = ((move2 - 0.5).abs() - 0.5).abs() * 2.0;
|
||||
let move2 = move2 * pullback;
|
||||
|
||||
next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2);
|
||||
next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2 + 10.0);
|
||||
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);
|
||||
|
@ -29,7 +29,7 @@ impl Animation for GlidingAnimation {
|
||||
next.glider_trails = true;
|
||||
|
||||
let speednorm = velocity.magnitude().min(50.0) / 50.0;
|
||||
let slow = (acc_vel * 0.5).sin();
|
||||
let slow = (acc_vel * 0.25).sin();
|
||||
|
||||
let head_look = Vec2::new(
|
||||
((global_time + anim_time) / 4.0).floor().mul(7331.0).sin() * 0.5,
|
||||
@ -56,6 +56,7 @@ impl Animation for GlidingAnimation {
|
||||
next.shorts.orientation = Quaternion::rotation_z(0.0);
|
||||
next.belt.position = Vec3::new(0.0, s_a.belt.0, s_a.belt.1);
|
||||
next.shorts.position = Vec3::new(0.0, s_a.shorts.0, s_a.shorts.1);
|
||||
next.shorts.orientation = Quaternion::rotation_z(-speedlog + slow * 0.15);
|
||||
|
||||
next.hand_l.position =
|
||||
glider_pos + glider_ori * Vec3::new(-s_a.hand.0 + -2.0, s_a.hand.1 + 8.0, s_a.hand.2);
|
||||
@ -65,11 +66,19 @@ impl Animation for GlidingAnimation {
|
||||
glider_pos + glider_ori * Vec3::new(s_a.hand.0 + 2.0, s_a.hand.1 + 8.0, s_a.hand.2);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(3.35) * Quaternion::rotation_y(-0.2);
|
||||
|
||||
next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1 + speedlog * -1.0, s_a.foot.2);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(-speedlog + slow * -0.3 * speedlog);
|
||||
next.foot_l.position = Vec3::new(
|
||||
-s_a.foot.0,
|
||||
s_a.foot.1 + speedlog * -1.0 - slow * 2.3,
|
||||
s_a.foot.2,
|
||||
);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(-speedlog + slow * -1.3 * speedlog);
|
||||
|
||||
next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1 + speedlog * -1.0, s_a.foot.2);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(-speedlog + slow * 0.3 * speedlog);
|
||||
next.foot_r.position = Vec3::new(
|
||||
s_a.foot.0,
|
||||
s_a.foot.1 + speedlog * -1.0 + slow * 2.3,
|
||||
s_a.foot.2,
|
||||
);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(-speedlog + slow * 1.3 * speedlog);
|
||||
|
||||
next
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ impl Animation for JumpAnimation {
|
||||
let check = subtract - subtract.trunc();
|
||||
let switch = (check - 0.5).signum();
|
||||
|
||||
let falling = (velocity.z * 0.1).clamped(-1.0, 1.0);
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
let speednorm = (speed / 10.0).min(1.0);
|
||||
|
||||
@ -115,14 +116,14 @@ impl Animation for JumpAnimation {
|
||||
next.foot_l.position = Vec3::new(
|
||||
-s_a.foot.0,
|
||||
s_a.foot.1 - 5.0 * switch,
|
||||
2.0 + s_a.foot.2 + slow * 1.5,
|
||||
2.0 + s_a.foot.2 + slow * 1.5 + falling * -2.0,
|
||||
);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(-0.8 * switch + slow * -0.2 * switch);
|
||||
|
||||
next.foot_r.position = Vec3::new(
|
||||
s_a.foot.0,
|
||||
s_a.foot.1 + 5.0 * switch,
|
||||
2.0 + s_a.foot.2 + slow * 1.5,
|
||||
2.0 + s_a.foot.2 + slow * 1.5 + falling * -2.0,
|
||||
);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(0.8 * switch + slow * 0.2 * switch);
|
||||
|
||||
|
@ -72,6 +72,8 @@ impl Animation for MountAnimation {
|
||||
0.0
|
||||
} * 1.3;
|
||||
|
||||
let bob = (anim_time * 12.0).sin();
|
||||
|
||||
next.head.scale = Vec3::one() * s_a.head_scale;
|
||||
next.chest.scale = Vec3::one() * 1.01;
|
||||
next.hand_l.scale = Vec3::one() * 1.04;
|
||||
@ -89,7 +91,8 @@ impl Animation for MountAnimation {
|
||||
|
||||
next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1);
|
||||
next.chest.orientation =
|
||||
Quaternion::rotation_x(-0.4 + tilt.abs() * -1.5) * Quaternion::rotation_y(tilt * 2.0);
|
||||
Quaternion::rotation_x(-0.4 + tilt.abs() * -1.5 - bob * speed * 0.0)
|
||||
* Quaternion::rotation_y(tilt * 2.0);
|
||||
|
||||
next.belt.position = Vec3::new(0.0, s_a.belt.0 + 0.5, s_a.belt.1 + 0.5);
|
||||
next.belt.orientation = Quaternion::rotation_x(0.2) * Quaternion::rotation_y(tilt * -0.5);
|
||||
@ -99,13 +102,21 @@ impl Animation for MountAnimation {
|
||||
next.shorts.position = Vec3::new(0.0, s_a.shorts.0 + 1.0, s_a.shorts.1 + 1.0);
|
||||
next.shorts.orientation = Quaternion::rotation_x(0.3) * Quaternion::rotation_y(tilt * -1.0);
|
||||
|
||||
next.hand_l.position = Vec3::new(-s_a.hand.0 + 3.0, s_a.hand.1 + 9.0, s_a.hand.2 + 4.0);
|
||||
next.hand_l.position = Vec3::new(
|
||||
-s_a.hand.0 + 3.0,
|
||||
s_a.hand.1 + 6.0,
|
||||
s_a.hand.2 + 2.0 + (bob + 1.0) * speed * 0.1,
|
||||
);
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_z(-PI / 2.0 + 0.5);
|
||||
Quaternion::rotation_x(PI * 0.4) * Quaternion::rotation_z(-PI / 2.0 + 1.0);
|
||||
|
||||
next.hand_r.position = Vec3::new(s_a.hand.0 - 3.0, s_a.hand.1 + 9.0, s_a.hand.2 + 4.0);
|
||||
next.hand_r.position = Vec3::new(
|
||||
s_a.hand.0 - 3.0,
|
||||
s_a.hand.1 + 6.0,
|
||||
s_a.hand.2 + 2.0 + (bob + 1.0) * speed * 0.1,
|
||||
);
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_z(PI / 2.0 - 0.5);
|
||||
Quaternion::rotation_x(PI * 0.4) * Quaternion::rotation_z(PI / 2.0 - 1.0);
|
||||
|
||||
next.foot_l.position = Vec3::new(-s_a.foot.0 - 2.0, 4.0 + s_a.foot.1, s_a.foot.2);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(0.5) * Quaternion::rotation_y(0.5);
|
||||
|
@ -5,6 +5,7 @@ use super::{
|
||||
use common::{
|
||||
comp::item::{Hands, ToolKind},
|
||||
states::utils::StageSection,
|
||||
util::Dir,
|
||||
};
|
||||
use std::f32::consts::PI;
|
||||
|
||||
@ -19,6 +20,7 @@ type RollAnimationDependency = (
|
||||
Vec3<f32>,
|
||||
f32,
|
||||
Option<StageSection>,
|
||||
Option<Dir>,
|
||||
);
|
||||
|
||||
impl Animation for RollAnimation {
|
||||
@ -41,6 +43,7 @@ impl Animation for RollAnimation {
|
||||
last_ori,
|
||||
_global_time,
|
||||
stage_section,
|
||||
prev_aimed_dir,
|
||||
): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
rate: &mut f32,
|
||||
@ -257,9 +260,26 @@ impl Animation for RollAnimation {
|
||||
next.foot_r.orientation = Quaternion::rotation_x(0.9 * movement1);
|
||||
|
||||
next.torso.position = Vec3::new(0.0, 0.0, 7.0 * movement1);
|
||||
next.torso.orientation =
|
||||
Quaternion::rotation_x(-0.3 + movement1 * -0.4 + movement2 * -2.0 * PI)
|
||||
* Quaternion::rotation_z(tilt * -10.0);
|
||||
let roll_spin = Quaternion::rotation_x(-0.3 + movement1 * -0.4 + movement2 * -2.0 * PI);
|
||||
next.torso.orientation = if let Some(prev_aimed_dir) = prev_aimed_dir {
|
||||
// This is *slightly* hacky. Because rolling is not strafed movement, we
|
||||
// actually correct for the entity orientation to make sure that our
|
||||
// rolling motion is correct with respect to our original orientation
|
||||
roll_spin
|
||||
* Dir::from_unnormalized(orientation.into_array().into())
|
||||
.zip(prev_aimed_dir.to_horizontal())
|
||||
.map(|(ori, prev_aimed_dir)| {
|
||||
Quaternion::<f32>::from_vec4(
|
||||
ori.rotation_between(prev_aimed_dir)
|
||||
.into_vec4()
|
||||
.into_array()
|
||||
.into(),
|
||||
)
|
||||
})
|
||||
.unwrap_or_default()
|
||||
} else {
|
||||
roll_spin * Quaternion::rotation_z(tilt * -10.0)
|
||||
};
|
||||
|
||||
next
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ impl Animation for RunAnimation {
|
||||
let impact = (avg_vel.z).max(-8.0);
|
||||
let speednorm = (speed / 9.4).powf(0.6);
|
||||
|
||||
let lab: f32 = 0.8;
|
||||
let lab: f32 = 0.5 / s_a.scaler;
|
||||
|
||||
let footrotl = ((1.0 / (0.5 + (0.5) * ((acc_vel * 1.6 * lab + PI * 1.4).sin()).powi(2)))
|
||||
.sqrt())
|
||||
@ -83,8 +83,8 @@ impl Animation for RunAnimation {
|
||||
let shortalt = (acc_vel * lab * 3.2 + PI / 1.0).sin();
|
||||
let shortalt2 = (acc_vel * lab * 3.2).sin();
|
||||
|
||||
let short = ((5.0 / (1.5 + 3.5 * ((acc_vel * lab * 1.6).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab * 1.6).sin());
|
||||
let short = ((5.0 / (1.5 + 3.5 * ((acc_vel * lab * 1.6 + PI * 0.5).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab * 1.6 + PI * 0.5).sin());
|
||||
let direction = velocity.y * -0.098 * orientation.y + velocity.x * -0.098 * orientation.x;
|
||||
|
||||
let side =
|
||||
@ -111,91 +111,97 @@ impl Animation for RunAnimation {
|
||||
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + short * 0.1);
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_z(tilt * -2.5 + head_look.x * 0.2 + short * -0.06)
|
||||
Quaternion::rotation_z(tilt * -2.5 + head_look.x * 0.2 + short * -0.3)
|
||||
* Quaternion::rotation_x(head_look.y + 0.45 * speednorm + shortalt2 * -0.05);
|
||||
next.head.scale = Vec3::one() * s_a.head_scale;
|
||||
|
||||
next.chest.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.chest.0,
|
||||
s_a.chest.1 + 1.0 * speednorm + shortalt * -0.2,
|
||||
s_a.chest.1 + 1.0 * speednorm + shortalt * 1.1,
|
||||
);
|
||||
next.chest.orientation = Quaternion::rotation_z(short * 0.16 + tilt * -0.6)
|
||||
* Quaternion::rotation_y(tilt * 1.6)
|
||||
* Quaternion::rotation_x(
|
||||
impact * 0.06 + shortalt2 * 0.03 + speednorm * -0.5 + (tilt.abs()),
|
||||
);
|
||||
next.chest.orientation = Quaternion::rotation_x(impact * 0.07)
|
||||
* Quaternion::rotation_z(short * 0.4 + tilt * -0.6)
|
||||
* Quaternion::rotation_y(tilt * 2.0 + short * 0.2)
|
||||
* Quaternion::rotation_x(shortalt2 * 0.03 + speednorm * -0.5 + tilt.abs());
|
||||
|
||||
next.belt.position = Vec3::new(0.0, 0.25 + s_a.belt.0, 0.25 + s_a.belt.1);
|
||||
next.belt.orientation = Quaternion::rotation_x(0.1 * speednorm)
|
||||
* Quaternion::rotation_z(short * 0.1 + tilt * -1.1)
|
||||
* Quaternion::rotation_z(short * -0.2 + tilt * -1.1)
|
||||
* Quaternion::rotation_y(tilt * 0.5);
|
||||
|
||||
next.back.position = Vec3::new(0.0, s_a.back.0, s_a.back.1);
|
||||
next.back.orientation =
|
||||
Quaternion::rotation_x(-0.05 + short * 0.02 + noisea * 0.02 + noiseb * 0.02);
|
||||
Quaternion::rotation_x(-0.05 + short * 0.02 + noisea * 0.02 + noiseb * 0.02)
|
||||
* Quaternion::rotation_y(foothorir * 0.2);
|
||||
|
||||
next.shorts.position = Vec3::new(0.0, 0.65 + s_a.shorts.0, 0.65 * speednorm + s_a.shorts.1);
|
||||
next.shorts.orientation = Quaternion::rotation_x(0.2 * speednorm)
|
||||
* Quaternion::rotation_z(short * 0.25 + tilt * -1.5)
|
||||
* Quaternion::rotation_y(tilt * 0.7);
|
||||
* Quaternion::rotation_z(short * -0.9 + tilt * -1.5)
|
||||
* Quaternion::rotation_y(tilt * 0.7 + short * 0.08);
|
||||
|
||||
next.hand_l.position = Vec3::new(
|
||||
-s_a.hand.0 + foothorir * -1.3 * speednorm,
|
||||
3.0 * speednorm + s_a.hand.1 + foothorir * -7.0 * speednorm,
|
||||
1.5 * speednorm + s_a.hand.2 - foothorir * 5.5 * speednorm,
|
||||
-s_a.hand.0 * 1.2 - foothorir * 1.3 * speednorm
|
||||
+ (foothoril.abs().powf(2.0) - 0.5) * speednorm * 4.0,
|
||||
s_a.hand.1 * 1.3 + foothorir * -7.0 * speednorm,
|
||||
s_a.hand.2 - foothorir * 2.75 * speednorm + foothoril.abs().powf(3.0) * speednorm * 8.0,
|
||||
);
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(0.6 * speednorm + (footrotr * -1.2) * speednorm)
|
||||
* Quaternion::rotation_y(footrotr * 0.4 * speednorm);
|
||||
Quaternion::rotation_x(0.6 * speednorm + (footrotr * -1.5 + 0.5) * speednorm)
|
||||
* Quaternion::rotation_y(footrotr * 0.4 * speednorm + PI * 0.07);
|
||||
|
||||
next.hand_r.position = Vec3::new(
|
||||
s_a.hand.0 + foothoril * 1.3 * speednorm,
|
||||
3.0 * speednorm + s_a.hand.1 + foothoril * -7.0 * speednorm,
|
||||
1.5 * speednorm + s_a.hand.2 - foothoril * 5.5 * speednorm,
|
||||
s_a.hand.0 * 1.2 + foothoril * 1.3 * speednorm
|
||||
- (foothorir.abs().powf(2.0) - 0.5) * speednorm * 4.0,
|
||||
s_a.hand.1 * 1.3 + foothoril * -7.0 * speednorm,
|
||||
s_a.hand.2 - foothoril * 2.75 * speednorm + foothorir.abs().powf(3.0) * speednorm * 8.0,
|
||||
);
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(0.6 * speednorm + (footrotl * -1.2) * speednorm)
|
||||
* Quaternion::rotation_y(footrotl * -0.4 * speednorm);
|
||||
Quaternion::rotation_x(0.6 * speednorm + (footrotl * -1.5 + 0.5) * speednorm)
|
||||
* Quaternion::rotation_y(footrotl * -0.4 * speednorm - PI * 0.07);
|
||||
|
||||
//
|
||||
next.foot_l.position = Vec3::new(
|
||||
-s_a.foot.0 + footstrafel * sideabs * 3.0 + tilt * -2.0,
|
||||
-s_a.foot.0 + footstrafel * sideabs * 3.0 + tilt * -10.0,
|
||||
s_a.foot.1
|
||||
+ (1.0 - sideabs) * (-0.5 * speednorm + foothoril * -10.5 * speednorm)
|
||||
+ (direction * 5.0).max(0.0),
|
||||
s_a.foot.2
|
||||
+ (1.0 - sideabs) * (2.0 * speednorm + ((footvertl * -2.5 * speednorm).max(-1.0)))
|
||||
+ side * ((footvertsl * 1.5).max(-1.0)),
|
||||
+ (1.0 - sideabs) * (1.25 * speednorm + ((footvertl * -5.0 * speednorm).max(-1.0)))
|
||||
+ side * ((footvertsl * 1.5).max(-1.0))
|
||||
+ foothoril.abs().powf(6.0) * speednorm * 5.0,
|
||||
);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(
|
||||
(1.0 - sideabs) * (-0.2 + foothoril * -0.9 * speednorm) + sideabs * -0.5,
|
||||
(1.0 - sideabs) * (-0.3 + foothoril * -1.5 * speednorm) + sideabs * -0.5,
|
||||
) * Quaternion::rotation_y(
|
||||
tilt * 2.0 + side * 0.3 + side * (foothoril * 0.3),
|
||||
tilt * -0.5 + side * 0.3 + side * (foothoril * 0.3),
|
||||
) * Quaternion::rotation_z(side * 0.2);
|
||||
|
||||
next.foot_r.position = Vec3::new(
|
||||
s_a.foot.0 + footstrafer * sideabs * 3.0 + tilt * -2.0,
|
||||
s_a.foot.0 + footstrafer * sideabs * 3.0 + tilt * -10.0,
|
||||
s_a.foot.1
|
||||
+ (1.0 - sideabs) * (-0.5 * speednorm + foothorir * -10.5 * speednorm)
|
||||
+ (direction * 5.0).max(0.0),
|
||||
s_a.foot.2
|
||||
+ (1.0 - sideabs) * (2.0 * speednorm + ((footvertr * -2.5 * speednorm).max(-1.0)))
|
||||
+ side * ((footvertsr * -1.5).max(-1.0)),
|
||||
+ (1.0 - sideabs) * (1.25 * speednorm + ((footvertr * -5.0 * speednorm).max(-1.0)))
|
||||
+ side * ((footvertsr * -1.5).max(-1.0))
|
||||
+ foothorir.abs().powf(6.0) * speednorm * 5.0,
|
||||
);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(
|
||||
(1.0 - sideabs) * (-0.2 + foothorir * -0.9 * speednorm) + sideabs * -0.5,
|
||||
(1.0 - sideabs) * (-0.3 + foothorir * -1.5 * speednorm) + sideabs * -0.5,
|
||||
) * Quaternion::rotation_y(
|
||||
tilt * 2.0 + side * 0.3 + side * (foothorir * 0.3),
|
||||
tilt * -0.5 + side * 0.3 + side * (foothorir * 0.3),
|
||||
) * Quaternion::rotation_z(side * 0.2);
|
||||
//
|
||||
|
||||
next.shoulder_l.position = Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
|
||||
next.shoulder_l.orientation = Quaternion::rotation_x(short * 0.15);
|
||||
next.shoulder_l.orientation =
|
||||
Quaternion::rotation_x(short * 0.15 + (footrotl * 1.2 + 0.5) * speednorm);
|
||||
next.shoulder_l.scale = Vec3::one() * 1.1;
|
||||
|
||||
next.shoulder_r.position = Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
|
||||
next.shoulder_r.orientation = Quaternion::rotation_x(short * -0.15);
|
||||
next.shoulder_r.orientation =
|
||||
Quaternion::rotation_x(short * -0.15 + (footrotr * 1.2 + 0.5) * speednorm);
|
||||
next.shoulder_r.scale = Vec3::one() * 1.1;
|
||||
|
||||
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
|
||||
@ -266,6 +272,7 @@ impl Animation for RunAnimation {
|
||||
s_a.hand.2 + 12.0 + impact * -0.1,
|
||||
);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(2.25) * Quaternion::rotation_z(0.9);
|
||||
next.shoulder_r.orientation = Quaternion::rotation_x(short * -0.15 + 2.0);
|
||||
|
||||
let fast = (anim_time * 8.0).sin();
|
||||
let fast2 = (anim_time * 6.0 + 8.0).sin();
|
||||
|
@ -60,18 +60,20 @@ impl Animation for SitAnimation {
|
||||
next.shorts.orientation = Quaternion::rotation_x(stop * 0.6);
|
||||
|
||||
next.hand_l.position = Vec3::new(
|
||||
-s_a.hand.0,
|
||||
-s_a.hand.0 - 1.0,
|
||||
s_a.hand.1 + slowa * 0.15,
|
||||
s_a.hand.2 + slow * 0.7 + stop * -2.0,
|
||||
s_a.hand.2 + slow * 0.7 + stop * -2.0 - 1.0,
|
||||
);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(slowa * -0.1 + slow * 0.1);
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(slowa * -0.1 + slow * 0.1) * Quaternion::rotation_y(PI * 0.15);
|
||||
|
||||
next.hand_r.position = Vec3::new(
|
||||
s_a.hand.0,
|
||||
s_a.hand.0 + 1.0,
|
||||
s_a.hand.1 + slowa * 0.15,
|
||||
s_a.hand.2 + slow * 0.7 + stop * -2.0,
|
||||
s_a.hand.2 + slow * 0.7 + stop * -2.0 - 1.0,
|
||||
);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(slow * -0.1 + slowa * 0.1);
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(slow * -0.1 + slowa * 0.1) * Quaternion::rotation_y(PI * -0.15);
|
||||
|
||||
next.foot_l.position = Vec3::new(-s_a.foot.0, 4.0 + s_a.foot.1, 3.0 + s_a.foot.2);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(slow * 0.1 + stop * 1.2 + slow * 0.1);
|
||||
|
@ -185,6 +185,7 @@ impl Animation for StandAnimation {
|
||||
* Quaternion::rotation_z(0.9)
|
||||
* Quaternion::rotation_y(head_look.x * 1.5)
|
||||
* Quaternion::rotation_x(head_look.y * 1.5);
|
||||
next.shoulder_r.orientation = Quaternion::rotation_x(slow * 0.15 + 2.0);
|
||||
|
||||
let fast = (anim_time * 5.0).sin();
|
||||
let fast2 = (anim_time * 4.5 + 8.0).sin();
|
||||
|
@ -54,27 +54,16 @@ impl Animation for WieldAnimation {
|
||||
(global_time + anim_time / 3.0).floor().mul(1337.0).sin() * 0.1,
|
||||
);
|
||||
|
||||
let foothoril = (anim_time * 16.0 * lab + PI * 1.45).sin();
|
||||
|
||||
let beltstatic = (anim_time * 10.0 * lab + PI / 2.0).sin();
|
||||
let footvertlstatic = (anim_time * 10.0 * lab).sin();
|
||||
let footvertrstatic = (anim_time * 10.0 * lab + PI).sin();
|
||||
let footrotl =
|
||||
((1.0 / (0.5 + (0.5) * ((anim_time * 16.0 * lab + PI * 1.4).sin()).powi(2))).sqrt())
|
||||
* ((anim_time * 16.0 * lab + PI * 1.4).sin());
|
||||
|
||||
let shortalt = (anim_time * lab * 16.0 + PI / 2.0).sin();
|
||||
|
||||
let slowalt = (anim_time * 9.0 + PI).cos();
|
||||
let u_slow = (anim_time * 4.5 + PI).sin();
|
||||
let slow = (anim_time * 7.0 + PI).sin();
|
||||
|
||||
let u_slowalt = (anim_time * 5.0 + PI).cos();
|
||||
let short = ((5.0 / (1.5 + 3.5 * ((anim_time * lab * 16.0).sin()).powi(2))).sqrt())
|
||||
* ((anim_time * lab * 16.0).sin());
|
||||
let direction = velocity.y * -0.098 * orientation.y + velocity.x * -0.098 * orientation.x;
|
||||
let side = velocity.x * -0.098 * orientation.y + velocity.y * 0.098 * orientation.x;
|
||||
let strafe = -((1.0 / (direction).abs() - 1.0).min(1.0)).copysign(side);
|
||||
|
||||
let ori: Vec2<f32> = Vec2::from(orientation);
|
||||
let last_ori = Vec2::from(last_ori);
|
||||
@ -100,24 +89,16 @@ impl Animation for WieldAnimation {
|
||||
next.main.orientation = Quaternion::rotation_z(0.0);
|
||||
next.second.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.second.orientation = Quaternion::rotation_z(0.0);
|
||||
if speed > 0.2 && velocity.z == 0.0 {
|
||||
next.chest.orientation = Quaternion::rotation_z(short * 0.1 + strafe * 0.7 * speednorm)
|
||||
* Quaternion::rotation_y(strafe * 0.2)
|
||||
* Quaternion::rotation_x(((direction * 0.4).min(0.3)) * (1.0 - tilt.abs()));
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_z(tilt * -0.5 + strafe * 0.4 * direction + strafe * -0.7)
|
||||
* Quaternion::rotation_x(
|
||||
(0.3 - direction * 0.1) * (1.0 - tilt.abs()) + look_dir.z * 0.7,
|
||||
);
|
||||
|
||||
next.chest.position =
|
||||
Vec3::new(short * strafe, s_a.chest.0, s_a.chest.1 + shortalt * -1.5);
|
||||
} else {
|
||||
let is_moving = speed > 0.2 && velocity.z == 0.0;
|
||||
|
||||
if !is_moving {
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + u_slow * 0.1);
|
||||
next.head.orientation = Quaternion::rotation_z(head_look.x + tilt * -0.75)
|
||||
* Quaternion::rotation_x(head_look.y.abs() + look_dir.z * 0.7);
|
||||
|
||||
next.chest.position = Vec3::new(slowalt * 0.5, s_a.chest.0, s_a.chest.1 + u_slow * 0.5);
|
||||
next.chest.position =
|
||||
Vec3::new(slowalt * 0.2, s_a.chest.0, s_a.chest.1 + u_slow * 0.35);
|
||||
next.belt.orientation = Quaternion::rotation_z(0.15 + beltstatic * tilt * 0.1);
|
||||
|
||||
next.shorts.orientation = Quaternion::rotation_z(0.3 + beltstatic * tilt * 0.2);
|
||||
@ -147,47 +128,30 @@ impl Animation for WieldAnimation {
|
||||
|
||||
next.belt.position = Vec3::new(0.0, s_a.belt.0, s_a.belt.1);
|
||||
|
||||
next.back.orientation = Quaternion::rotation_x(-0.2);
|
||||
// next.back.orientation = Quaternion::rotation_x(-0.2);
|
||||
next.shorts.position = Vec3::new(0.0, s_a.shorts.0, s_a.shorts.1);
|
||||
}
|
||||
match (hands, active_tool_kind, second_tool_kind) {
|
||||
((Some(Hands::Two), _), tool, _) | ((None, Some(Hands::Two)), _, tool) => match tool {
|
||||
Some(ToolKind::Sword) => {
|
||||
next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2);
|
||||
next.control_l.position = next.hand_l.position * 0.2
|
||||
+ Vec3::new(
|
||||
s_a.sc.0,
|
||||
s_a.sc.1 - slow * 2.0 * speednorm,
|
||||
s_a.sc.2 + direction * -5.0 - slow * 2.0 * speednorm,
|
||||
);
|
||||
next.control_r.position = next.control_l.position;
|
||||
|
||||
next.hand_l.position = Vec3::new(s_a.shl.0 - 0.5, 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(
|
||||
foothoril * 1.3 * speednorm - s_a.sc.0 + 6.0,
|
||||
speednorm + foothoril * -3.0 * speednorm - 4.0,
|
||||
-1.0 * speednorm - foothoril * 5.5 * speednorm - 2.0,
|
||||
);
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(
|
||||
0.6 * speednorm + (footrotl * -1.2) * speednorm + 0.9,
|
||||
) * Quaternion::rotation_y(footrotl * -0.4 * speednorm);
|
||||
next.control.position =
|
||||
Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2 + direction * -5.0);
|
||||
next.control.orientation = Quaternion::rotation_x(s_a.sc.3 + u_slow * 0.15)
|
||||
next.control_l.orientation = Quaternion::rotation_x(s_a.sc.3 + u_slow * 0.05)
|
||||
* Quaternion::rotation_z(u_slowalt * 0.04);
|
||||
next.control_r.orientation = Quaternion::rotation_x(s_a.sc.3 + u_slow * 0.15)
|
||||
* Quaternion::rotation_z(u_slowalt * 0.08);
|
||||
//carried position
|
||||
/*
|
||||
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.sc.0+6.0,
|
||||
-4.0,
|
||||
-2.0,
|
||||
);
|
||||
next.hand_r.position = Vec3::zero();
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(0.9);
|
||||
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 )
|
||||
;
|
||||
*/
|
||||
next.hand_l.orientation * Quaternion::rotation_y(PI * 0.3);
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
@ -212,56 +176,52 @@ impl Animation for WieldAnimation {
|
||||
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.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1 + 2.0, s_a.ahr.2);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(s_a.ahr.3)
|
||||
* Quaternion::rotation_z(s_a.ahr.5)
|
||||
* Quaternion::rotation_y(PI * -0.25);
|
||||
|
||||
next.control.position =
|
||||
Vec3::new(s_a.ac.0, s_a.ac.1, s_a.ac.2 + direction * -5.0);
|
||||
Vec3::new(s_a.ac.0, s_a.ac.1 - 4.0, s_a.ac.2 + direction * -5.0);
|
||||
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.position = Vec3::new(s_a.hhl.0, s_a.hhl.1 + 3.0, s_a.hhl.2 - 1.0);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(s_a.hhl.3)
|
||||
* Quaternion::rotation_y(s_a.hhl.4)
|
||||
* Quaternion::rotation_z(s_a.hhl.5);
|
||||
next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2);
|
||||
next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1 + 3.0, s_a.hhr.2 + 1.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(s_a.hhr.3)
|
||||
* Quaternion::rotation_y(s_a.hhr.4)
|
||||
* Quaternion::rotation_z(s_a.hhr.5);
|
||||
|
||||
next.control.position =
|
||||
Vec3::new(s_a.hc.0, s_a.hc.1, s_a.hc.2 + direction * -5.0);
|
||||
Vec3::new(s_a.hc.0 - 1.0, s_a.hc.1, s_a.hc.2 + direction * -5.0 - 3.0);
|
||||
next.control.orientation = Quaternion::rotation_x(s_a.hc.3 + u_slow * 0.15)
|
||||
* Quaternion::rotation_y(s_a.hc.4)
|
||||
* Quaternion::rotation_z(s_a.hc.5 + u_slowalt * 0.07);
|
||||
},
|
||||
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
|
||||
if speed > 0.5 && velocity.z == 0.0 {
|
||||
next.hand_r.position = Vec3::new(
|
||||
7.0 + s_a.hand.0 + foothoril * 1.3,
|
||||
-4.0 + s_a.hand.1 + foothoril * -7.0,
|
||||
1.0 + s_a.hand.2 - foothoril * 5.5,
|
||||
next.control_l.position = next.hand_l.position * 0.2
|
||||
+ Vec3::new(
|
||||
s_a.sc.0 + 1.0,
|
||||
s_a.sc.1 - slow * 2.0 * speednorm - 3.0,
|
||||
s_a.sc.2 + direction * -5.0 - slow * 2.0 * speednorm - 3.0,
|
||||
);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.6 + footrotl * -1.2)
|
||||
* Quaternion::rotation_y(footrotl * -0.4);
|
||||
} else {
|
||||
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_r.position = next.control_l.position;
|
||||
|
||||
next.control.position =
|
||||
Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2 + direction * -5.0);
|
||||
|
||||
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 + u_slow * 0.1)
|
||||
* Quaternion::rotation_y(s_a.stc.4)
|
||||
* Quaternion::rotation_z(s_a.stc.5 + u_slowalt * 0.1);
|
||||
next.hand_l.position = Vec3::new(s_a.shl.0 - 0.5, s_a.shl.1, s_a.shl.2 + 0.0);
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4);
|
||||
next.control_l.orientation = Quaternion::rotation_x(s_a.sc.3 + u_slow * 0.05)
|
||||
* Quaternion::rotation_z(u_slowalt * 0.04);
|
||||
next.control_r.orientation = Quaternion::rotation_x(s_a.sc.3 + u_slow * 0.15)
|
||||
* Quaternion::rotation_z(u_slowalt * 0.08);
|
||||
next.hand_r.position = Vec3::new(0.0, 0.0, 8.0);
|
||||
next.hand_r.orientation =
|
||||
next.hand_l.orientation * Quaternion::rotation_y(PI * 0.3);
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
@ -542,21 +502,29 @@ impl Animation for WieldAnimation {
|
||||
};
|
||||
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) * Quaternion::rotation_y(0.2);
|
||||
next.hand_l.position = Vec3::new(0.0, -0.5, 0.0);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(PI / 2.0)
|
||||
next.control_l.position =
|
||||
next.hand_l.position * Vec3::new(0.5, 0.5, 0.3) + Vec3::new(-4.0, 0.0, 0.0);
|
||||
next.control_l.orientation = Quaternion::lerp(
|
||||
next.hand_l.orientation,
|
||||
Quaternion::rotation_x(PI * -0.5),
|
||||
0.65,
|
||||
);
|
||||
next.hand_l.position = Vec3::new(0.0, -2.0, 0.0);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(PI * 0.5);
|
||||
},
|
||||
(_, _) => {},
|
||||
};
|
||||
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) * Quaternion::rotation_y(-0.2);
|
||||
next.hand_r.position = Vec3::new(0.0, -0.5, 0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(PI / 2.0)
|
||||
next.control_r.position =
|
||||
next.hand_r.position * Vec3::new(0.5, 0.5, 0.3) + Vec3::new(4.0, 0.0, 0.0);
|
||||
next.control_r.orientation = Quaternion::lerp(
|
||||
next.hand_r.orientation,
|
||||
Quaternion::rotation_x(PI * -0.5),
|
||||
0.65,
|
||||
);
|
||||
next.hand_r.position = Vec3::new(0.0, -2.0, 0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(PI * 0.5);
|
||||
},
|
||||
(_, _) => {},
|
||||
};
|
||||
@ -570,9 +538,10 @@ impl Animation for WieldAnimation {
|
||||
};
|
||||
match hands {
|
||||
(None, None) | (Some(Hands::One), None) => {
|
||||
next.hand_r.position = Vec3::new(8.0, 2.0, 1.0);
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(0.5) * Quaternion::rotation_y(-0.25);
|
||||
// next.hand_r.position = Vec3::new(8.0, 2.0, 1.0);
|
||||
// next.hand_r.orientation =
|
||||
// Quaternion::rotation_x(0.5) *
|
||||
// Quaternion::rotation_y(-0.25);
|
||||
},
|
||||
(_, _) => {},
|
||||
};
|
||||
|
@ -9,7 +9,7 @@ use crate::{
|
||||
};
|
||||
use client::Client;
|
||||
use common::{
|
||||
comp::{Body, CharacterState, PhysicsState, Pos, Vel},
|
||||
comp::{Body, CharacterState, PhysicsState, Pos, Scale, Vel},
|
||||
resources::DeltaTime,
|
||||
terrain::{BlockKind, TerrainChunk},
|
||||
vol::ReadVol,
|
||||
@ -26,7 +26,7 @@ struct PreviousEntityState {
|
||||
time: Instant,
|
||||
on_ground: bool,
|
||||
in_water: bool,
|
||||
distance_travelled: f32,
|
||||
steps_taken: f32,
|
||||
}
|
||||
|
||||
impl Default for PreviousEntityState {
|
||||
@ -36,7 +36,7 @@ impl Default for PreviousEntityState {
|
||||
time: Instant::now(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -61,11 +61,12 @@ impl EventMapper for MovementEventMapper {
|
||||
let focus_off = camera.get_focus_pos().map(f32::trunc);
|
||||
let cam_pos = camera.dependents().cam_pos + focus_off;
|
||||
|
||||
for (entity, pos, vel, body, physics, character) in (
|
||||
for (entity, pos, vel, body, scale, physics, character) in (
|
||||
&ecs.entities(),
|
||||
&ecs.read_storage::<Pos>(),
|
||||
&ecs.read_storage::<Vel>(),
|
||||
&ecs.read_storage::<Body>(),
|
||||
ecs.read_storage::<Scale>().maybe(),
|
||||
&ecs.read_storage::<PhysicsState>(),
|
||||
ecs.read_storage::<CharacterState>().maybe(),
|
||||
)
|
||||
@ -115,7 +116,7 @@ impl EventMapper for MovementEventMapper {
|
||||
underwater,
|
||||
);
|
||||
internal_state.time = Instant::now();
|
||||
internal_state.distance_travelled = 0.0;
|
||||
internal_state.steps_taken = 0.0;
|
||||
}
|
||||
|
||||
// update state to determine the next event. We only record the time (above) if
|
||||
@ -124,7 +125,8 @@ impl EventMapper for MovementEventMapper {
|
||||
internal_state.on_ground = physics.on_ground.is_some();
|
||||
internal_state.in_water = physics.in_liquid().is_some();
|
||||
let dt = ecs.fetch::<DeltaTime>().0;
|
||||
internal_state.distance_travelled += vel.0.magnitude() * dt;
|
||||
internal_state.steps_taken +=
|
||||
vel.0.magnitude() * dt / (body.stride_length() * scale.map_or(1.0, |s| s.0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -167,9 +169,9 @@ impl MovementEventMapper {
|
||||
if let Some((event, item)) = sfx_trigger_item {
|
||||
if &previous_state.event == event {
|
||||
match event {
|
||||
SfxEvent::Run(_) => previous_state.distance_travelled >= item.threshold,
|
||||
SfxEvent::Climb => previous_state.distance_travelled >= item.threshold,
|
||||
SfxEvent::QuadRun(_) => previous_state.distance_travelled >= item.threshold,
|
||||
SfxEvent::Run(_) => previous_state.steps_taken >= item.threshold,
|
||||
SfxEvent::Climb => previous_state.steps_taken >= item.threshold,
|
||||
SfxEvent::QuadRun(_) => previous_state.steps_taken >= item.threshold,
|
||||
_ => previous_state.time.elapsed().as_secs_f32() >= item.threshold,
|
||||
}
|
||||
} else {
|
||||
|
@ -32,7 +32,7 @@ fn config_but_played_since_threshold_no_emit() {
|
||||
time: Instant::now(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
};
|
||||
|
||||
let result = MovementEventMapper::should_emit(
|
||||
@ -56,7 +56,7 @@ fn config_and_not_played_since_threshold_emits() {
|
||||
time: Instant::now().checked_add(Duration::from_secs(1)).unwrap(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
};
|
||||
|
||||
let result = MovementEventMapper::should_emit(
|
||||
@ -82,7 +82,7 @@ fn same_previous_event_elapsed_emits() {
|
||||
.unwrap(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 2.0,
|
||||
steps_taken: 2.0,
|
||||
};
|
||||
|
||||
let result = MovementEventMapper::should_emit(
|
||||
@ -106,7 +106,7 @@ fn maps_idle() {
|
||||
time: Instant::now(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::zero(),
|
||||
BlockKind::Grass,
|
||||
@ -128,7 +128,7 @@ fn maps_run_with_sufficient_velocity() {
|
||||
time: Instant::now(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::new(0.5, 0.8, 0.0),
|
||||
BlockKind::Grass,
|
||||
@ -150,7 +150,7 @@ fn does_not_map_run_with_insufficient_velocity() {
|
||||
time: Instant::now(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::new(0.02, 0.0001, 0.0),
|
||||
BlockKind::Grass,
|
||||
@ -169,7 +169,7 @@ fn does_not_map_run_with_sufficient_velocity_but_not_on_ground() {
|
||||
time: Instant::now(),
|
||||
on_ground: false,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::new(0.5, 0.8, 0.0),
|
||||
BlockKind::Grass,
|
||||
@ -200,6 +200,7 @@ fn maps_roll() {
|
||||
timer: Duration::default(),
|
||||
stage_section: states::utils::StageSection::Buildup,
|
||||
was_wielded: true,
|
||||
prev_aimed_dir: None,
|
||||
is_sneaking: false,
|
||||
was_combo: None,
|
||||
}),
|
||||
@ -212,7 +213,7 @@ fn maps_roll() {
|
||||
time: Instant::now(),
|
||||
on_ground: true,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::new(0.5, 0.5, 0.0),
|
||||
BlockKind::Grass,
|
||||
@ -234,7 +235,7 @@ fn maps_land_on_ground_to_run() {
|
||||
time: Instant::now(),
|
||||
on_ground: false,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::zero(),
|
||||
BlockKind::Grass,
|
||||
@ -253,7 +254,7 @@ fn maps_glide() {
|
||||
time: Instant::now(),
|
||||
on_ground: false,
|
||||
in_water: false,
|
||||
distance_travelled: 0.0,
|
||||
steps_taken: 0.0,
|
||||
},
|
||||
Vec3::zero(),
|
||||
BlockKind::Grass,
|
||||
|
@ -1101,9 +1101,9 @@ impl FigureMgr {
|
||||
let holding_lantern = inventory
|
||||
.map_or(false, |i| i.equipped(EquipSlot::Lantern).is_some())
|
||||
&& light_emitter.is_some()
|
||||
&& !(second_tool_hand.is_some()
|
||||
|| matches!(active_tool_hand, Some(Hands::Two))
|
||||
&& character.map_or(false, |c| c.is_wield()))
|
||||
&& ((second_tool_hand.is_none()
|
||||
&& matches!(active_tool_hand, Some(Hands::One)))
|
||||
|| !character.map_or(false, |c| c.is_wield()))
|
||||
&& !character.map_or(false, |c| c.is_using_hands())
|
||||
&& physics.in_liquid().is_none();
|
||||
|
||||
@ -1263,6 +1263,7 @@ impl FigureMgr {
|
||||
state.last_ori * anim::vek::Vec3::<f32>::unit_y(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
s.prev_aimed_dir,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
|
Loading…
Reference in New Issue
Block a user