v3_copy( average_normal, inf->n );
v3_copy( average_direction, inf->dir );
- vg_line_pt3( inf->co, 0.02f, VG__GREEN );
+ vg_line_point( inf->co, 0.02f, VG__GREEN );
vg_line_arrow( inf->co, average_direction, 0.3f, VG__GREEN );
vg_line_arrow( inf->co, inf->n, 0.2f, VG__CYAN );
q_mul( correction, player->rb.q, player->rb.q );
}
-VG_STATIC int player_skate_trick_input( player_instance *player );
+VG_STATIC enum trick_type player_skate_trick_input( player_instance *player );
VG_STATIC void skate_apply_trick_model( player_instance *player )
{
struct player_skate *s = &player->_skate;
rate = 35.0f;
top = 1.5f;
}
+
+ if( grab < 0.5f ){
+ top *= 1.0f+v3_length( s->state.throw_v )*k_mmthrow_steer;
+ }
}
float current = v3_dot( player->rb.to_world[1], player->rb.w ),
s->state.jump_time = vg.time;
audio_lock();
- audio_oneshot_3d( &audio_jumps[vg_randu32()%2], player->rb.co, 40.0f, 1.0f );
+ audio_oneshot_3d( &audio_jumps[vg_randu32()%2], player->rb.co,40.0f,1.0f);
audio_unlock();
}
}
skeleton_copy_pose( sk, s->holdout, player->holdout_pose );
}
-VG_STATIC int player_skate_trick_input( player_instance *player )
+VG_STATIC enum trick_type player_skate_trick_input( player_instance *player )
{
return (button_press( k_srbind_trick0 ) ) |
(button_press( k_srbind_trick1 ) << 1) |
return;
}
- int trick_id;
+ enum trick_type trick = k_trick_type_none;
if( (s->state.activity <= k_skate_activity_air_to_grind) &&
- (trick_id = player_skate_trick_input( player )) )
+ (trick = player_skate_trick_input( player )) )
{
if( (vg.time - s->state.jump_time) < 0.1f ){
v3_zero( s->state.trick_vel );
s->state.trick_time = 0.0f;
- if( trick_id == 1 ){
+ if( trick == k_trick_type_kickflip ){
s->state.trick_vel[0] = 3.0f;
}
- else if( trick_id == 2 ){
+ else if( trick == k_trick_type_shuvit ){
s->state.trick_vel[2] = 3.0f;
}
- else if( trick_id == 3 ){
+ else if( trick == k_trick_type_treflip ){
s->state.trick_vel[0] = 2.0f;
s->state.trick_vel[2] = 2.0f;
}
+ s->state.trick_type = trick;
}
}
}
v3_add( jump->log[jump->log_length-1], jump->n, p1 );
vg_line( jump->log[jump->log_length-1], p1, 0xffffffff );
- vg_line_pt3( jump->apex, 0.02f, 0xffffffff );
+ vg_line_point( jump->apex, 0.02f, 0xffffffff );
}
audio_lock();
s->substep -= s->substep_delta;
rb_ct manifold[128];
- int manifold_len = 0;
-
+ int manifold_len = 0;
/*
* Phase -1: head detection
* --------------------------------------------------------------------------
manifold_len += l;
if( vg_lines.draw )
- debug_capsule( mtx, capsule.radius, capsule.height, VG__WHITE );
+ vg_line_capsule( mtx, capsule.radius, capsule.height, VG__WHITE );
/* add limits */
if( s->state.activity >= k_skate_activity_grind_any ){
v3f world_cog;
m4x3_mulv( player->rb.to_world, s->weight_distribution, world_cog );
- vg_line_pt3( world_cog, 0.02f, VG__BLACK );
+ vg_line_point( world_cog, 0.02f, VG__BLACK );
for( int i=0; i<manifold_len; i ++ ){
rb_prepare_contact( &manifold[i], s->substep_delta );
m4x3f mtx;
m3x3_copy( player->rb.to_world, mtx );
m4x3_mulv( player->rb.to_world, wheels[i].pos, mtx[3] );
- debug_sphere( mtx, wheels[i].radius,
- (u32[]){ VG__WHITE, VG__BLACK,
+ vg_line_sphere( mtx, wheels[i].radius,
+ (u32[]){ VG__WHITE, VG__BLACK,
wheels[i].colour }[ wheels[i].state ]);
}
skate_integrate( player );
- vg_line_pt3( s->state.cog, 0.02f, VG__WHITE );
+ vg_line_point( s->state.cog, 0.02f, VG__WHITE );
ent_gate *gate =
world_intersect_gates(world, player->rb.co, s->state.prev_pos );
}
}
-VG_STATIC void player__skate_im_gui( player_instance *player )
-{
+VG_STATIC void player__skate_im_gui( player_instance *player ){
struct player_skate *s = &player->_skate;
player__debugtext( 1, "V: %5.2f %5.2f %5.2f",player->rb.v[0],
player->rb.v[1],
offset[0]=vg_clampf(offset[0],-0.8f,0.8f)*(1.0f-fabsf(s->blend_slide)*0.9f);
offset[1]=vg_clampf(offset[1],-0.5f,0.0f);
- v3_muls( offset, 0.3f, TEMP_TPV_EXTRA );
+ v3_muls( offset, 0.3f, player->tpv_offset_extra );
/*
* Animation blending
kf_board->co[1] += s->state.slap * s->subslap;
kf_hip->co[1] += s->state.slap * 0.25f;
+
+ f32 l = ((s->state.activity < k_skate_activity_ground) &&
+ v3_length2(s->state.trick_vel) > 0.1f )? 1: 0;
+ s->blend_trick_foot = vg_lerpf( s->blend_trick_foot, l,
+ 8.4f*vg.time_delta );
+
+ if( s->state.trick_type == k_trick_type_kickflip ){
+ kf_foot_l->co[0] += s->blend_trick_foot * 0.2f;
+ }
+ else if( s->state.trick_type == k_trick_type_shuvit ){
+ kf_foot_l->co[0] += s->blend_trick_foot * 0.1f;
+ kf_foot_r->co[0] -= s->blend_trick_foot * 0.15f;
+ }
+ else if( s->state.trick_type == k_trick_type_treflip ){
+ kf_foot_l->co[0] += s->blend_trick_foot * 0.2f;
+ kf_foot_r->co[0] -= s->blend_trick_foot * 0.15f;
+ }
+
+
/*
* animation wishlist:
* boardslide/grind jump animations
*/
/* truck rotation */
- for( int i=0; i<2; i++ )
- {
+ for( int i=0; i<2; i++ ){
float a = vg_minf( s->truckv0[i][0], 1.0f );
a = -acosf( a ) * vg_signf( s->truckv0[i][1] );
m4x3_mulv( av->sk.final_mtx[ av->id_head ], head, s->state.head_position );
m4x3_mulv( player->rb.to_local, s->state.head_position,
s->state.head_position );
-
- /* TODO: Extrapolate to_local matrix? */
}
VG_STATIC void player__skate_reset_animator( player_instance *player )