holdout poses
authorhgn <hgodden00@gmail.com>
Sun, 5 Feb 2023 16:37:46 +0000 (16:37 +0000)
committerhgn <hgodden00@gmail.com>
Sun, 5 Feb 2023 16:37:46 +0000 (16:37 +0000)
player.c
player.h
player_walk.c

index 0c727be4fe98b8cf9870e62525610f84d8dc0902..c898e6d83958eaf4315bf3de3a92f828c6fd336b 100644 (file)
--- a/player.c
+++ b/player.c
@@ -209,6 +209,13 @@ VG_STATIC void player__pre_render( player_instance *player )
 
       struct skeleton *sk = &player->playeravatar->sk;
 
+      if( player->holdout_time > 0.0f )
+      {
+         skeleton_lerp_pose( sk, res.pose, player->holdout_pose, 
+                                           player->holdout_time, res.pose );
+         player->holdout_time -= vg.frame_delta * 4.0f;
+      }
+
       skeleton_apply_pose( sk, res.pose, k_anim_apply_defer_ik );
       skeleton_apply_ik_pass( sk );
       skeleton_apply_pose( sk, res.pose, k_anim_apply_deffered_only );
index b6c70c04562716bb95ec4f42c9b0ef8b31044964..137a1ad056896fb33289b2f24a4aa2f408847bf4 100644 (file)
--- a/player.h
+++ b/player.h
@@ -77,6 +77,9 @@ struct player_instance
    struct player_ragdoll  ragdoll;
    vg_tex2d              *playertex;
 
+   player_pose            holdout_pose;
+   float                  holdout_time;
+
    /*
     * Subsystems
     * -------------------------------------------------
index a2a2ed80198a0fd3dff2c08a1b2b141e3222b0e1..0503f48fde51853c300f8cccfaf868ca7c42d2b1 100644 (file)
@@ -682,6 +682,9 @@ VG_STATIC void player__walk_animate( player_instance *player,
             v4_copy( dest->root_q, player->rb.q );
             v3_muladds( dest->root_co, player->rb.to_world[1], 
                         -0.28f * dop_t, dest->root_co );
+
+            skeleton_copy_pose( sk, dest->pose, player->holdout_pose );
+            player->holdout_time = 1.0f;
          }
          return;
       }
@@ -689,6 +692,9 @@ VG_STATIC void player__walk_animate( player_instance *player,
       {
          v3_muladds( dest->root_co, player->rb.to_world[1], 
                      -0.28f * outro_t, dest->root_co );
+
+         skeleton_copy_pose( sk, dest->pose, player->holdout_pose );
+         player->holdout_time = 1.0f;
       }
    }
    else