X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=6fb74dcf6427c5c6ce6a709399f77edb9a9dadec;hb=4744d53642cca117c2e130d39cc58b2911336bf3;hp=0e9be562e97b99ff8a5ec30ae3bbab32ad118b60;hpb=cedb92d590f4578a246a09a96c0fa0eda109d3c7;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 0e9be56..6fb74dc 100644 --- a/player.h +++ b/player.h @@ -1,3 +1,7 @@ +/* + * Copyright 2021-2022 (C) Mount0 Software, Harry Godden - All Rights Reserved + */ + #ifndef PLAYER_H #define PLAYER_H @@ -94,7 +98,7 @@ static struct gplayer walk_timer, fonboard; - v3f last_step_pos; +v3f last_step_pos; int step_phase; } player = @@ -828,9 +832,8 @@ static void player_do_motion(void) m3x3_mulv( gate->transport, fwd_dir, fwd_dir ); player.angles[0] = atan2f( fwd_dir[2], fwd_dir[0] ); - } - + m3x3_copy( player.vr, player.gate_vr_frame ); m3x3_copy( player.vr_pstep, player.gate_vr_pstep_frame ); @@ -933,7 +936,6 @@ static void player_animate(void) offset[0] = vg_clampf( offset[0], -0.8f, 0.8f ); offset[1] = vg_clampf( offset[1], -0.5f, 0.0f ); - offset[1] = 0.0f; /* * Animation blending @@ -1033,7 +1035,7 @@ static void player_animate(void) skeleton_lerp_pose( sk, ground_pose, air_pose, player.ffly, apose ); - float add_grab_mod = player.ffly * player.grab; + float add_grab_mod = 1.0f - player.ffly*player.grab; /* additive effects */ apose[player.mdl.id_hip-1].co[0] += offset[0]*add_grab_mod; @@ -1062,9 +1064,13 @@ static void player_animate(void) static void player_camera_update(void) { /* Update camera matrices */ - m4x3_identity( player.camera ); - m4x3_rotate_y( player.camera, -player.angles[0] ); - m4x3_rotate_x( player.camera, -player.angles[1] ); + v4f qyaw, qpitch, qcam; + q_axis_angle( qyaw, (v3f){ 0.0f, 1.0f, 0.0f }, -player.angles[0] ); + q_axis_angle( qpitch, (v3f){ 1.0f, 0.0f, 0.0f }, -player.angles[1] ); + + q_mul( qyaw, qpitch, qcam ); + q_m3x3( qcam, player.camera ); + v3_copy( player.camera_pos, player.camera[3] ); m4x3_invert_affine( player.camera, player.camera_inverse ); }