X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_interface.h;h=54173455e9be62569a9b68cb23037761a41bc2ae;hb=9edcce70acf6cf8fbb2449bf54d797e212ebb2c2;hp=1b9e16bc6b59528681d277fc0caee1b1a1c43846;hpb=38672ec938499ce9e610c3e1848e74880b78a845;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_interface.h b/player_interface.h index 1b9e16b..5417345 100644 --- a/player_interface.h +++ b/player_interface.h @@ -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 ); } /*