/* TODO: eugh */
m3x3f gate_vr_frame, gate_vr_pstep_frame;
+ int on_board_frame, in_air_frame;
v3f a, v_last, m, bob, vl;
* Player API
*/
+static float *player_get_pos(void)
+{
+ return player.rb.co;
+}
+
/*
* Free camera movement
world_routes_activate_gate( i );
player.rb_gate_frame = player.rb;
+ player.in_air_frame = player.in_air;
+ player.on_board_frame = player.on_board;
+
+ if( !player.on_board )
+ {
+ v3f fwd_dir = {cosf(player.angles[0]),
+ 0.0f,
+ sinf(player.angles[0])};
+ m3x3_mulv( gate->transport, fwd_dir, fwd_dir );
+
+ player.angles[0] = atan2f( fwd_dir[2], fwd_dir[0] );
+
+ }
m3x3_copy( player.vr, player.gate_vr_frame );
m3x3_copy( player.vr_pstep, player.gate_vr_pstep_frame );
/* Tunnel / occlusion */
audio_sample_occlusion( player.camera[3] );
+
+ int sprite_avail = -1;
+ for( int i=0; i<vg_list_size(ambient_sprites); i++ )
+ {
+ if( !audio_player_is_playing( &ambient_sprites[i] ) )
+ {
+ sprite_avail = i;
+ break;
+ }
+ }
+
+ if( sprite_avail != -1 )
+ {
+ v3f waterpos;
+ enum audio_sprite_type sprite_type =
+ audio_sample_sprite_random( player.rb.co, waterpos );
+
+ if( sprite_type != k_audio_sprite_type_none )
+ {
+ audio_player *avail = &ambient_sprites[ sprite_avail ];
+
+ audio_player_set_vol( avail, 20.0f );
+ audio_player_set_flags( avail, AUDIO_FLAG_SPACIAL_3D );
+ audio_player_set_position( avail, waterpos );
+
+ if( sprite_type == k_audio_sprite_type_grass )
+ {
+ audio_player_playclip( avail, &audio_grass[rand()%4] );
+ }
+ else if( sprite_type == k_audio_sprite_type_water )
+ {
+ audio_player_playclip( avail, &audio_water[rand()%6] );
+ }
+ }
+ }
if( freecam || player.is_dead || !player.on_board )
{
m3x3_identity( player.gate_vr_pstep_frame );
player.rb_gate_frame = player.rb;
+ player.on_board_frame = player.on_board;
+ player.in_air_frame = player.in_air;
return 1;
}
if( vg_get_axis("grabl")>0.0f)
{
player.rb = player.rb_gate_frame;
+ player.on_board = player.on_board_frame;
+ player.in_air = player.in_air_frame;
m3x3_copy( player.gate_vr_frame, player.vr );
m3x3_copy( player.gate_vr_pstep_frame, player.vr_pstep );
player.is_dead = 0;
player.in_air = 1;
+
+
+ if( !player.on_board )
+ {
+ player.angles[0] = atan2f( -player.rb.forward[2],
+ -player.rb.forward[0] );
+ }
+
m3x3_identity( player.vr );
player.mdl.shoes[0] = 1;