X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=f2a1cd0feffda829eed9ed87d7cee6c8a899f7ed;hb=fee9867cee40c393a7142178039e8bcda964e004;hp=fed00580d88dedfa414942e23710ea2b1c64f2de;hpb=b3ca3b7a45eec11c46eb19772e10021177665adb;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index fed0058..f2a1cd0 100644 --- a/player_skate.c +++ b/player_skate.c @@ -5,6 +5,7 @@ #include "audio.h" #include "vg/vg_perlin.h" #include "menu.h" +#include "ent_skateshop.h" VG_STATIC void player__skate_bind( player_instance *player ) { @@ -54,7 +55,7 @@ VG_STATIC int skate_collide_smooth( player_instance *player, m4x3f mtx, rb_sphere *sphere, rb_ct *man ) { - world_instance *world = get_active_world(); + world_instance *world = world_current_instance(); int len = 0; len = rb_sphere__scene( mtx, sphere, NULL, &world->rb_geo.inf.scene, man ); @@ -91,7 +92,7 @@ VG_STATIC int skate_grind_scansq( player_instance *player, v3f pos, v3f dir, float r, struct grind_info *inf ) { - world_instance *world = get_active_world(); + world_instance *world = world_current_instance(); v4f plane; v3_copy( dir, plane ); @@ -101,10 +102,6 @@ VG_STATIC int skate_grind_scansq( player_instance *player, boxf box; v3_add( pos, (v3f){ r, r, r }, box[1] ); v3_sub( pos, (v3f){ r, r, r }, box[0] ); - - bh_iter it; - bh_iter_init( 0, &it ); - int idx; struct grind_sample { @@ -123,7 +120,11 @@ VG_STATIC int skate_grind_scansq( player_instance *player, v3_cross( plane, player->basis[1], support_axis ); v3_normalize( support_axis ); - while( bh_next( world->geo_bh, &it, box, &idx ) ){ + bh_iter it; + bh_iter_init_box( 0, &it, box ); + i32 idx; + + while( bh_next( world->geo_bh, &it, &idx ) ){ u32 *ptri = &world->scene_geo.arrindices[ idx*3 ]; v3f tri[3]; @@ -347,7 +348,7 @@ VG_STATIC int create_jumps_to_hit_target( player_instance *player, VG_STATIC void player__approximate_best_trajectory( player_instance *player ) { - world_instance *world0 = get_active_world(); + world_instance *world0 = world_current_instance(); struct player_skate *s = &player->_skate; float k_trace_delta = k_rb_delta * 10.0f; @@ -501,7 +502,7 @@ void player__approximate_best_trajectory( player_instance *player ) m3x3_mul( gate->transport, basis, basis ); if( gate->type == k_gate_type_nonlocel ){ - trace_world = &world_global.worlds[ gate->target ]; + trace_world = &world_static.worlds[ gate->target ]; } } } @@ -669,7 +670,7 @@ invalidated_grind:; } v2f steer; - v2_copy( srinput.joy_steer, steer ); + joystick_state( k_srjoystick_steer, steer ); v2_normalize_clamp( steer ); if( (fabsf(steer[1]) > 0.5f) && (s->land_dist >= 1.5f) ){ @@ -790,7 +791,7 @@ VG_STATIC void skate_apply_grab_model( player_instance *player ) { struct player_skate *s = &player->_skate; - float grabt = srinput.axis_grab; + float grabt = axis_state( k_sraxis_grab ); if( grabt > 0.5f ){ v2_muladds( s->state.grab_mouse_delta, vg.mouse_delta, 0.02f, @@ -808,9 +809,12 @@ VG_STATIC void skate_apply_steering_model( player_instance *player ) { struct player_skate *s = &player->_skate; + v2f jsteer; + joystick_state( k_srjoystick_steer, jsteer ); + /* Steering */ - float steer = srinput.joy_steer[0], - grab = srinput.axis_grab; + float steer = jsteer[0], + grab = axis_state( k_sraxis_grab ); steer = vg_signf( steer ) * steer*steer * k_steer_ground; @@ -958,7 +962,10 @@ VG_STATIC void skate_apply_jump_model( player_instance *player ) s->grind_cooldown = 30; s->state.activity = k_skate_activity_ground; - float tilt = srinput.joy_steer[0] * 0.4f; + v2f steer; + joystick_state( k_srjoystick_steer, steer ); + + float tilt = steer[0] * 0.3f; tilt *= vg_signf(v3_dot( player->rb.v, s->grind_dir )); v4f qtilt; @@ -973,7 +980,7 @@ VG_STATIC void skate_apply_jump_model( player_instance *player ) s->state.jump_time = vg.time; audio_lock(); - audio_oneshot_3d( &audio_jumps[rand()%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(); } } @@ -989,7 +996,7 @@ VG_STATIC void skate_apply_pump_model( player_instance *player ) /* Throw / collect routine */ - if( srinput.axis_grab > 0.5f ){ + if( axis_state( k_sraxis_grab ) > 0.5f ){ if( s->state.activity == k_skate_activity_ground ){ /* Throw */ v3_muls( player->rb.to_world[1], k_mmthrow_scale, s->state.throw_v ); @@ -1033,8 +1040,8 @@ VG_STATIC void skate_apply_cog_model( player_instance *player ) v3_copy( s->state.up_dir, ideal_dir ); v3_normalize( ideal_dir ); - v3_muladds( player->rb.co, ideal_dir, - 1.0f-srinput.axis_grab, ideal_cog ); + float grab = axis_state( k_sraxis_grab ); + v3_muladds( player->rb.co, ideal_dir, 1.0f-grab, ideal_cog ); v3_sub( ideal_cog, s->state.cog, ideal_diff ); /* Apply velocities */ @@ -1185,13 +1192,10 @@ VG_STATIC void player__skate_post_update( player_instance *player ) slide = 0.0f; } - static float menu_gate = 1.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, - vol_air = sqrtf( air *attn * 0.5f ) * menu_gate, - vol_slide = sqrtf( (1.0f-air)*attn*slide * 0.25f ) * menu_gate; + f32 gate = 1.0f-menu.factive, + vol_main = sqrtf( (1.0f-air)*attn*(1.0f-slide) * 0.4f ) * gate, + vol_air = sqrtf( air *attn * 0.5f ) * gate, + vol_slide = sqrtf( (1.0f-air)*attn*slide * 0.25f ) * gate; const u32 flags = AUDIO_FLAG_SPACIAL_3D|AUDIO_FLAG_LOOP; @@ -1316,7 +1320,7 @@ int skate_compute_surface_alignment( player_instance *player, v3f surface_normal, v3f axel_dir ) { struct player_skate *s = &player->_skate; - world_instance *world = get_active_world(); + world_instance *world = world_current_instance(); v3f truck, left, right; m4x3_mulv( player->rb.to_world, ra, truck ); @@ -1443,14 +1447,16 @@ VG_STATIC void skate_weight_distribute( player_instance *player ) int reverse_dir = v3_dot( player->rb.to_world[2], player->rb.v ) < 0.0f?1:-1; + v2f steer; + joystick_state( k_srjoystick_steer, steer ); + if( s->state.manual_direction == 0 ){ - if( (srinput.joy_steer[1] > 0.7f) && - (s->state.activity == k_skate_activity_ground) && + if( (steer[1] > 0.7f) && (s->state.activity == k_skate_activity_ground) && (s->state.jump_charge <= 0.01f) ) s->state.manual_direction = reverse_dir; } else{ - if( srinput.joy_steer[1] < 0.1f ){ + if( steer[1] < 0.1f ){ s->state.manual_direction = 0; } else{ @@ -1461,7 +1467,7 @@ VG_STATIC void skate_weight_distribute( player_instance *player ) } if( s->state.manual_direction ){ - float amt = vg_minf( srinput.joy_steer[1] * 8.0f, 1.0f ); + float amt = vg_minf( steer[1] * 8.0f, 1.0f ); s->weight_distribution[2] = k_board_length * amt * (float)s->state.manual_direction; } @@ -1527,7 +1533,7 @@ VG_STATIC int skate_point_visible( v3f origin, v3f target ) v3_muls( dir, 1.0f/ray.dist, dir ); ray.dist -= 0.025f; - if( ray_world( get_active_world(), origin, dir, &ray ) ) + if( ray_world( world_current_instance(), origin, dir, &ray ) ) return 0; return 1; @@ -1614,9 +1620,10 @@ VG_STATIC void skate_grind_truck_apply( player_instance *player, v3_normalize( target_fwd ); v3_normalize( fwd ); + v2f steer; + joystick_state( k_srjoystick_steer, steer ); - float way = srinput.joy_steer[1] * - vg_signf( v3_dot( raw_nplane, player->rb.v ) ); + float way = steer[1] * vg_signf( v3_dot( raw_nplane, player->rb.v ) ); v4f q; q_axis_angle( q, axis, VG_PIf*0.125f * way ); @@ -1668,8 +1675,10 @@ VG_STATIC void skate_5050_apply( player_instance *player, v3_cross( axis, inf_avg.dir, inf_avg.n ); skate_grind_decay( player, &inf_avg, 1.0f ); + v2f steer; + joystick_state( k_srjoystick_steer, steer ); - float way = srinput.joy_steer[1] * + float way = steer[1] * vg_signf( v3_dot( player->rb.to_world[2], player->rb.v ) ); v4f q; v3f up, target_up; @@ -1963,11 +1972,14 @@ VG_STATIC enum skate_activity skate_availible_grind( player_instance *player ) int allow_back = 1, allow_front = 1; + v2f steer; + joystick_state( k_srjoystick_steer, steer ); + if( s->state.activity == k_skate_activity_grind_5050 || s->state.activity == k_skate_activity_grind_back50 || s->state.activity == k_skate_activity_grind_front50 ) { - float tilt = srinput.joy_steer[1]; + float tilt = steer[1]; if( fabsf(tilt) >= 0.25f ){ v3f raw = {0.0f,0.0f,tilt}; @@ -2011,7 +2023,7 @@ VG_STATIC enum skate_activity skate_availible_grind( player_instance *player ) res_front50 = skate_grind_truck_entry( player, -1.0f, &inf_front50 ); if( res_back50 != res_front50 ){ - int wants_to_do_that = fabsf(srinput.joy_steer[1]) >= 0.25f; + int wants_to_do_that = fabsf(steer[1]) >= 0.25f; res_back50 &= wants_to_do_that; res_front50 &= wants_to_do_that; @@ -2063,7 +2075,7 @@ VG_STATIC enum skate_activity skate_availible_grind( player_instance *player ) VG_STATIC void player__skate_update( player_instance *player ) { struct player_skate *s = &player->_skate; - world_instance *world = get_active_world(); + world_instance *world = world_current_instance(); v3_copy( player->rb.co, s->state.prev_pos ); s->state.activity_prev = s->state.activity; @@ -2184,7 +2196,7 @@ VG_STATIC void player__skate_update( player_instance *player ) if( !prev_contacts[i] ){ v3f co; m4x3_mulv( player->rb.to_world, wheels[i].pos, co ); - audio_oneshot_3d( &audio_taps[rand()%4], co, 40.0f, 0.75f ); + audio_oneshot_3d( &audio_taps[vg_randu32()%4], co, 40.0f, 0.75f ); } } audio_unlock(); @@ -2558,11 +2570,11 @@ begin_collision:; if( s->state.activity == k_skate_activity_ground ){ if( (fabsf(s->state.slip) > 0.75f) ){ - audio_oneshot_3d( &audio_lands[rand()%2+3], player->rb.co, + audio_oneshot_3d( &audio_lands[vg_randu32()%2+3], player->rb.co, 40.0f, 1.0f ); } else{ - audio_oneshot_3d( &audio_lands[rand()%3], player->rb.co, + audio_oneshot_3d( &audio_lands[vg_randu32()%3], player->rb.co, 40.0f, 1.0f ); } } @@ -2653,7 +2665,7 @@ VG_STATIC void player__skate_animate( player_instance *player, float curspeed = v3_length( player->rb.v ), kickspeed = vg_clampf( curspeed*(1.0f/40.0f), 0.0f, 1.0f ), - kicks = (vg_randf()-0.5f)*2.0f*kickspeed, + kicks = (vg_randf64()-0.5f)*2.0f*kickspeed, sign = vg_signf( kicks ); s->wobble[0] = vg_lerpf( s->wobble[0], kicks*kicks*sign, 6.0f*vg.time_delta); @@ -2763,7 +2775,10 @@ VG_STATIC void player__skate_animate( player_instance *player, mdl_keyframe air_pose[32]; { - float target = -srinput.joy_steer[1]; + v2f steer; + joystick_state( k_srjoystick_steer, steer ); + + float target = -steer[1]; s->blend_airdir = vg_lerpf( s->blend_airdir, target, 2.4f*vg.time_delta ); @@ -2773,7 +2788,7 @@ VG_STATIC void player__skate_animate( player_instance *player, static v2f grab_choice; v2f grab_input; - v2_copy( srinput.joy_grab, grab_input ); + joystick_state( k_srjoystick_grab, grab_input ); v2_add( s->state.grab_mouse_delta, grab_input, grab_input ); if( v2_length2( grab_input ) <= 0.001f ) @@ -2949,7 +2964,7 @@ VG_STATIC void player__skate_animate( player_instance *player, q_mul( kf_board->q, qtrick, kf_board->q ); q_normalize( kf_board->q ); - struct player_board *board = player->board; + struct player_board *board = player_get_player_board( player ); if( board ){ /* foot weight distribution */