update vg
[carveJwlIkooP6JGAAIwe30JlM.git] / player_walk.c
index 959ed4be31cef7b4271439a57804475bfe3299e5..7d160a7a09d0d801cb19f15bc230cb5f9b37c8f1 100644 (file)
@@ -255,25 +255,20 @@ VG_STATIC void player__walk_pre_update( player_instance *player )
    if( w->state.activity != k_walk_activity_immobile )
       player_look( player, player->angles );
 
-   if( w->state.outro_anim )
-   {
+   if( w->state.outro_anim ){
       float outro_length = (float)w->state.outro_anim->length /
                                   w->state.outro_anim->rate,
             outro_time   = vg.time - w->state.outro_start_time;
 
-      if( outro_time >= outro_length )
-      {
+      if( outro_time >= outro_length ){
          w->state.outro_anim = NULL;
-         if( w->state.outro_type == k_walk_outro_drop_in )
-         {
+         if( w->state.outro_type == k_walk_outro_drop_in ){
             player_walk_drop_in_to_skate( player );
          }
-         else if( w->state.outro_type == k_walk_outro_jump_to_air )
-         {
+         else if( w->state.outro_type == k_walk_outro_jump_to_air ){
             player_walk_generic_to_skate( player, k_skate_activity_air, 0.0f );
          }
-         else
-         {
+         else{
             player_walk_generic_to_skate( player, 
                                           k_skate_activity_ground, 1.0f );
          }
@@ -281,40 +276,40 @@ VG_STATIC void player__walk_pre_update( player_instance *player )
          return;
       }
    }
-   else if( vg_input_button_down( player->input_use ) )
-   {
-      if( w->state.activity == k_walk_activity_ground )
-      {
-         if( player_walk_scan_for_drop_in( player ) )
-         {
-            w->state.outro_type = k_walk_outro_drop_in;
-            w->state.outro_anim = w->anim_drop_in;
-            w->state.outro_start_time = vg.time;
-            w->state.activity = k_walk_activity_immobile;
-
-            struct player_avatar *av = player->playeravatar;
-            m4x3_mulv( av->sk.final_mtx[ av->id_ik_foot_r ], 
-                       av->sk.bones[ av->id_ik_foot_r ].co, 
-                       w->state.drop_in_foot_anchor );
+   else if( vg_input_button_down( player->input_use ) ){
+      if( v3_dist2( player->rb.co, gzoomer.obj.rb.co ) <= 4.0f*4.0f ){
+         player->subsystem = k_player_subsystem_drive;
+      }
+      else{
+         if( w->state.activity == k_walk_activity_ground ){
+            if( player_walk_scan_for_drop_in( player ) ){
+               w->state.outro_type = k_walk_outro_drop_in;
+               w->state.outro_anim = w->anim_drop_in;
+               w->state.outro_start_time = vg.time;
+               w->state.activity = k_walk_activity_immobile;
+
+               struct player_avatar *av = player->playeravatar;
+               m4x3_mulv( av->sk.final_mtx[ av->id_ik_foot_r ], 
+                          av->sk.bones[ av->id_ik_foot_r ].co, 
+                          w->state.drop_in_foot_anchor );
+            }
+            else{
+               w->state.outro_type = k_walk_outro_regular;
+               w->state.outro_anim = w->anim_intro;
+               w->state.outro_start_time = vg.time;
+               w->state.activity = k_walk_activity_lockedmove;
+
+               if( player_xyspeed2(player) < 0.1f * 0.1f )
+                  q_mulv( player->rb.q, (v3f){0.0f,0.0f,1.6f}, player->rb.v );
+            }
          }
-         else
-         {
-            w->state.outro_type = k_walk_outro_regular;
-            w->state.outro_anim = w->anim_intro;
+         else{
+            w->state.outro_type = k_walk_outro_jump_to_air;
+            w->state.outro_anim = w->anim_jump_to_air;
             w->state.outro_start_time = vg.time;
-            w->state.activity = k_walk_activity_lockedmove;
-
-            if( player_xyspeed2(player) < 0.1f * 0.1f )
-               q_mulv( player->rb.q, (v3f){0.0f,0.0f,1.6f}, player->rb.v );
+            return;
          }
       }
-      else
-      {
-         w->state.outro_type = k_walk_outro_jump_to_air;
-         w->state.outro_anim = w->anim_jump_to_air;
-         w->state.outro_start_time = vg.time;
-         return;
-      }
    }
 }
 
@@ -587,6 +582,13 @@ VG_STATIC void player__walk_update( player_instance *player )
       w->state_gate_storage = w->state;
       player__pass_gate( player, gate );
    }
+   rb_update_transform( &player->rb );
+}
+
+VG_STATIC void player__walk_restore( player_instance *player )
+{
+   struct player_walk *w = &player->_walk;
+   w->state = w->state_gate_storage;
 }
 
 VG_STATIC void player__walk_post_update( player_instance *player )
@@ -597,7 +599,7 @@ VG_STATIC void player__walk_post_update( player_instance *player )
    m3x3_copy( player->rb.to_world, mtx );
    v3_add( player->rb.co, player->basis[1], mtx[3] );
 
-   float substep = vg_clampf( vg.accumulator / k_rb_delta, 0.0f, 1.0f );
+   float substep = vg.time_fixed_extrapolate;
    v3_muladds( mtx[3], player->rb.v, k_rb_delta*substep, mtx[3] );
    debug_capsule( mtx, w->collider.radius, w->collider.height, VG__YELOW );