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;
}
- 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 );
+
+ /* 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,
+ 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;
}
}
}