mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
quadruped testing
Former-commit-id: 50340b74d803ec84b6af43ae6d787d72bf2c2d57
This commit is contained in:
@ -15,10 +15,10 @@ use super::{
|
|||||||
pub struct CharacterSkeleton {
|
pub struct CharacterSkeleton {
|
||||||
head: Bone,
|
head: Bone,
|
||||||
chest: Bone,
|
chest: Bone,
|
||||||
belt: Bone,
|
bl_foot: Bone,
|
||||||
shorts: Bone,
|
br_foot: Bone,
|
||||||
l_hand: Bone,
|
|
||||||
r_hand: Bone,
|
r_hand: Bone,
|
||||||
|
l_hand: Bone,
|
||||||
l_foot: Bone,
|
l_foot: Bone,
|
||||||
r_foot: Bone,
|
r_foot: Bone,
|
||||||
back: Bone,
|
back: Bone,
|
||||||
@ -29,10 +29,10 @@ impl CharacterSkeleton {
|
|||||||
Self {
|
Self {
|
||||||
head: Bone::default(),
|
head: Bone::default(),
|
||||||
chest: Bone::default(),
|
chest: Bone::default(),
|
||||||
belt: Bone::default(),
|
br_foot: Bone::default(),
|
||||||
shorts: Bone::default(),
|
bl_foot: Bone::default(),
|
||||||
l_hand: Bone::default(),
|
|
||||||
r_hand: Bone::default(),
|
r_hand: Bone::default(),
|
||||||
|
l_hand: Bone::default(),
|
||||||
l_foot: Bone::default(),
|
l_foot: Bone::default(),
|
||||||
r_foot: Bone::default(),
|
r_foot: Bone::default(),
|
||||||
back: Bone::default(),
|
back: Bone::default(),
|
||||||
@ -47,10 +47,10 @@ impl Skeleton for CharacterSkeleton {
|
|||||||
[
|
[
|
||||||
FigureBoneData::new(self.head.compute_base_matrix()),
|
FigureBoneData::new(self.head.compute_base_matrix()),
|
||||||
FigureBoneData::new(chest_mat),
|
FigureBoneData::new(chest_mat),
|
||||||
FigureBoneData::new(self.belt.compute_base_matrix()),
|
FigureBoneData::new(self.bl_foot.compute_base_matrix()),
|
||||||
FigureBoneData::new(self.shorts.compute_base_matrix()),
|
FigureBoneData::new(self.br_foot.compute_base_matrix()),
|
||||||
FigureBoneData::new(self.l_hand.compute_base_matrix()),
|
|
||||||
FigureBoneData::new(self.r_hand.compute_base_matrix()),
|
FigureBoneData::new(self.r_hand.compute_base_matrix()),
|
||||||
|
FigureBoneData::new(self.l_hand.compute_base_matrix()),
|
||||||
FigureBoneData::new(self.l_foot.compute_base_matrix()),
|
FigureBoneData::new(self.l_foot.compute_base_matrix()),
|
||||||
FigureBoneData::new(self.r_foot.compute_base_matrix()),
|
FigureBoneData::new(self.r_foot.compute_base_matrix()),
|
||||||
FigureBoneData::new(chest_mat * self.back.compute_base_matrix()),
|
FigureBoneData::new(chest_mat * self.back.compute_base_matrix()),
|
||||||
|
@ -21,30 +21,34 @@ impl Animation for RunAnimation {
|
|||||||
time: f64,
|
time: f64,
|
||||||
) {
|
) {
|
||||||
let wave = (time as f32 * 12.0).sin();
|
let wave = (time as f32 * 12.0).sin();
|
||||||
|
let wavecos = (time as f32 * 12.0).cos();
|
||||||
let wave_slow = (time as f32 * 6.0 + PI).sin();
|
let wave_slow = (time as f32 * 6.0 + PI).sin();
|
||||||
|
let wavecos_slow = (time as f32 * 6.0 + PI).cos();
|
||||||
let wave_dip = (wave_slow.abs() - 0.5).abs();
|
let wave_dip = (wave_slow.abs() - 0.5).abs();
|
||||||
|
|
||||||
skeleton.head.offset = Vec3::unit_z() * 13.0;
|
skeleton.head.offset = Vec3::new(0.0, 0.0, 0.0);
|
||||||
skeleton.head.ori = Quaternion::rotation_z(wave * 0.3);
|
skeleton.head.ori = Quaternion::rotation_x(0.0);
|
||||||
|
|
||||||
skeleton.chest.offset = Vec3::unit_z() * 9.0;
|
skeleton.chest.offset = Vec3::new(0.0, 0.0, 0.0);
|
||||||
skeleton.chest.ori = Quaternion::rotation_z(wave * 0.3);
|
skeleton.chest.ori = Quaternion::rotation_x(0.0);
|
||||||
|
|
||||||
skeleton.belt.offset = Vec3::unit_z() * 7.0;
|
//skeleton.br_foot.offset = Vec3::new(0.0, wavecos_slow * 1.0, wave_slow * 2.0 + wave_dip * 1.0);
|
||||||
skeleton.belt.ori = Quaternion::rotation_z(wave * 0.2);
|
//skeleton.br_foot.ori = Quaternion::rotation_x(0.0 + wave_slow * 10.1);
|
||||||
|
|
||||||
skeleton.shorts.offset = Vec3::unit_z() * 4.0;
|
skeleton.bl_foot.offset = Vec3::new(0.0, 0.0, 80.0);
|
||||||
skeleton.shorts.ori = Quaternion::rotation_z(wave * 0.1);
|
skeleton.bl_foot.ori = Quaternion::rotation_x(wave_slow * 2.0);
|
||||||
|
//skeleton.bl_foot.offset = Vec3::new(0.0, wavecos_slow * 1.0, wave_slow * 2.0 + wave_dip * 1.0);
|
||||||
|
//skeleton.bl_foot.ori = Quaternion::rotation_x(0.5 + wave_slow * 0.1);
|
||||||
|
|
||||||
skeleton.l_hand.offset = Vec3::new(-6.0 - wave_dip * 6.0, wave * 5.0, 11.0 - wave_dip * 6.0);
|
//skeleton.r_hand.offset = Vec3::new(0.0, wavecos_slow * 1.0, wave_slow * 2.0 + wave_dip * 1.0);
|
||||||
skeleton.r_hand.offset = Vec3::new(6.0 + wave_dip * 6.0, -wave * 5.0, 11.0 - wave_dip * 6.0);
|
//skeleton.r_hand.ori = Quaternion::rotation_x(0.5 + wave_slow * 0.1);
|
||||||
|
|
||||||
|
skeleton.l_hand.offset = Vec3::new(0.0, 0.0, 0.0);
|
||||||
|
skeleton.l_hand.ori = Quaternion::rotation_x(wave_slow * 2.0);
|
||||||
|
|
||||||
|
//skeleton.l_hand.offset = Vec3::new(0.0, wavecos_slow * 1.0, wave_slow * 2.0 + wave_dip * 1.0);
|
||||||
|
//skeleton.l_hand.ori = Quaternion::rotation_x(0.5 + wave_slow * 0.1);
|
||||||
|
|
||||||
skeleton.l_foot.offset = Vec3::new(-3.5, 1.0 - wave * 8.0, 3.5 - wave_dip * 4.0);
|
|
||||||
skeleton.l_foot.ori = Quaternion::rotation_x(-wave + 1.0);
|
|
||||||
skeleton.r_foot.offset = Vec3::new(3.5, 1.0 + wave * 8.0, 3.5 - wave_dip * 4.0);
|
|
||||||
skeleton.r_foot.ori = Quaternion::rotation_x(wave + 1.0);
|
|
||||||
|
|
||||||
skeleton.back.offset = Vec3::new(-9.0, 5.0, 18.0);
|
|
||||||
skeleton.back.ori = Quaternion::rotation_y(2.5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ use vek::*;
|
|||||||
use dot_vox;
|
use dot_vox;
|
||||||
|
|
||||||
// Project
|
// Project
|
||||||
|
use common::figure::Segment;
|
||||||
use client::Client;
|
use client::Client;
|
||||||
use common::{comp::phys::Pos as PosComp, figure::Segment};
|
|
||||||
|
|
||||||
// Crate
|
// Crate
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -82,15 +82,15 @@ impl Scene {
|
|||||||
test_figure: Figure::new(
|
test_figure: Figure::new(
|
||||||
renderer,
|
renderer,
|
||||||
[
|
[
|
||||||
Some(load_segment("head.vox").generate_mesh(Vec3::new(-7.0, -5.5, -1.0))),
|
Some(load_segment("dragonhead.vox").generate_mesh(Vec3::new(2.0, -12.0, 2.0))),
|
||||||
Some(load_segment("chest.vox").generate_mesh(Vec3::new(-6.0, -3.0, 0.0))),
|
Some(load_segment("dragon_body.vox").generate_mesh(Vec3::new(0.0, 0.0, 0.0))),
|
||||||
Some(load_segment("belt.vox").generate_mesh(Vec3::new(-5.0, -3.0, 0.0))),
|
Some(load_segment("dragon_lfoot.vox").generate_mesh(Vec3::new(10.0, 10.0, -80.0))),
|
||||||
Some(load_segment("pants.vox").generate_mesh(Vec3::new(-5.0, -3.0, 0.0))),
|
Some(load_segment("dragon_rfoot.vox").generate_mesh(Vec3::new(0.0, 10.0, -4.0))),
|
||||||
Some(load_segment("hand.vox").generate_mesh(Vec3::new(-2.0, -2.0, -1.0))),
|
Some(load_segment("dragon_rfoot.vox").generate_mesh(Vec3::new(0.0, -10.0, -4.0))),
|
||||||
Some(load_segment("hand.vox").generate_mesh(Vec3::new(-2.0, -2.0, -1.0))),
|
Some(load_segment("dragon_lfoot.vox").generate_mesh(Vec3::new(0.0, 0.0, 0.0))),
|
||||||
Some(load_segment("foot.vox").generate_mesh(Vec3::new(-2.5, -3.0, -2.0))),
|
None,
|
||||||
Some(load_segment("foot.vox").generate_mesh(Vec3::new(-2.5, -3.0, -2.0))),
|
None,
|
||||||
Some(load_segment("sword.vox").generate_mesh(Vec3::new(-6.5, -1.0, 0.0))),
|
None,
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
@ -138,22 +138,6 @@ impl Scene {
|
|||||||
|
|
||||||
/// Maintain data such as GPU constant buffers, models, etc. To be called once per tick.
|
/// Maintain data such as GPU constant buffers, models, etc. To be called once per tick.
|
||||||
pub fn maintain(&mut self, renderer: &mut Renderer, client: &Client) {
|
pub fn maintain(&mut self, renderer: &mut Renderer, client: &Client) {
|
||||||
// Get player position
|
|
||||||
let player_pos = match client.player() {
|
|
||||||
Some(entity) => {
|
|
||||||
client
|
|
||||||
.state()
|
|
||||||
.ecs_world()
|
|
||||||
.read_storage::<PosComp>()
|
|
||||||
.get(entity)
|
|
||||||
.expect("There was no position component on the player entity!")
|
|
||||||
.0
|
|
||||||
}
|
|
||||||
None => Vec3::default(),
|
|
||||||
};
|
|
||||||
// Alter camera position to match player
|
|
||||||
self.camera.set_focus_pos(player_pos);
|
|
||||||
|
|
||||||
// Compute camera matrices
|
// Compute camera matrices
|
||||||
let (view_mat, proj_mat, cam_pos) = self.camera.compute_dependents();
|
let (view_mat, proj_mat, cam_pos) = self.camera.compute_dependents();
|
||||||
|
|
||||||
@ -177,15 +161,7 @@ impl Scene {
|
|||||||
&mut self.test_figure.skeleton,
|
&mut self.test_figure.skeleton,
|
||||||
client.state().get_time(),
|
client.state().get_time(),
|
||||||
);
|
);
|
||||||
|
self.test_figure.update_locals(renderer, FigureLocals::default()).unwrap();
|
||||||
// Calculate entity model matrix
|
|
||||||
let model_mat = Mat4::<f32>::translation_3d(player_pos);
|
|
||||||
//* Mat4::rotation_z(PI - entity.look_dir().x)
|
|
||||||
//* Mat4::rotation_x(entity.look_dir().y);
|
|
||||||
|
|
||||||
self.test_figure
|
|
||||||
.update_locals(renderer, FigureLocals::new(model_mat))
|
|
||||||
.unwrap();
|
|
||||||
self.test_figure.update_skeleton(renderer).unwrap();
|
self.test_figure.update_skeleton(renderer).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user