X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_animation.h;h=b255f14c71b176d52e3032fc549f6d4891e2f6cc;hb=0124cd309a7db70cdd74b5661f2df8b862ca2f2f;hp=08a540554bf5f0577fb6e9c2ce9a1b2c563faf5d;hpb=ac4a2a0176bd9261b114003ee2c5a66bcf2676f3;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_animation.h b/player_animation.h index 08a5405..b255f14 100644 --- a/player_animation.h +++ b/player_animation.h @@ -106,10 +106,7 @@ VG_STATIC void player_animate(void) } /* 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 ); @@ -181,7 +178,12 @@ VG_STATIC void player_animate(void) /* 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 ); @@ -269,6 +271,32 @@ VG_STATIC void player_animate(void) 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 );