- static int enabled_last = 0;
-
- if( enabled && !enabled_last )
- {
- v3_copy( player.camera[3], menu_cam_pos );
- m3x3_q( player.camera, menu_cam_q );
-
- if( player.phys.on_board )
- {
- v4f r90;
- q_axis_angle( r90, player.phys.rb.up, VG_PIf*-0.5f );
- q_mul( r90, player.phys.rb.q, menu_target_cam_q );
- m4x3_mulv( player.phys.rb.to_world, (v3f){-1.0f,1.6f,0.0f},
- menu_target_cam_pos );
- }
- else
- {
- v4f r180;
- q_axis_angle( r180, player.phys.rb.up, VG_PIf );
- q_mul( r180, player.phys.rb.q, menu_target_cam_q );
- m4x3_mulv( player.phys.rb.to_world, (v3f){0.0f,1.6f,-1.0f},
- menu_target_cam_pos );
- }
-
- q_normalize( menu_target_cam_q );
- q_normalize( menu_cam_q );
- menu_opacity = 0.0f;
- }
-
- if( enabled_last && !enabled )
- {
- m3x3_q( player.camera, menu_target_cam_q );
- v3_copy( player.camera[3], menu_target_cam_pos );
- }
-
- float dt = vg.time_delta * 6.0f;
-
- q_nlerp( menu_cam_q, menu_target_cam_q, dt, menu_cam_q );
- v3_lerp( menu_cam_pos, menu_target_cam_pos, dt, menu_cam_pos );
-
- q_m3x3( menu_cam_q, menu_cam );
- v3_copy( menu_cam_pos, menu_cam[3] );
- m4x3_invert_affine( menu_cam, menu_cam_inv );
- menu_opacity = vg_lerpf( menu_opacity, enabled, dt );
-
- enabled_last = enabled;
-}
-
-static void menu_render( m4x4f projection )