third person better camera
[carveJwlIkooP6JGAAIwe30JlM.git] / player_interface.h
index 1b9e16bc6b59528681d277fc0caee1b1a1c43846..54173455e9be62569a9b68cb23037761a41bc2ae 100644 (file)
@@ -180,9 +180,24 @@ VG_STATIC void player_update( player_interface *player )
       player->dev.device->update( player, &player->dev );
 }
 
-VG_STATIC void player_post_update( player_interface *player, 
-                                   camera *main_camera )
+VG_STATIC void player_apply_transport_to_cam( m4x3f transport )
 {
+   /* FIXME: Applies to main_camera directly! */
+
+   /* Pre-emptively edit the camera matrices so that the motion vectors 
+    * are correct */
+   m4x3f transport_i;
+   m4x4f transport_4;
+   m4x3_invert_affine( transport, transport_i );
+   m4x3_expand( transport_i, transport_4 );
+   m4x4_mul( main_camera.mtx.pv, transport_4, main_camera.mtx.pv );
+   m4x4_mul( main_camera.mtx.v,  transport_4, main_camera.mtx.v );
+}
+
+VG_STATIC void player_post_update( player_interface *player )
+{
+   /* FIXME: Applies to main_camera directly! */
+   
    assert( player->dev.device );
 
    if( player->dev.device->post_update )
@@ -200,15 +215,6 @@ VG_STATIC void player_post_update( player_interface *player,
       {
          player->dev.device->gate_transport( player, &player->dev, gate );
          v3_copy( player->rb.co, player->prev_position );
-
-         /* Pre-emptively edit the camera matrices so that the motion vectors 
-          * are correct */
-         m4x3f transport_i;
-         m4x4f transport_4;
-         m4x3_invert_affine( gate->transport, transport_i );
-         m4x3_expand( transport_i, transport_4 );
-         m4x4_mul( main_camera->mtx.pv, transport_4, main_camera->mtx.pv );
-         m4x4_mul( main_camera->mtx.v, transport_4, main_camera->mtx.v );
       }
    }
    
@@ -310,6 +316,9 @@ VG_STATIC void player_spawn( player_interface *player,
    v3_zero( player->rb.w );
    q_identity( player->rb.q );
    rb_update_transform( &player->rb );
+
+   if( player->dev.device->reset )
+      player->dev.device->reset( player, &player->dev, rp );
 }
 
 /*