mdl_keyframe apose[32], bpose[32];
struct skeleton *sk = &player.mdl.sk;
-
if( player.walk > 0.025f )
{
/* TODO move */
{
struct player_phys *phys = &player.phys;
rb_extrapolate_transform( &player.phys.rb, player.visual_transform );
+ v3_muladds( player.visual_transform[3], phys->rb.up, -0.2f,
+ player.visual_transform[3] );
v4f qfake_rot;
m3x3f fake_rot;
}
/* Camera position */
- v3_sub( phys->rb.v, phys->v_last, phys->a );
- v3_copy( phys->rb.v, phys->v_last );
-
- v3_add( phys->m, phys->a, phys->m );
+ v3_muladds( phys->m, phys->a, VG_TIMESTEP_FIXED, phys->m );
v3_lerp( phys->m, (v3f){0.0f,0.0f,0.0f}, 0.1f, phys->m );
phys->m[0] = vg_clampf( phys->m[0], -2.0f, 2.0f );
/* stand/crouch */
float dir_frame = player.fdirz * (15.0f/30.0f),
stand_blend = offset[1]*-2.0f;
-
+
+ v3f local_cog;
+ m4x3_mulv( player.phys.rb.to_local, player.phys.cog, local_cog );
+
+ stand_blend = vg_clampf( 1.0f-local_cog[1], 0, 1 );
+
skeleton_sample_anim( sk, player.mdl.anim_stand, dir_frame, apose );
skeleton_sample_anim( sk, player.mdl.anim_highg, dir_frame, bpose );
skeleton_lerp_pose( sk, apose, bpose, stand_blend, apose );
apose[apply_to[i]-1].co[0] += offset[0]*add_grab_mod;
apose[apply_to[i]-1].co[2] += offset[2]*add_grab_mod;
}
+
+ v3f bo;
+ v3_muls( player.board_offset, add_grab_mod, bo );
+
+ v3_add( bo, apose[ player.mdl.id_board-1 ].co,
+ apose[ player.mdl.id_board-1 ].co );
+ v3_add( bo, apose[ player.mdl.id_ik_foot_l-1 ].co,
+ apose[ player.mdl.id_ik_foot_l-1 ].co );
+ v3_add( bo, apose[ player.mdl.id_ik_foot_r-1 ].co,
+ apose[ player.mdl.id_ik_foot_r-1 ].co );
+
+ m3x3f c;
+ q_m3x3( player.board_rotation, c );
+
+ v3f d;
+ v3_sub( apose[ player.mdl.id_ik_foot_l-1 ].co, bo, d );
+ m3x3_mulv( c, d, d );
+ v3_add( bo, d, apose[ player.mdl.id_ik_foot_l-1 ].co );
+
+ v3_sub( apose[ player.mdl.id_ik_foot_r-1 ].co, bo, d );
+ m3x3_mulv( c, d, d );
+ v3_add( bo, d, apose[ player.mdl.id_ik_foot_r-1 ].co );
+
+ q_mul( player.board_rotation, apose[ player.mdl.id_board-1 ].q ,
+ apose[ player.mdl.id_board-1 ].q );
+ q_normalize( apose[ player.mdl.id_board-1 ].q );
}
skeleton_apply_pose( &player.mdl.sk, apose, k_anim_apply_defer_ik );