f32 pol = v3_dot( localplayer.cam.pos, plane ) - plane[3];
- /* check camera polarity */
- if( (pol < 0.0f) || (pol > 5.0f) ) {
+ int cleared = (pol < 0.0f) || (pol > 5.0f);
+
+ if( cleared ){
vg_success( "Plane cleared\n" );
- player_apply_transport_to_cam( localplayer.gate_waiting->transport );
- localplayer.gate_waiting = NULL;
- localplayer.viewable_world = world_current_instance();
}
- else{
- /* de-transform camera and player back */
- m4x3f inverse;
- 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 );
+ m4x3f inverse;
+ m4x3_invert_affine( localplayer.gate_waiting->transport, inverse );
- skeleton_apply_transform( &localplayer.skeleton, inverse,
+ /* de-transform camera and player back */
+ v3f v0;
+ m4x3_mulv( inverse, localplayer.cam.pos, localplayer.cam.pos );
+ 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 );
+
+ /* record and re-put things again */
+ if( cleared ){
+ skaterift_record_frame( &skaterift.replay, 1 );
+ localplayer.deferred_frame_record = 1;
+
+ skeleton_apply_transform( &localplayer.skeleton,
+ localplayer.gate_waiting->transport,
localplayer.final_mtx );
+
+ m4x3_mulv( localplayer.gate_waiting->transport,
+ localplayer.cam.pos, localplayer.cam.pos );
+ v3_angles_vector( localplayer.cam.angles, v0 );
+ m3x3_mulv( localplayer.gate_waiting->transport, v0, v0 );
+ v3_angles( v0, localplayer.cam.angles );
+ player_apply_transport_to_cam( localplayer.gate_waiting->transport );
+ localplayer.gate_waiting = NULL;
}
}
}
v3_copy( (v3f){0.0f,0.0f,0.0f}, cc->fpv_offset );
v3_copy( (v3f){0.0f,1.4f,0.0f}, cc->tpv_offset );
}
+ else if( localplayer.subsystem == k_player_subsystem_glide ){
+ v3_copy( (v3f){-0.15f,1.75f,0.0f}, cc->fpv_viewpoint );
+ v3_copy( (v3f){0.0f,0.0f,0.0f}, cc->fpv_offset );
+ v3_copy( (v3f){0.0f,-1.0f,0.0f}, cc->tpv_offset );
+ v3_add( cc->tpv_offset_extra, cc->tpv_offset, cc->tpv_offset );
+ }
else{
v3_copy( (v3f){-0.15f,1.75f,0.0f}, cc->fpv_viewpoint );
v3_copy( (v3f){0.0f,0.0f,0.0f}, cc->fpv_offset );
/* lerping */
+ if( localplayer.cam_dist_smooth == 0.0f ){
+ localplayer.cam_dist_smooth = localplayer.cam_dist;
+ }
+ else {
+ localplayer.cam_dist_smooth = vg_lerpf(
+ localplayer.cam_dist_smooth,
+ localplayer.cam_dist,
+ vg.time_frame_delta * 8.0f );
+ }
+
localplayer.cam_velocity_influence_smooth = vg_lerpf(
localplayer.cam_velocity_influence_smooth,
localplayer.cam_velocity_influence,
/* now move into world */
v3f tpv_pos, tpv_offset, tpv_origin;
+ /* TODO: whats up with CC and not CC but both sets of variables are doing
+ * the same ideas just saved in different places?
+ */
/* origin */
q_mulv( pq, cc->tpv_offset_smooth, tpv_origin );
v3_add( tpv_origin, cc->tpv_lpf, tpv_origin );
/* offset */
- v3_muls( camera_follow_dir, 1.8f, tpv_offset );
+ v3_muls( camera_follow_dir, localplayer.cam_dist_smooth, tpv_offset );
v3_muladds( tpv_offset, cc->cam_velocity_smooth, -0.025f, tpv_offset );
v3_add( tpv_origin, tpv_offset, tpv_pos );
ent_camera *cam = NULL;
f32 min_dist = k_cinema;
- world_instance *world = localplayer.viewable_world;
+ world_instance *world = world_current_instance();
for( u32 i=0; i<mdl_arrcount(&world->ent_camera); i++ ){
ent_camera *c = mdl_arritm(&world->ent_camera,i);