commit
[carveJwlIkooP6JGAAIwe30JlM.git] / player_walk.c
index c86c9dba385d28ac8f3da4b0a22ad0013659c59b..6d020523d0cc1bb57451dc6dc3fb992b080bb291 100644 (file)
@@ -118,6 +118,7 @@ VG_STATIC void player_walk_drop_in_overhang_transform( player_instance *player,
 VG_STATIC int player_walk_scan_for_drop_in( player_instance *player )
 {
    struct player_walk *w = &player->_walk;
+   world_instance *world = get_active_world();
 
    v3f dir, center;
    q_mulv( player->rb.q, (v3f){0.0f,0.0f,1.0f}, dir );
@@ -140,7 +141,7 @@ VG_STATIC int player_walk_scan_for_drop_in( player_instance *player )
       ray_hit *ray = &samples[ sample_count ];
       ray->dist = 2.0f;
 
-      if( ray_world( pos, ray_dir, ray ) )
+      if( ray_world( world, pos, ray_dir, ray ) )
       {
          vg_line( pos, ray->pos, VG__RED );
          vg_line_pt3( ray->pos, 0.025f, VG__BLACK );
@@ -218,7 +219,7 @@ VG_STATIC int player_walk_scan_for_drop_in( player_instance *player )
          ray_hit ray;
          ray.dist = k_board_length*2.0f + 0.6f;
          
-         if( ray_world( va, v0, &ray ) )
+         if( ray_world( world, va, v0, &ray ) )
          {
             vg_line( va, vb, VG__RED );
             vg_line_pt3( ray.pos, 0.1f, VG__RED );
@@ -227,7 +228,7 @@ VG_STATIC int player_walk_scan_for_drop_in( player_instance *player )
          }
 
          v3_muls( v0, -1.0f, v0 );
-         if( ray_world( vb, v0, &ray ) )
+         if( ray_world( world, vb, v0, &ray ) )
          {
             vg_line( va, vb, VG__RED );
             vg_line_pt3( ray.pos, 0.1f, VG__RED );
@@ -395,8 +396,10 @@ VG_STATIC void player__walk_update( player_instance *player )
    /* 
     * Collision detection
     */
+   world_instance *world = get_active_world();
+
    len = rb_capsule__scene( mtx, &w->collider, NULL, 
-                            &world.rb_geo.inf.scene, manifold );
+                            &world->rb_geo.inf.scene, manifold );
    rb_manifold_filter_coplanar( manifold, len, 0.01f );
    len = rb_manifold_apply_filtered( manifold, len );
 
@@ -429,15 +432,13 @@ VG_STATIC void player__walk_update( player_instance *player )
    v3_muls( right_dir,  walk[0], movedir );
    v3_muladds( movedir, forward_dir, walk[1], movedir );
 
-   if( w->state.activity == k_walk_activity_ground )
-   {
+   if( w->state.activity == k_walk_activity_ground ){
       v3_normalize( surface_avg );
 
       v3f tx, ty;
       rb_tangent_basis( surface_avg, tx, ty );
 
-      if( v2_length2(walk) > 0.001f )
-      {
+      if( v2_length2(walk) > 0.001f ){
          /* clip movement to the surface */
          float d = v3_dot(surface_avg,movedir);
          v3_muladds( movedir, surface_avg, -d, movedir );
@@ -447,29 +448,25 @@ VG_STATIC void player__walk_update( player_instance *player )
       nominal_speed = k_walkspeed;
 
       /* jump */
-      if( player->input_jump->button.value )
-      {
+      if( player->input_jump->button.value ){
          v3_muladds( player->rb.v, player->basis[1], 5.0f, player->rb.v );
          w->state.activity = k_walk_activity_air;
          accel_speed = k_walk_air_accel;
          nominal_speed = k_airspeed;
       }
-      else
-      {
+      else{
          player_friction( player->rb.v );
 
-         struct world_material *surface_mat = world_contact_material(manifold);
-         w->surface = surface_mat->info.surface_prop;
+         struct world_surface *surf = world_contact_surface( world, manifold );
+         w->surface = surf->info.surface_prop;
       }
    }
-   else
-   {
+   else{
       accel_speed = k_walk_air_accel;
       nominal_speed = k_airspeed;
    }
 
-   if( v2_length2(walk) > 0.001f )
-   {
+   if( v2_length2(walk) > 0.001f ){
       player_accelerate( player->rb.v, movedir, nominal_speed, accel_speed );
       v3_normalize( movedir );
    }
@@ -477,10 +474,8 @@ VG_STATIC void player__walk_update( player_instance *player )
    /*
     * Resolve velocity constraints
     */
-   for( int j=0; j<5; j++ )
-   {
-      for( int i=0; i<len; i++ )
-      {
+   for( int j=0; j<5; j++ ){
+      for( int i=0; i<len; i++ ){
          struct contact *ct = &manifold[i];
          
          /*normal */
@@ -565,7 +560,7 @@ VG_STATIC void player__walk_update( player_instance *player )
       float t, sr = w->collider.radius-0.04f;
       v3f n;
 
-      if( spherecast_world( lwr_prev, lwr_now, sr, &t, n ) != -1 )
+      if( spherecast_world( world, lwr_prev, lwr_now, sr, &t, n ) != -1 )
       {
          v3_lerp( lwr_prev, lwr_now, vg_maxf(0.01f,t), player->rb.co );
          player->rb.co[1] -= w->collider.radius;
@@ -576,9 +571,9 @@ VG_STATIC void player__walk_update( player_instance *player )
       }
    }
 
-   teleport_gate *gate;
-   if( (gate = world_intersect_gates( player->rb.co, w->state.prev_pos )) )
-   {
+   ent_gate *gate = 
+      world_intersect_gates( world, player->rb.co, w->state.prev_pos );
+   if( gate ){
       m4x3_mulv( gate->transport, player->rb.co, player->rb.co );
       m3x3_mulv( gate->transport, player->rb.v,  player->rb.v );
 
@@ -703,8 +698,7 @@ VG_STATIC void player__walk_animate( player_instance *player,
 
    float walk_yaw = player_get_heading_yaw( player );
 
-   if( w->state.outro_anim )
-   {
+   if( w->state.outro_anim ){
       struct player_avatar *av = player->playeravatar;
       float outro_length = (float)w->state.outro_anim->length /
                                   w->state.outro_anim->rate,
@@ -716,8 +710,7 @@ VG_STATIC void player__walk_animate( player_instance *player,
                                     outro_time, bpose );
       skeleton_lerp_pose( sk, apose, bpose, outro_t * 10.0f, dest->pose );
 
-      if( w->state.outro_type == k_walk_outro_drop_in )
-      {
+      if( w->state.outro_type == k_walk_outro_drop_in ){
          float inv_rate      = 1.0f / w->state.outro_anim->rate,
                anim_frames   = w->state.outro_anim->length * inv_rate,
                step_frames   = 12.0f * inv_rate,
@@ -749,8 +742,7 @@ VG_STATIC void player__walk_animate( player_instance *player,
          
 
          /* the drop in bit */
-         if( step_t >= 1.0f )
-         {
+         if( step_t >= 1.0f ){
             v4f final_q;
             player_walk_drop_in_overhang_transform( player, dop_t, 
                                                     player->rb.co, final_q );
@@ -765,8 +757,7 @@ VG_STATIC void player__walk_animate( player_instance *player,
          }
          return;
       }
-      else
-      {
+      else{
          v3_muladds( dest->root_co, player->rb.to_world[1], 
                      -0.1f * outro_t, dest->root_co );
 
@@ -774,8 +765,7 @@ VG_STATIC void player__walk_animate( player_instance *player,
          player->holdout_time = 1.0f;
       }
    }
-   else
-   {
+   else{
       skeleton_copy_pose( sk, apose, dest->pose );
    }