X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=c300b3f579a67c95a1b95663d00d5b89b461726d;hb=8c376ed2e4021a18b0a6c6e800109d67ad09d198;hp=f1670c827e3b77245d7abe521aff152094a976a7;hpb=be8ea6efdbfd9c0fdad97401ed7d92041d8c8778;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index f1670c8..c300b3f 100644 --- a/player_skate.c +++ b/player_skate.c @@ -347,7 +347,7 @@ VG_STATIC int create_jumps_to_hit_target( player_instance *player, VG_STATIC void player__approximate_best_trajectory( player_instance *player ) { - world_instance *world = get_active_world(); + world_instance *world0 = get_active_world(); struct player_skate *s = &player->_skate; float k_trace_delta = k_rb_delta * 10.0f; @@ -392,6 +392,7 @@ void player__approximate_best_trajectory( player_instance *player ) v3_copy( player->rb.co, launch_co ); v3_copy( player->rb.v, launch_v ); v3_copy( launch_co, co0 ); + world_instance *trace_world = world0; float vt = (float)m * (1.0f/30.0f), ang = vg_lerpf( angle_begin, angle_end, vt ) * 0.15f; @@ -431,8 +432,7 @@ void player__approximate_best_trajectory( player_instance *player ) v3f closest={0.0f,0.0f,0.0f}; if( search_for_grind ){ - if( bh_closest_point( world->geo_bh, co1, closest, 1.0f ) != -1 ){ - + if( bh_closest_point(trace_world->geo_bh,co1,closest,1.0f) != -1 ){ float min_dist = 0.75f; min_dist *= min_dist; @@ -491,14 +491,18 @@ void player__approximate_best_trajectory( player_instance *player ) } } - if( world->rendering_gate ){ - ent_gate *gate = world->rendering_gate; + if( trace_world->rendering_gate ){ + ent_gate *gate = trace_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 ); + + if( gate->type == k_gate_type_nonlocel ){ + trace_world = &world_global.worlds[ gate->target ]; + } } } @@ -508,15 +512,16 @@ void player__approximate_best_trajectory( player_instance *player ) float scan_radius = k_board_radius; scan_radius *= vg_clampf( t, 0.02f, 1.0f ); - int idx = spherecast_world( world, co0, co1, scan_radius, &t1, n ); + int idx = spherecast_world(trace_world, co0, co1, scan_radius, &t1, n); if( idx != -1 ){ v3f co; v3_lerp( co0, co1, t1, co ); v3_copy( co, inf->log[ inf->log_length ++ ] ); v3_copy( n, inf->n ); - u32 *tri = &world->scene_geo->arrindices[ idx*3 ]; - struct world_surface *surf = world_tri_index_surface(world, tri[0]); + u32 *tri = &trace_world->scene_geo->arrindices[ idx*3 ]; + struct world_surface *surf = + world_tri_index_surface( trace_world, tri[0] ); inf->type = k_prediction_land; @@ -591,7 +596,7 @@ void player__approximate_best_trajectory( player_instance *player ) float t1; v3f n; - int idx = spherecast_world( world, co0,co1, + int idx = spherecast_world( world0, co0,co1, k_board_radius*0.1f, &t1, n); if( idx != -1 ){ goto invalidated_grind; @@ -1187,7 +1192,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, @@ -1225,7 +1230,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; @@ -2735,11 +2740,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 ); @@ -2857,7 +2861,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 ); @@ -3026,7 +3031,7 @@ VG_STATIC void player__skate_animate( player_instance *player, 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 ); + float substep = vg.time_fixed_extrapolate; v4f qflip; if( (s->state.activity <= k_skate_activity_air_to_grind) &&