X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_interface.h;h=acd9e1e9082daace25308df87a95cfa0a8076159;hb=f82c365a9144c3e5e57df88cb57ef273e9e9d47b;hp=1b9e16bc6b59528681d277fc0caee1b1a1c43846;hpb=38672ec938499ce9e610c3e1848e74880b78a845;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_interface.h b/player_interface.h index 1b9e16b..acd9e1e 100644 --- a/player_interface.h +++ b/player_interface.h @@ -153,6 +153,8 @@ VG_STATIC void player_use_mesh( player_interface *player, glmesh *mesh ) player->playermesh = mesh; } +/* FIXME: Seperate concepts for binding and equip. + */ VG_STATIC void player_use_device( player_interface *player, player_device *dev, void *storage ) { @@ -180,9 +182,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 +217,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 ); } } @@ -235,16 +243,23 @@ VG_STATIC void player_pre_render( player_interface *player ) player_pose pose; m4x3f transform; - player->dev.device->pose( player, &player->dev, pose, transform ); + /* FIXME: Give devices more control over these render stages, and have + * 'API calls' + * for this kindof crap instead of it dictating order... */ + + if( player->dev.device->pose ) + { + player->dev.device->pose( player, &player->dev, pose, transform ); - struct skeleton *sk = &player->playeravatar->sk; + struct skeleton *sk = &player->playeravatar->sk; - skeleton_apply_pose( sk, pose, k_anim_apply_defer_ik ); - skeleton_apply_ik_pass( sk ); - skeleton_apply_pose( sk, pose, k_anim_apply_deffered_only ); - skeleton_apply_inverses( sk ); - skeleton_apply_transform( sk, transform ); - skeleton_debug( sk ); + skeleton_apply_pose( sk, pose, k_anim_apply_defer_ik ); + skeleton_apply_ik_pass( sk ); + skeleton_apply_pose( sk, pose, k_anim_apply_deffered_only ); + skeleton_apply_inverses( sk ); + skeleton_apply_transform( sk, transform ); + skeleton_debug( sk ); + } player->dev.device->get_camera( player, &player->dev, &player->cam ); /* TODO: if dead copy ragdoll.. . */ @@ -310,6 +325,14 @@ 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 ); +} + +VG_STATIC void player_kill( player_interface *player ) +{ + } /*