+/*
+ * Applies gate transport to a player_interface
+ */
+PLAYER_API
+void player__pass_gate( player_instance *player, ent_gate *gate )
+{
+ world_routes_fracture( world_current_instance(), gate,
+ player->rb.co, player->rb.v );
+
+ player->gate_waiting = gate;
+ world_routes_activate_entry_gate( world_current_instance(), gate );
+
+ struct player_cam_controller *cc = &player->cam_control;
+ m4x3_mulv( gate->transport, cc->tpv_lpf, cc->tpv_lpf );
+ m3x3_mulv( gate->transport, cc->cam_velocity_smooth,
+ cc->cam_velocity_smooth );
+ m3x3_copy( player->basis, player->basis_gate );
+
+ v4f q;
+ m3x3_q( 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 );
+
+ m4x3_mulv( gate->transport, player->cam.pos, player->cam.pos );
+
+ if( gate->type == k_gate_type_nonlocel )
+ world_static.active_world = gate->target;
+
+ world_volumes.inside = 0;
+
+ audio_lock();
+ audio_oneshot( &audio_gate_pass, 1.0f, 0.0f );
+ audio_unlock();
+}
+