point maps (wip)
[carveJwlIkooP6JGAAIwe30JlM.git] / player_skate.c
index fed00580d88dedfa414942e23710ea2b1c64f2de..f38f6d4302a38c8914ac4b60c4de46ebd470b56d 100644 (file)
@@ -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 )
 {
@@ -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;
 
@@ -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;
    }
@@ -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;
@@ -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 */