v3_normalize( support_axis );
while( bh_next( world->geo_bh, &it, box, &idx ) ){
- u32 *ptri = &world->scene_geo->arrindices[ idx*3 ];
+ u32 *ptri = &world->scene_geo.arrindices[ idx*3 ];
v3f tri[3];
struct world_surface *surf = world_tri_index_surface(world,ptri[0]);
- if( !(surf->info.flags & k_material_flag_skate_surface) )
+ if( !(surf->info.flags & k_material_flag_grindable) )
continue;
for( int j=0; j<3; j++ )
- v3_copy( world->scene_geo->arrvertices[ptri[j]].co, tri[j] );
+ v3_copy( world->scene_geo.arrvertices[ptri[j]].co, tri[j] );
for( int j=0; j<3; j++ ){
int i0 = j,
v3_copy( co, inf->log[ inf->log_length ++ ] );
v3_copy( n, inf->n );
- u32 *tri = &trace_world->scene_geo->arrindices[ idx*3 ];
+ u32 *tri = &trace_world->scene_geo.arrindices[ idx*3 ];
struct world_surface *surf =
world_tri_index_surface( trace_world, tri[0] );
inf->score = -v3_dot( ve, inf->n );
inf->land_dist = t + k_trace_delta * t1;
-
/* Bias prediction towords ramps */
- if( !(surf->info.flags & k_material_flag_skate_surface) )
+ if( !(surf->info.flags & k_material_flag_skate_target) )
inf->score *= 10.0f;
+ if( surf->info.flags & k_material_flag_boundary )
+ s->possible_jump_count --;
+
break;
}
jump_info *jump = &s->possible_jumps[i];
if( jump->log_length == 0 ){
- vg_fatal_exit_loop( "assert: jump->log_length == 0\n" );
+ vg_fatal_error( "assert: jump->log_length == 0\n" );
}
for( int j=0; j<jump->log_length - 1; j ++ ){
}
static float menu_gate = 1.0f;
- menu_gate = vg_lerpf( menu_gate, 1-cl_menu, vg.frame_delta*4.0f );
+ menu_gate = vg_lerpf( menu_gate, 1-cl_menu, vg.time_frame_delta*4.0f );
float
vol_main = sqrtf( (1.0f-air)*attn*(1.0f-slide) * 0.4f ) * menu_gate,
vg_lerpf( 250.0f, 80.0f, attn ) );
if( s->sample_change_cooldown > 0.0f ){
- s->sample_change_cooldown -= vg.frame_delta;
+ s->sample_change_cooldown -= vg.time_frame_delta;
}
else{
int sample_type = k_skate_sample_concrete;
if( idx != -1 )
{
- u32 *tri = &world->scene_geo->arrindices[ idx * 3 ];
+ u32 *tri = &world->scene_geo.arrindices[ idx * 3 ];
v3f verts[3];
for( int j=0; j<3; j++ )
- v3_copy( world->scene_geo->arrvertices[ tri[j] ].co, verts[j] );
+ v3_copy( world->scene_geo.arrvertices[ tri[j] ].co, verts[j] );
v3f vert0, vert1, n;
v3_sub( verts[1], verts[0], vert0 );
struct player_skate *s = &player->_skate;
if( s->grind_cooldown > 100 ){
- vg_fatal_exit_loop( "wth!\n" );
+ vg_fatal_error( "wth!\n" );
}
/* debounces this state manager a little bit */
(vg.time - s->state.cur_push) < 0.125,
6.0f*vg.time_delta );
- float pt = push_time + vg.accumulator;
if( s->state.reverse > 0.0f )
- skeleton_sample_anim( sk, s->anim_push, pt, bpose );
+ skeleton_sample_anim( sk, s->anim_push, push_time, bpose );
else
- skeleton_sample_anim( sk, s->anim_push_reverse, pt, bpose );
+ skeleton_sample_anim( sk, s->anim_push_reverse, push_time, bpose );
skeleton_lerp_pose( sk, apose, bpose, s->blend_push, apose );
vg_warn( "FIX THIS! CARROT\n" );
v4_copy( player->rb.q, s->state.smoothed_rotation );
}
- v4_lerp( s->state.smoothed_rotation, player->rb.q, 2.0f*vg.frame_delta,
+ v4_lerp( s->state.smoothed_rotation, player->rb.q,
+ 2.0f*vg.time_frame_delta,
s->state.smoothed_rotation );
q_normalize( s->state.smoothed_rotation );
q_mul( kf_board->q, qtrick, kf_board->q );
q_normalize( kf_board->q );
+ struct player_board *board = player->playerboard;
/* foot weight distribution */
if( s->blend_weight > 0.0f ){
- kf_foot_l->co[2] += s->blend_weight * 0.2f;
- kf_foot_r->co[2] += s->blend_weight * 0.1f;
+ kf_foot_l->co[2] =
+ vg_lerpf( kf_foot_l->co[2],
+ board->truck_positions[k_board_truck_back][2]+0.3f,
+ 0.5f*s->blend_weight );
}
else{
- kf_foot_r->co[2] += s->blend_weight * 0.3f;
- kf_foot_l->co[2] += s->blend_weight * 0.1f;
+ kf_foot_r->co[2] =
+ vg_lerpf( kf_foot_r->co[2],
+ board->truck_positions[k_board_truck_front][2]-0.3f,
+ -0.5f*s->blend_weight );
}
float slapm = vg_maxf( 1.0f-v3_length2( s->state.trick_vel ), 0.0f );
/* transform */
rb_extrapolate( &player->rb, dest->root_co, dest->root_q );
- v3_muladds( dest->root_co, player->rb.to_world[1], -0.1f, dest->root_co );
- float substep = vg_clampf( vg.accumulator / VG_TIMESTEP_FIXED, 0.0f, 1.0f );
+ v3f ext_up,ext_co;
+ q_mulv( dest->root_q, (v3f){0.0f,1.0f,0.0f}, ext_up );
+ v3_copy( dest->root_co, ext_co );
+ v3_muladds( dest->root_co, ext_up, -0.1f, dest->root_co );
v4f qflip;
if( (s->state.activity <= k_skate_activity_air_to_grind) &&
(fabsf(s->state.flip_rate) > 0.01f) )
{
+ float substep = vg.time_fixed_extrapolate;
float t = s->state.flip_time+s->state.flip_rate*substep*k_rb_delta;
sign = vg_signf( t );
q_normalize( dest->root_q );
v3f rotation_point, rco;
- v3_muladds( player->rb.co, player->rb.to_world[1], 0.5f, rotation_point );
+ v3_muladds( ext_co, ext_up, 0.5f, rotation_point );
v3_sub( dest->root_co, rotation_point, rco );
q_mulv( qflip, rco, rco );
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 )