#include "menu.h"
#include "vg/vg_perlin.h"
-static void player_vector_angles( v3f angles, v3f v, float C, float k ){
- float yaw = atan2f( v[0], -v[2] ),
- pitch = atan2f
- (
- -v[1],
- sqrtf
- (
- v[0]*v[0] + v[2]*v[2]
- )
- ) * C + k;
-
- angles[0] = yaw;
- angles[1] = pitch;
- angles[2] = 0.0f;
-}
-
static float player_get_heading_yaw(void){
v3f xz;
q_mulv( localplayer.rb.q, (v3f){ 0.0f,0.0f,1.0f }, xz );
- m3x3_mulv( localplayer.invbasis, xz, xz );
return atan2f( xz[0], xz[2] );
}
m4x3_invert_affine( localplayer.gate_waiting->transport, inverse );
m4x3_mulv( inverse, localplayer.cam.pos, localplayer.cam.pos );
+ v3f v0;
+ v3_angles_vector( localplayer.cam.angles, v0 );
+ m3x3_mulv( inverse, v0, v0 );
+ v3_angles( v0, localplayer.cam.angles );
+
skeleton_apply_transform( &localplayer.skeleton, inverse,
localplayer.final_mtx );
}
v3_lerp( cc->cam_velocity_smooth, localplayer.rb.v, 4.0f*vg.time_frame_delta,
cc->cam_velocity_smooth );
- v3f velocity_local;
- m3x3_mulv( localplayer.invbasis, cc->cam_velocity_smooth, velocity_local );
- player_vector_angles( velocity_angles, velocity_local,
- localplayer.cam_velocity_coefficient_smooth,
- localplayer.cam_velocity_constant_smooth );
+ v3_angles( cc->cam_velocity_smooth, velocity_angles );
+ velocity_angles[1] *= localplayer.cam_velocity_coefficient_smooth;
+ velocity_angles[1] += localplayer.cam_velocity_constant_smooth;
float inf_fpv = localplayer.cam_velocity_influence_smooth *
cc->camera_type_blend,
v3f future;
v3_muls( localplayer.rb.v, 0.4f*vg.time_frame_delta, future );
- m3x3_mulv( localplayer.invbasis, future, future );
v3f camera_follow_dir =
{ -sinf( localplayer.angles[0] ) * cosf( localplayer.angles[1] ),
follow_angles[0] = atan2f( -v0[0], v0[2] );
follow_angles[1] = 0.3f + velocity_angles[1] * 0.2f;
- float ya = atan2f( -velocity_local[1], 30.0f );
+ float ya = atan2f( -cc->cam_velocity_smooth[1], 30.0f );
follow_angles[1] = 0.3f + ya;
camera_lerp_angles( localplayer.angles, follow_angles,
v3_add( tpv_origin, cc->tpv_lpf, tpv_origin );
/* offset */
- m3x3_mulv( localplayer.basis, camera_follow_dir, camera_follow_dir );
v3_muls( camera_follow_dir, 1.8f, tpv_offset );
v3_muladds( tpv_offset, cc->cam_velocity_smooth, -0.025f, tpv_offset );
v3f v0;
if( k_cinema_fixed )
mdl_transform_vector( &cam->transform, (v3f){0.0f,-1.0f,0.0f}, v0 );
- else v3_sub( localplayer.rb.co, cam->transform.co, v0 );
- m3x3_mulv( localplayer.invbasis, v0, v0 );
- player_vector_angles( localplayer.cam.angles, v0, 1.0f, 0.0f );
+ else
+ v3_sub( localplayer.rb.co, cam->transform.co, v0 );
+
+ v3_angles( v0, localplayer.cam.angles );
}
}