-/*
- * Applies gate transport to a player_interface
- */
-PLAYER_API
-void player__pass_gate( player_instance *player, struct gate_hit *hit )
-{
- player->gate_waiting = hit->gate;
-
- m4x3_mulv( hit->gate->transport, player->tpv_lpf, player->tpv_lpf );
- m3x3_mulv( hit->gate->transport, player->cam_velocity_smooth,
- player->cam_velocity_smooth );
-
- m3x3_copy( player->basis, player->basis_gate );
-
- v4f q;
- m3x3_q( hit->gate->transport, q );
- q_mul( q, player->qbasis, player->qbasis );
- q_normalize( player->qbasis );
- q_m3x3( player->qbasis, player->basis );
- m3x3_transpose( player->basis, player->invbasis );
-
- if( hit->nonlocal )
- world_global.active_world = hit->nonlocal->target_map_index;
-}
-
-VG_STATIC void player__pre_render( player_instance *player )
-{
- if( _player_animate[ player->subsystem ] )
- {
- player_animation res;
- _player_animate[ player->subsystem ]( player, &res );
-
- /* TODO: eventually, blending code goes here */
-
- m4x3f transform;
- q_m3x3( res.root_q, transform );
- v3_copy( res.root_co, transform[3] );
-
- struct skeleton *sk = &player->playeravatar->sk;
-
- if( player->holdout_time > 0.0f )
- {
- skeleton_lerp_pose( sk, res.pose, player->holdout_pose,
- player->holdout_time, res.pose );
- player->holdout_time -= vg.frame_delta * 2.0f;
- }
-
- skeleton_apply_pose( sk, res.pose, k_anim_apply_defer_ik );
- skeleton_apply_ik_pass( sk );
- skeleton_apply_pose( sk, res.pose, k_anim_apply_deffered_only );
- skeleton_apply_inverses( sk );
- skeleton_apply_transform( sk, transform );
-
-#if 0
- skeleton_debug( sk );
-#endif
- }
-
- if( _player_post_animate[ player->subsystem ] )
- _player_post_animate[ player->subsystem ]( player );
-
- struct player_avatar *av = player->playeravatar;
- v3f vp0 = {0.0f,0.1f, 0.55f},
- vp1 = {0.0f,0.1f,-0.55f};
-
- m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp0, TEMP_BOARD_0 );
- m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp1, TEMP_BOARD_1 );
-
- player__cam_iterate( player );
-}
-
-PLAYER_API void player__render( camera *cam, player_instance *player )
-{
- shader_model_character_view_use();
- vg_tex2d_bind( player->playertex, 0 );
- shader_model_character_view_uTexMain( 0 );
- shader_model_character_view_uCamera( cam->transform[3] );
- shader_model_character_view_uPv( cam->mtx.pv );
-
- world_instance *world = get_active_world();
- world_link_lighting_ub( world, _shader_model_character_view.id, 2 );
-
- glUniformMatrix4x3fv( _uniform_model_character_view_uTransforms,
- player->playeravatar->sk.bone_count,
- 0,
- (float *)player->playeravatar->sk.final_mtx );
-
- mesh_bind( player->playermesh );
- mesh_draw( player->playermesh );
-}
-
-PLAYER_API void player__im_gui( player_instance *player )
-{
- vg_uictx.cursor[0] = vg.window_x - 200;
- vg_uictx.cursor[1] = 0;
- vg_uictx.cursor[2] = 200;
- vg_uictx.cursor[3] = 200;
-
- struct ui_vert *b = ui_fill_rect( vg_uictx.cursor, 0x70000000 );