+/*
+ * Copyright 2021-2022 (C) Mount0 Software, Harry Godden - All Rights Reserved
+ */
+
#ifndef PLAYER_H
#define PLAYER_H
walk_timer,
fonboard;
- v3f last_step_pos;
+v3f last_step_pos;
int step_phase;
}
player =
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 );
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
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;
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 );
}