stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / player.h
index 3d42096d2f420296566a897ebe2f77e5d0079ede..97c799ee61ca7d151999b14ca0aa5a9c38b4621d 100644 (file)
--- a/player.h
+++ b/player.h
@@ -92,6 +92,9 @@ static struct gplayer
          fsetup,
          walk_timer,
          fonboard;
+
+   v3f last_step_pos;
+   int step_phase;
 }
 player = 
 {
@@ -519,6 +522,8 @@ static void player_walk_physics(void)
          }
       }
    }
+
+   player.in_air = len==0?1:0;
    
    v3_zero( player.rb.w );
    q_axis_angle( player.rb.q, (v3f){0.0f,1.0f,0.0f}, -player.angles[0] );
@@ -544,8 +549,8 @@ static void player_walk_physics(void)
       v3_muladds( player.rb.v, forward_dir, diff, player.rb.v );
 
       /* TODO move */
-      float walk_norm = (float)player.mdl.anim_walk->length / 30.0f,
-            run_norm  = (float)player.mdl.anim_run->length  / 30.0f;
+      float walk_norm = 30.0f/(float)player.mdl.anim_walk->length,
+            run_norm  = 30.0f/(float)player.mdl.anim_run->length ;
 
       player.walk_timer += ktimestep * vg_lerpf( walk_norm,run_norm,move_norm );
    }
@@ -719,6 +724,13 @@ static void player_physics(void)
          player.jump = 0.0f;
 
          player.jump_time = vg_time;
+
+         audio_lock();
+         audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D );
+         audio_player_set_position( &audio_player_extra, player.rb.co );
+         audio_player_set_vol( &audio_player_extra, 20.0f );
+         audio_player_playclip( &audio_player_extra, &audio_jumps[rand()%4] );
+         audio_unlock();
       }
    }
    else
@@ -802,6 +814,10 @@ static void player_do_motion(void)
 
          m3x3_copy( player.vr, player.gate_vr_frame );
          m3x3_copy( player.vr_pstep, player.gate_vr_pstep_frame );
+
+         audio_lock();
+         audio_play_oneshot( &audio_gate_lap, 1.0f );
+         audio_unlock();
          break;
       }
    }
@@ -818,13 +834,13 @@ static void player_animate_offboard(void)
    mdl_keyframe apose[32], bpose[32];
    struct skeleton *sk = &player.mdl.sk;
 
-   float walk_norm = 30.0f/(float)player.mdl.anim_walk->length,
-         run_norm  = 30.0f/(float)player.mdl.anim_run->length,
+   float walk_norm = (float)player.mdl.anim_walk->length/30.0f,
+         run_norm  = (float)player.mdl.anim_run->length/30.0f,
          t = player.walk_timer,
          l = vg_get_axis("grabr") * 0.5f + 0.5f;
 
    skeleton_sample_anim( sk, player.mdl.anim_walk, t*walk_norm, apose );
-   skeleton_sample_anim( sk, player.mdl.anim_run,  t*run_norm,  bpose );
+   skeleton_sample_anim( sk, player.mdl.anim_run,  t*run_norm, bpose );
 
    skeleton_lerp_pose( sk, apose, bpose, l, apose );
 
@@ -1137,7 +1153,38 @@ static void player_animate_camera(void)
  */
 static void player_audio(void)
 {
-   sfx_lock();
+   static int _ding = 0;
+   
+   int last = _ding;
+   _ding = glfwGetKey(vg_window, GLFW_KEY_C);
+
+   int trigger_ding = 0;
+   if( _ding && !last )
+      trigger_ding = 1;
+
+   static int _air = 0;
+
+   int l2 = _air;
+   _air = player.in_air;
+
+   static double last_revert = -2000.0;
+
+
+
+
+   audio_lock();
+   
+   double revert_delta = vg_time - last_revert;
+   if( player.on_board && (!_air && l2) && (fabsf(player.slip) > 0.5f) && 
+         (revert_delta > 0.7) )
+   {
+      audio_player_set_position( &audio_player_extra, player.rb.co );
+      audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D );
+      audio_player_set_vol( &audio_player_extra, 2.0f );
+      audio_player_playclip( &audio_player_extra, &audio_lands[rand()%5] );
+
+      last_revert = vg_time;
+   }
 
    static float air = 0.0f;
    air = vg_lerpf(air, player.in_air? 1.0f: 0.0f, 5.0f*ktimestep);
@@ -1148,48 +1195,74 @@ static void player_audio(void)
 
    float *cam = player.camera[3],
          *pos = player.rb.co;
+   
+   if( trigger_ding )
+      audio_player_playclip( &audio_player_extra, &audio_ding );
+
+   audio_player_set_position( &audio_player0, player.rb.co );
+   audio_player_set_position( &audio_player1, player.rb.co );
+   audio_player_set_position( &audio_player2, player.rb.co );
+   audio_player_set_position( &audio_player_gate, world.render_gate_pos );
 
    v3_sub( player.rb.co, player.camera[3], delta );
    v3_normalize( delta );
    m3x3_mulv( player.camera, ears, ears );
+
+   /* TODO, Make function */
+   v3_copy( ears, vg_audio.listener_ears );
+   v3_copy( player.camera[3], vg_audio.listener_pos );
+
+   /* Tunnel / occlusion */
+   audio_sample_occlusion( player.camera[3] );
    
    if( freecam || player.is_dead || !player.on_board )
    {
-      audio_player0.vol = 0.0f;
-      audio_player1.vol = 0.0f;
-      audio_player2.vol = 0.0f;
+      audio_player_set_vol( &audio_player0, 0.0f );
+      audio_player_set_vol( &audio_player1, 0.0f );
+      audio_player_set_vol( &audio_player2, 0.0f );
+
+      int walk_phase = 0;
+      if( vg_fractf(player.walk_timer) > 0.5f )
+         walk_phase = 1;
+      else
+         walk_phase = 0;
+
+      if( (player.step_phase != walk_phase) && !player.in_air )
+      {
+         v3_copy( player.rb.co, player.last_step_pos );
 
-      audio_player0.pan = 0.0f;
-      audio_player1.pan = 0.0f;
-      audio_player2.pan = 0.0f;
+         audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D );
+         audio_player_set_position( &audio_player_extra, player.rb.co );
+         audio_player_set_vol( &audio_player_extra, 6.0f );
+         audio_player_playclip( &audio_player_extra, 
+                                          &audio_footsteps[rand()%4] );
+      }
+
+      player.step_phase = walk_phase;
    }
    else
    {
-      /* Spacialize 0 */
-      audio_spacialize( &audio_player0, pos, cam, ears, 1.0f );
-      audio_player1.pan = audio_player0.pan;
-      audio_player2.pan = audio_player0.pan;
-
       /* Composite */
       float speed = vg_minf(v3_length( player.rb.v )*0.1f,1.0f),
-            attn  = audio_player0.vol * speed,
+            attn  = speed,
             slide = vg_clampf( fabsf(player.slip), 0.0f, 1.0f ),
             vol0  = (1.0f-air)*attn*(1.0f-slide),
             vol1  =       air *attn,
             vol2  = (1.0f-air)*attn*slide;
+      
+      audio_player_set_vol( &audio_player0, vol0 );
+      audio_player_set_vol( &audio_player1, vol1 );
+      audio_player_set_vol( &audio_player2, vol2 );
 
-      audio_player1.vol = vol1;
-      audio_player2.vol = vol2;
-      audio_player0.vol = vol0;
+      float reverb_amt = vol0 * audio_occlusion_current * 0.5f;
+      audio_player_set_pan( &audio_player3, 0.0f );
+      audio_player_set_vol( &audio_player3, reverb_amt );
    }
-
-   /* Tunnel / occlusion */
-   audio_sample_occlusion( player.camera[3] );
-   audio_player3.pan = 0.0f;
-   audio_player3.vol = audio_player0.vol * audio_occlusion_current * 2.0f;
    
+#if 0
    world_audio_update( cam, ears );
-   sfx_unlock();
+#endif
+   audio_unlock();
 }
 
 /*