TurboFisto
[carveJwlIkooP6JGAAIwe30JlM.git] / player_common.c
index a7c42035af4c62c0734a0df048dda5d07be1493f..259a7987fc6bd5adda266765ce0834fe58f8c6a0 100644 (file)
@@ -29,23 +29,20 @@ VG_STATIC float player_get_heading_yaw( player_instance *player )
 
 VG_STATIC void player_camera_portal_correction( player_instance *player )
 {
-   if( player->gate_waiting )
-   {
+   if( player->gate_waiting ){
       /* construct plane equation for reciever gate */
       v4f plane;
       q_mulv( player->gate_waiting->q[1], (v3f){0.0f,0.0f,1.0f}, plane );
       plane[3] = v3_dot( plane, player->gate_waiting->co[1] );
 
       /* check camera polarity */
-      if( v3_dot( player->cam.pos, plane ) < plane[3] ) 
-      {
+      if( v3_dot( player->cam.pos, plane ) < plane[3] ) {
          vg_success( "Plane cleared\n" );
          player_apply_transport_to_cam( player->gate_waiting->transport );
          player->gate_waiting = NULL;
          player->viewable_world = get_active_world();
       }
-      else
-      {
+      else{
          /* de-transform camera and player back */
          m4x3f inverse;
          m4x3_invert_affine( player->gate_waiting->transport, inverse );
@@ -203,17 +200,25 @@ VG_STATIC void player__cam_iterate( player_instance *player )
    /* 
     * Blend cameras 
     */
-
    v3_lerp( tpv_pos, fpv_pos, player->camera_type_blend, player->cam.pos );
    v3_copy( player->angles, player->cam.angles );
 
-
    float Fd = -player->cam_land_punch_v * k_cam_damp,
          Fs = -player->cam_land_punch   * k_cam_spring;
    player->cam_land_punch   += player->cam_land_punch_v * vg.frame_delta;
    player->cam_land_punch_v += ( Fd + Fs ) * vg.frame_delta;
    player->cam.angles[1] += player->cam_land_punch;
 
+   /* override camera */
+   player->cam.angles[0] = 
+      vg_alerpf(  player->cam.angles[0], player->cam_override_angles[0], 
+                  player->cam_override_strength );
+   player->cam.angles[1] = 
+      vg_lerpf ( player->cam.angles[1], player->cam_override_angles[1], 
+                 player->cam_override_strength );
+   v3_lerp( player->cam.pos, player->cam_override_pos, 
+            player->cam_override_strength, player->cam.pos );
+
    /* portal transitions */
    player_camera_portal_correction( player );
 }
@@ -223,8 +228,7 @@ VG_STATIC void player_look( player_instance *player, v3f angles )
    angles[2] = 0.0f;
    v2_muladds( angles, vg.mouse_delta, 0.0025f, angles );
 
-   if( vg_input.controller_should_use_trackpad_look )
-   {
+   if( vg_input.controller_should_use_trackpad_look ){
       static v2f last_input;
       static v2f vel;
       static v2f vel_smooth;
@@ -232,13 +236,11 @@ VG_STATIC void player_look( player_instance *player, v3f angles )
       v2f input = { player->input_js2h->axis.value,
                     player->input_js2v->axis.value };
 
-      if( (v2_length2(last_input) > 0.001f) && (v2_length2(input) > 0.001f) )
-      {
+      if( (v2_length2(last_input) > 0.001f) && (v2_length2(input) > 0.001f) ){
          v2_sub( input, last_input, vel );
          v2_muls( vel, 1.0f/vg.time_delta, vel );
       }
-      else
-      {
+      else{
          v2_zero( vel );
       }
 
@@ -247,8 +249,7 @@ VG_STATIC void player_look( player_instance *player, v3f angles )
       v2_muladds( angles, vel_smooth, vg.time_delta, angles );
       v2_copy( input, last_input );
    }
-   else
-   {
+   else{
       angles[0] += player->input_js2h->axis.value * vg.time_delta * 4.0f;
       angles[1] += player->input_js2v->axis.value * vg.time_delta * 4.0f;
    }