veloren/voxygen/src/anim/character/mod.rs

109 lines
3.7 KiB
Rust
Raw Normal View History

pub mod attack;
2019-08-25 16:48:12 +00:00
pub mod block;
pub mod blockidle;
2019-06-13 18:09:50 +00:00
pub mod cidle;
pub mod gliding;
pub mod idle;
pub mod jump;
2019-06-11 04:08:55 +00:00
pub mod roll;
2019-06-13 18:09:50 +00:00
pub mod run;
pub mod stand;
pub mod wield;
2019-01-14 14:40:22 +00:00
// Reexports
pub use self::attack::AttackAnimation;
2019-08-25 16:48:12 +00:00
pub use self::block::BlockAnimation;
pub use self::blockidle::BlockIdleAnimation;
2019-06-13 18:09:50 +00:00
pub use self::cidle::CidleAnimation;
pub use self::gliding::GlidingAnimation;
pub use self::idle::IdleAnimation;
pub use self::jump::JumpAnimation;
2019-06-11 04:08:55 +00:00
pub use self::roll::RollAnimation;
2019-06-13 18:09:50 +00:00
pub use self::run::RunAnimation;
pub use self::stand::StandAnimation;
pub use self::wield::WieldAnimation;
use super::{Bone, Skeleton};
use crate::render::FigureBoneData;
2019-01-14 14:40:22 +00:00
#[derive(Clone)]
pub struct CharacterSkeleton {
head: Bone,
chest: Bone,
belt: Bone,
shorts: Bone,
l_hand: Bone,
r_hand: Bone,
l_foot: Bone,
r_foot: Bone,
weapon: Bone,
l_shoulder: Bone,
r_shoulder: Bone,
draw: Bone,
torso: Bone,
}
impl CharacterSkeleton {
pub fn new() -> Self {
Self {
head: Bone::default(),
chest: Bone::default(),
belt: Bone::default(),
shorts: Bone::default(),
l_hand: Bone::default(),
r_hand: Bone::default(),
l_foot: Bone::default(),
r_foot: Bone::default(),
weapon: Bone::default(),
l_shoulder: Bone::default(),
r_shoulder: Bone::default(),
draw: Bone::default(),
torso: Bone::default(),
}
}
}
2019-01-14 14:40:22 +00:00
impl Skeleton for CharacterSkeleton {
fn compute_matrices(&self) -> [FigureBoneData; 16] {
let chest_mat = self.chest.compute_base_matrix();
let torso_mat = self.torso.compute_base_matrix();
let l_hand_mat = self.l_hand.compute_base_matrix();
let weapon_mat = self.weapon.compute_base_matrix();
let head_mat = self.head.compute_base_matrix();
[
FigureBoneData::new(torso_mat * head_mat),
FigureBoneData::new(torso_mat * chest_mat),
FigureBoneData::new(torso_mat * self.belt.compute_base_matrix()),
FigureBoneData::new(torso_mat * self.shorts.compute_base_matrix()),
2019-06-30 02:13:34 +00:00
FigureBoneData::new(torso_mat * chest_mat * l_hand_mat),
FigureBoneData::new(torso_mat * chest_mat * self.r_hand.compute_base_matrix()),
FigureBoneData::new(torso_mat * self.l_foot.compute_base_matrix()),
FigureBoneData::new(torso_mat * self.r_foot.compute_base_matrix()),
FigureBoneData::new(torso_mat * chest_mat * weapon_mat),
FigureBoneData::new(torso_mat * chest_mat * self.l_shoulder.compute_base_matrix()),
FigureBoneData::new(torso_mat * chest_mat * self.r_shoulder.compute_base_matrix()),
FigureBoneData::new(torso_mat * self.draw.compute_base_matrix()),
FigureBoneData::new(torso_mat),
FigureBoneData::default(),
2019-06-30 02:13:34 +00:00
FigureBoneData::default(),
FigureBoneData::default(),
]
}
fn interpolate(&mut self, target: &Self, dt: f32) {
self.head.interpolate(&target.head, dt);
self.chest.interpolate(&target.chest, dt);
self.belt.interpolate(&target.belt, dt);
self.shorts.interpolate(&target.shorts, dt);
self.l_hand.interpolate(&target.l_hand, dt);
self.r_hand.interpolate(&target.r_hand, dt);
self.l_foot.interpolate(&target.l_foot, dt);
self.r_foot.interpolate(&target.r_foot, dt);
self.weapon.interpolate(&target.weapon, dt);
self.l_shoulder.interpolate(&target.l_shoulder, dt);
self.r_shoulder.interpolate(&target.r_shoulder, dt);
self.draw.interpolate(&target.draw, dt);
self.torso.interpolate(&target.torso, dt);
}
2019-01-14 14:40:22 +00:00
}