X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=9b1aea11a47c83f7b35af6553dcecfc0287919f3;hb=872ad3e040f22df357929d3778a955ae8c4ac52b;hp=e9a4f09f4b01cbaca4857b4b0e95c897f82218c4;hpb=6b9993651343af73bd48e2213910bbaadb41edaf;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index e9a4f09..9b1aea1 100644 --- a/player_skate.c +++ b/player_skate.c @@ -124,15 +124,15 @@ VG_STATIC int skate_grind_scansq( player_instance *player, 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, @@ -519,7 +519,7 @@ void player__approximate_best_trajectory( player_instance *player ) 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] ); @@ -532,11 +532,13 @@ void player__approximate_best_trajectory( player_instance *player ) 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; } @@ -1161,7 +1163,7 @@ VG_STATIC void player__skate_post_update( player_instance *player ) 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; jlog_length - 1; j ++ ){ @@ -1192,7 +1194,7 @@ VG_STATIC void player__skate_post_update( player_instance *player ) } 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, @@ -1230,7 +1232,7 @@ VG_STATIC void player__skate_post_update( player_instance *player ) 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; @@ -1402,11 +1404,11 @@ int skate_compute_surface_alignment( player_instance *player, 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 ); @@ -1949,7 +1951,7 @@ VG_STATIC enum skate_activity skate_availible_grind( player_instance *player ) 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 */ @@ -2740,11 +2742,10 @@ VG_STATIC void player__skate_animate( player_instance *player, (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 ); @@ -2862,7 +2863,8 @@ VG_STATIC void player__skate_animate( player_instance *player, 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 ); @@ -2955,15 +2957,22 @@ VG_STATIC void player__skate_animate( player_instance *player, q_mul( kf_board->q, qtrick, kf_board->q ); q_normalize( kf_board->q ); - - /* 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; - } - else{ - kf_foot_r->co[2] += s->blend_weight * 0.3f; - kf_foot_l->co[2] += s->blend_weight * 0.1f; + struct player_board *board = player->board; + + if( board ){ + /* foot weight distribution */ + if( s->blend_weight > 0.0f ){ + 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] = + 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 ); @@ -3029,14 +3038,17 @@ VG_STATIC void player__skate_animate( player_instance *player, /* 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 ); @@ -3054,7 +3066,7 @@ VG_STATIC void player__skate_animate( player_instance *player, 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 ); @@ -3075,6 +3087,8 @@ VG_STATIC void player__skate_post_animate( player_instance *player ) 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 )