quadruped testing

Former-commit-id: 50340b74d803ec84b6af43ae6d787d72bf2c2d57
This commit is contained in:
jshipsey
2019-03-02 17:41:34 -05:00
parent 41bd83841e
commit 07689431a9
3 changed files with 40 additions and 60 deletions

View File

@ -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()),

View File

@ -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);
} }
} }

View File

@ -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,12 @@ 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))),
Some(load_segment("foot.vox").generate_mesh(Vec3::new(-2.5, -3.0, -2.0))),
Some(load_segment("sword.vox").generate_mesh(Vec3::new(-6.5, -1.0, 0.0))),
None, None,
None, None,
None, None,
@ -98,6 +95,9 @@ impl Scene {
None, None,
None, None,
None, None,
None,
None,
None,
], ],
CharacterSkeleton::new(), CharacterSkeleton::new(),
) )
@ -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();
} }