Factor tool back animation code out

This commit is contained in:
Joshua Barretto 2023-10-14 15:06:08 +01:00
parent 03f698034b
commit 30ecc997ea
8 changed files with 86 additions and 455 deletions

View File

@ -86,75 +86,14 @@ impl Animation for IdleAnimation {
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
next.glider.scale = Vec3::one() * 0.0;
next.hold.position = Vec3::new(0.4, -0.3, -5.8);
match hands {
(Some(Hands::Two), _) | (None, Some(Hands::Two)) => match active_tool_kind {
Some(ToolKind::Bow) => {
next.main.position = Vec3::new(0.0, -5.0 - skeleton.back_carry_offset, 6.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
next.main.position = Vec3::new(2.0, -5.0 - skeleton.back_carry_offset, -1.0);
next.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(PI / 2.0);
},
_ => {
next.main.position = Vec3::new(-7.0, -5. - skeleton.back_carry_offset, 15.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
},
(_, _) => {},
};
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Dagger) => {
next.main.position = Vec3::new(5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.main.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(2.0 * PI);
},
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.main.position = Vec3::new(-4.0, -4.0 - skeleton.back_carry_offset, 10.0);
next.main.orientation =
Quaternion::rotation_y(2.35) * Quaternion::rotation_z(PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Dagger) => {
next.second.position = Vec3::new(-5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.second.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(-2.0 * PI);
},
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.second.position = Vec3::new(4.0, -5.0 - skeleton.back_carry_offset, 10.0);
next.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
next.lantern.position = Vec3::new(s_a.lantern.0, s_a.lantern.1, s_a.lantern.2);
next.lantern.orientation = Quaternion::rotation_x(0.1) * Quaternion::rotation_y(0.1);
next.torso.position = Vec3::new(0.0, 0.0, 0.0);
next.second.scale = match hands {
(Some(Hands::One), Some(Hands::One)) => Vec3::one(),
(_, _) => Vec3::zero(),
};
if let (None, Some(Hands::Two)) = hands {
next.second = next.main;
}
next
}
}

View File

@ -3,7 +3,6 @@ use super::{
CharacterSkeleton, SkeletonAttr,
};
use common::comp::item::{Hands, ToolKind};
use core::f32::consts::PI;
pub struct JumpAnimation;
impl Animation for JumpAnimation {
@ -136,58 +135,7 @@ impl Animation for JumpAnimation {
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
next.glider.scale = Vec3::one() * 0.0;
let main_tool = if let (None, Some(Hands::Two)) = hands {
second_tool_kind
} else {
active_tool_kind
};
match main_tool {
Some(ToolKind::Dagger) => {
next.main.position = Vec3::new(5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.main.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(2.0 * PI);
},
Some(ToolKind::Shield) => {
next.main.position = Vec3::new(-0.0, -5.0 - skeleton.back_carry_offset, 3.0);
next.main.orientation =
Quaternion::rotation_y(0.25 * PI) * Quaternion::rotation_z(-1.5 * PI);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
next.main.position = Vec3::new(2.0, -5.0 - skeleton.back_carry_offset, -1.0);
next.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Bow) => {
next.main.position = Vec3::new(0.0, -5.0 - skeleton.back_carry_offset, 6.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
_ => {
next.main.position = Vec3::new(-7.0, -5.0 - skeleton.back_carry_offset, 15.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
}
match second_tool_kind {
Some(ToolKind::Dagger) => {
next.second.position = Vec3::new(-5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.second.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(-2.0 * PI);
},
Some(ToolKind::Shield) => {
next.second.position = Vec3::new(0.0, -4.5 - skeleton.back_carry_offset, 3.0);
next.second.orientation =
Quaternion::rotation_y(-0.25 * PI) * Quaternion::rotation_z(1.5 * PI);
},
_ => {
next.second.position = Vec3::new(-7.0, -5.0 - skeleton.back_carry_offset, 15.0);
next.second.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
}
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
next.lantern.position = Vec3::new(s_a.lantern.0, s_a.lantern.1, s_a.lantern.2);
next.lantern.orientation = Quaternion::rotation_x(1.0 * switch + slow * 0.3 * switch)
@ -208,38 +156,6 @@ impl Animation for JumpAnimation {
next.torso.position = Vec3::new(0.0, 0.0, 0.0);
next.torso.orientation = Quaternion::rotation_x(0.0);
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.main.position = Vec3::new(-4.0, -5.0 - skeleton.back_carry_offset, 10.0);
next.main.orientation =
Quaternion::rotation_y(2.35) * Quaternion::rotation_z(PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.second.position = Vec3::new(4.0, -6.0 - skeleton.back_carry_offset, 10.0);
next.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
next.second.scale = match hands {
(Some(Hands::One) | None, Some(Hands::One)) => Vec3::one(),
(_, _) => Vec3::zero(),
};
if let (None, Some(Hands::Two)) = hands {
next.second = next.main;
}
next
}
}

View File

@ -58,7 +58,10 @@ pub use self::{
wallrun::WallrunAnimation, wield::WieldAnimation,
};
use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton, TrailSource};
use common::comp;
use common::comp::{
self,
tool::{Hands, ToolKind},
};
use core::{convert::TryFrom, f32::consts::PI};
pub type Body = comp::humanoid::Body;
@ -333,3 +336,76 @@ impl<'a> From<&'a Body> for SkeletonAttr {
}
}
}
impl CharacterSkeleton {
pub fn do_tools_on_back(
&mut self,
hands: (Option<Hands>, Option<Hands>),
active_tool_kind: Option<ToolKind>,
second_tool_kind: Option<ToolKind>,
) {
match (hands, active_tool_kind, second_tool_kind) {
((Some(Hands::Two), _), tool, _) | ((None, Some(Hands::Two)), _, tool) => match tool {
Some(ToolKind::Bow) => {
self.main.position = Vec3::new(0.0, -5.0 - self.back_carry_offset, 6.0);
self.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
self.main.position = Vec3::new(2.0, -5.0 - self.back_carry_offset, -1.0);
self.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(PI / 2.0);
},
_ => {
self.main.position = Vec3::new(-7.0, -5.0 - self.back_carry_offset, 15.0);
self.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
},
((_, _), _, _) => {},
}
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Dagger) => {
self.main.position = Vec3::new(5.0, 1.0 - self.back_carry_offset, 2.0);
self.main.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(2.0 * PI);
},
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
self.main.position = Vec3::new(-4.0, -4.5 - self.back_carry_offset, 10.0);
self.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Shield) => {
self.main.position = Vec3::new(-0.0, -4.0 - self.back_carry_offset, 3.0);
self.main.orientation =
Quaternion::rotation_y(0.25 * PI) * Quaternion::rotation_z(-1.5 * PI);
},
_ => {},
},
(_, _) => {},
}
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Dagger) => {
self.second.position = Vec3::new(-5.0, 1.0 - self.back_carry_offset, 2.0);
self.second.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(-2.0 * PI);
},
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
self.second.position = Vec3::new(4.0, -5.0 - self.back_carry_offset, 10.0);
self.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-PI / 2.0);
},
Some(ToolKind::Shield) => {
self.second.position = Vec3::new(0.0, -4.0 - self.back_carry_offset, 3.0);
self.second.orientation =
Quaternion::rotation_y(-0.25 * PI) * Quaternion::rotation_z(1.5 * PI);
},
_ => {},
},
(_, _) => {},
}
}
}

View File

@ -155,59 +155,8 @@ impl Animation for MountAnimation {
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
next.glider.scale = Vec3::one() * 0.0;
next.hold.position = Vec3::new(0.4, -0.3, -5.8);
match hands {
(Some(Hands::Two), _) | (None, Some(Hands::Two)) => match active_tool_kind {
Some(ToolKind::Bow) => {
next.main.position = Vec3::new(0.0, -5.0, 6.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
next.main.position = Vec3::new(2.0, -5.0, -1.0);
next.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(1.57);
},
_ => {
next.main.position = Vec3::new(-7.0, -5.0, 15.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57);
},
},
(_, _) => {},
};
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.main.position = Vec3::new(-4.0, -5.0, 10.0);
next.main.orientation =
Quaternion::rotation_y(2.35) * Quaternion::rotation_z(1.57);
},
_ => {},
},
(_, _) => {},
};
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.second.position = Vec3::new(4.0, -6.0, 10.0);
next.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-1.57);
},
_ => {},
},
(_, _) => {},
};
next.second.scale = match hands {
(Some(Hands::One), Some(Hands::One)) => Vec3::one(),
(_, _) => Vec3::zero(),
};
if let (None, Some(Hands::Two)) = hands {
next.second = next.main;
}
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
next
}

View File

@ -36,7 +36,7 @@ impl Animation for RollAnimation {
skeleton: &Self::Skeleton,
(
active_tool_kind,
_second_tool_kind,
second_tool_kind,
hands,
wield_status,
orientation,
@ -206,32 +206,8 @@ impl Animation for RollAnimation {
(_, _) => {},
}
} else {
next.hand_l.position = Vec3::new(
-s_a.hand.0,
s_a.hand.1 + 1.0 * movement1,
s_a.hand.2 + 2.0 * movement1,
);
next.hand_l.orientation = Quaternion::rotation_x(0.6 * movement1);
next.hand_r.position = if prev_aimed_dir.is_some() {
Vec3::new(
-1.0 * movement1 + s_a.hand.0,
s_a.hand.1 + 1.0 * movement1,
s_a.hand.2 + 2.0 * movement1,
)
} else {
Vec3::new(
-1.0 * movement1 + s_a.hand.0 + 3.0,
s_a.hand.1 + 1.0 * movement1,
s_a.hand.2 + 2.0 * movement1 + 8.0,
)
};
next.hand_r.orientation = if prev_aimed_dir.is_some() {
Quaternion::rotation_x(0.6 * movement1)
} else {
Quaternion::rotation_y(-1.0)
};
};
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
}
next.head.position = Vec3::new(
0.0,
s_a.head.0 + 1.5 * movement1,

View File

@ -230,57 +230,7 @@ impl Animation for RunAnimation {
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
next.glider.scale = Vec3::one() * 0.0;
let main_tool = if let (None, Some(Hands::Two)) = hands {
second_tool_kind
} else {
active_tool_kind
};
match main_tool {
Some(ToolKind::Dagger) => {
next.main.position = Vec3::new(5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.main.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(2.0 * PI);
},
Some(ToolKind::Shield) => {
next.main.position = Vec3::new(-0.0, -5.0 - skeleton.back_carry_offset, 3.0);
next.main.orientation =
Quaternion::rotation_y(0.25 * PI) * Quaternion::rotation_z(-1.5 * PI);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
next.main.position = Vec3::new(2.0, -5.0 - skeleton.back_carry_offset, -1.0);
next.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Bow) => {
next.main.position = Vec3::new(0.0, -5.0 - skeleton.back_carry_offset, 6.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
_ => {
next.main.position = Vec3::new(-7.0, -5.0 - skeleton.back_carry_offset, 15.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0 + shorte * -0.2);
},
}
match second_tool_kind {
Some(ToolKind::Dagger) => {
next.second.position = Vec3::new(-5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.second.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(-2.0 * PI);
},
Some(ToolKind::Shield) => {
next.second.position = Vec3::new(0.0, -4.5 - skeleton.back_carry_offset, 3.0);
next.second.orientation =
Quaternion::rotation_y(-0.25 * PI) * Quaternion::rotation_z(1.5 * PI);
},
_ => {
next.second.position = Vec3::new(-7.0, -5.0 - skeleton.back_carry_offset, 15.0);
next.second.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
}
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
next.lantern.position = Vec3::new(s_a.lantern.0, s_a.lantern.1, s_a.lantern.2);
next.lantern.orientation =
@ -308,38 +258,6 @@ impl Animation for RunAnimation {
next.torso.position = Vec3::new(0.0, 0.0, 0.0);
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.main.position = Vec3::new(-4.0, -4.5 - skeleton.back_carry_offset, 10.0);
next.main.orientation =
Quaternion::rotation_y(2.35) * Quaternion::rotation_z(PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.second.position = Vec3::new(4.0, -5.0 - skeleton.back_carry_offset, 10.0);
next.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
next.second.scale = match hands {
(Some(Hands::One) | None, Some(Hands::One)) => Vec3::one(),
(_, _) => Vec3::zero(),
};
if let (None, Some(Hands::Two)) = hands {
next.second = next.main;
}
if wall.map_or(false, |e| e.y > 0.5) {
let push = (1.0 - orientation.x.abs()).powi(2);
let right_sub = -(orientation.x).min(0.0);

View File

@ -3,7 +3,6 @@ use super::{
CharacterSkeleton, SkeletonAttr,
};
use common::comp::item::{Hands, ToolKind};
use core::f32::consts::PI;
use std::ops::Mul;
pub struct StandAnimation;
@ -108,69 +107,8 @@ impl Animation for StandAnimation {
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
next.glider.scale = Vec3::one() * 0.0;
next.hold.position = Vec3::new(0.4, -0.3, -5.8);
match (hands, active_tool_kind, second_tool_kind) {
((Some(Hands::Two), _), tool, _) | ((None, Some(Hands::Two)), _, tool) => match tool {
Some(ToolKind::Bow) => {
next.main.position = Vec3::new(0.0, -5.0 - skeleton.back_carry_offset, 6.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
next.main.position = Vec3::new(2.0, -5.0 - skeleton.back_carry_offset, -1.0);
next.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(PI / 2.0);
},
_ => {
next.main.position = Vec3::new(-7.0, -5.0 - skeleton.back_carry_offset, 15.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
},
((_, _), _, _) => {},
};
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Dagger) => {
next.main.position = Vec3::new(5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.main.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(2.0 * PI);
},
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.main.position = Vec3::new(-4.0, -4.5 - skeleton.back_carry_offset, 10.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Shield) => {
next.main.position = Vec3::new(-0.0, -4.0 - skeleton.back_carry_offset, 3.0);
next.main.orientation =
Quaternion::rotation_y(0.25 * PI) * Quaternion::rotation_z(-1.5 * PI);
},
_ => {},
},
(_, _) => {},
};
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Dagger) => {
next.second.position = Vec3::new(-5.0, 1.0 - skeleton.back_carry_offset, 2.0);
next.second.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(-2.0 * PI);
},
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.second.position = Vec3::new(4.0, -5.0 - skeleton.back_carry_offset, 10.0);
next.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-PI / 2.0);
},
Some(ToolKind::Shield) => {
next.second.position = Vec3::new(0.0, -4.0 - skeleton.back_carry_offset, 3.0);
next.second.orientation =
Quaternion::rotation_y(-0.25 * PI) * Quaternion::rotation_z(1.5 * PI);
},
_ => {},
},
(_, _) => {},
};
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
next.lantern.position = Vec3::new(s_a.lantern.0, s_a.lantern.1, s_a.lantern.2);
next.lantern.orientation = Quaternion::rotation_x(0.1) * Quaternion::rotation_y(0.1);

View File

@ -171,57 +171,7 @@ impl Animation for SwimAnimation {
next.glider.position = Vec3::new(0.0, 0.0, 10.0);
next.glider.scale = Vec3::one() * 0.0;
let main_tool = if let (None, Some(Hands::Two)) = hands {
second_tool_kind
} else {
active_tool_kind
};
match main_tool {
Some(ToolKind::Dagger) => {
next.main.position = Vec3::new(5.0, 1.0, 2.0);
next.main.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(2.0 * PI);
},
Some(ToolKind::Shield) => {
next.main.position = Vec3::new(-0.0, -5.0, 3.0);
next.main.orientation =
Quaternion::rotation_y(0.25 * PI) * Quaternion::rotation_z(-1.5 * PI);
},
Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => {
next.main.position = Vec3::new(2.0, -5.0, -1.0);
next.main.orientation =
Quaternion::rotation_y(-0.5) * Quaternion::rotation_z(PI / 2.0);
},
Some(ToolKind::Bow) => {
next.main.position = Vec3::new(0.0, -5.0, 6.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
_ => {
next.main.position = Vec3::new(-7.0, -5.0, 15.0);
next.main.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
}
match second_tool_kind {
Some(ToolKind::Dagger) => {
next.second.position = Vec3::new(-5.0, 1.0, 2.0);
next.second.orientation =
Quaternion::rotation_x(-1.35 * PI) * Quaternion::rotation_z(-2.0 * PI);
},
Some(ToolKind::Shield) => {
next.second.position = Vec3::new(0.0, -4.0, 3.0);
next.second.orientation =
Quaternion::rotation_y(-0.25 * PI) * Quaternion::rotation_z(1.5 * PI);
},
_ => {
next.second.position = Vec3::new(-7.0, -5.0, 15.0);
next.second.orientation =
Quaternion::rotation_y(2.5) * Quaternion::rotation_z(PI / 2.0);
},
}
next.do_tools_on_back(hands, active_tool_kind, second_tool_kind);
next.lantern.position = Vec3::new(s_a.lantern.0, s_a.lantern.1, s_a.lantern.2);
next.lantern.scale = Vec3::one() * 0.65;
@ -238,37 +188,6 @@ impl Animation for SwimAnimation {
+ avgspeed * avg_vel.z * -0.003,
) * Quaternion::rotation_y(tilt * 2.0)
* Quaternion::rotation_z(tilt * 3.0);
match hands {
(Some(Hands::One), _) => match active_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.main.position = Vec3::new(-4.0, -5.0, 10.0);
next.main.orientation =
Quaternion::rotation_y(2.35) * Quaternion::rotation_z(PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
match hands {
(None | Some(Hands::One), Some(Hands::One)) => match second_tool_kind {
Some(ToolKind::Axe) | Some(ToolKind::Hammer) | Some(ToolKind::Sword) => {
next.second.position = Vec3::new(4.0, -6.0, 10.0);
next.second.orientation =
Quaternion::rotation_y(-2.5) * Quaternion::rotation_z(-PI / 2.0);
},
_ => {},
},
(_, _) => {},
};
next.second.scale = match hands {
(Some(Hands::One), Some(Hands::One)) => Vec3::one(),
(_, _) => Vec3::zero(),
};
if let (None, Some(Hands::Two)) = hands {
next.second = next.main;
}
next
}