s->anim_grabs = skeleton_get_anim( sk, "grabs" );
}
+VG_STATIC void player__skate_kill_audio( player_instance *player )
+{
+ struct player_skate *s = &player->_skate;
+
+ audio_lock();
+ if( s->aud_main )
+ s->aud_main = audio_channel_fadeout( s->aud_main, 0.1f );
+ if( s->aud_air )
+ s->aud_air = audio_channel_fadeout( s->aud_air, 0.1f );
+ if( s->aud_slide )
+ s->aud_slide = audio_channel_fadeout( s->aud_slide, 0.1f );
+ audio_unlock();
+}
+
/*
* Collision detection routines
*
v3_copy( launch_v, p->v );
+ m3x3f basis;
+ m3x3_copy( player->basis, basis );
+
for( int i=1; i<=50; i++ )
{
float t = (float)i * k_trace_delta;
v3_muls( launch_v, t, co1 );
- v3_muladds( co1, player->basis[1], -0.5f * gravity * t*t, co1 );
+ v3_muladds( co1, basis[1], -0.5f * gravity * t*t, co1 );
v3_add( launch_co, co1, co1 );
- float launch_vy = v3_dot( launch_v,player->basis[1] );
+ float launch_vy = v3_dot( launch_v,basis[1] );
if( !grind_located && (launch_vy - gravity*t < 0.0f) )
{
v3f closest;
{
v3f ve;
v3_copy( launch_v, ve );
- v3_muladds( ve, player->basis[1], -gravity * t, ve );
+ v3_muladds( ve, basis[1], -gravity * t, ve );
if( skate_grind_scansq( player, closest, ve, 0.5f, &grind ) )
{
/* check alignment */
- v2f v0 = { v3_dot( ve, player->basis[0] ),
- v3_dot( ve, player->basis[2] ) },
- v1 = { v3_dot( grind.dir, player->basis[0] ),
- v3_dot( grind.dir, player->basis[2] ) };
+ v2f v0 = { v3_dot( ve, basis[0] ),
+ v3_dot( ve, basis[2] ) },
+ v1 = { v3_dot( grind.dir, basis[0] ),
+ v3_dot( grind.dir, basis[2] ) };
v2_normalize( v0 );
v2_normalize( v1 );
}
}
+ if( world->rendering_gate ){
+ ent_gate *gate = world->rendering_gate;
+ if( gate_intersect( gate, co1, co0 ) ){
+ m4x3_mulv( gate->transport, co0, co0 );
+ m4x3_mulv( gate->transport, co1, co1 );
+ m3x3_mulv( gate->transport, launch_v, launch_v);
+ m4x3_mulv( gate->transport, launch_co, launch_co );
+ m3x3_mul( gate->transport, basis, basis );
+ }
+ }
+
float t1;
v3f n;
if( (v3_length2(s->state.trick_vel) >= 0.0001f ) &&
s->state.trick_time > 0.2f)
{
+ player__skate_kill_audio( player );
player__dead_transition( player );
}
angles[2] = 0.0f;
player->holdout_time = 0.25f;
+ player__skate_kill_audio( player );
player__walk_transition( player, angles );
return;
}
v3_lerp( start_co, player->rb.co, t, player->rb.co );
rb_update_transform( &player->rb );
+ player__skate_kill_audio( player );
player__dead_transition( player );
return;
}