unlock rendering
[carveJwlIkooP6JGAAIwe30JlM.git] / player_walk.h
index 989384c1fc9661cffe259296ef71952d47ce6c2b..d422e752b44c008a4c9ce9c9419c870ae8363f18 100644 (file)
@@ -4,10 +4,12 @@
 #include "player_api.h"
 #include "rigidbody.h"
 
+#define PLAYER_JUMP_EPSILON 0.1     /* 100ms jump allowance */
+
 struct player_walk{
    rb_capsule collider;
 
-   struct{
+   struct player_walk_state{
       v3f prev_pos;
       v3f drop_in_target,
           drop_in_foot_anchor,
@@ -32,25 +34,37 @@ struct player_walk{
          k_walk_outro_regular
       }
       outro_type;
-
-      struct skeleton_anim *outro_anim;
       double outro_start_time;
+
+      int jump_queued;
+      f64 jump_input_time;
+
+      f32 walk_timer;
+      int step_phase;
    }
-   state,
-   state_gate_storage;
+   state;
+
+   f32 move_speed;
 
    enum mdl_surface_prop surface;
    struct skeleton_anim *anim_walk, *anim_run, *anim_idle, *anim_jump,
                         *anim_jump_to_air, *anim_drop_in, *anim_intro;
 
-   float blend_fly,
-         blend_run,
-         blend_walk,
+   struct player_walk_animator {
+      v3f root_co;
+      v4f root_q;
+      f32 fly,
+          run,
+          walk;
 
-         move_speed,
-         walk_timer;
+      f32 walk_timer;
 
-   int step_phase;
+      v3f foot_anchor;
+      enum walk_outro outro_type;
+      f32 outro_t,
+          commit_t;
+   }
+   animator;
 };
 
 VG_STATIC float
@@ -75,12 +89,12 @@ VG_STATIC void player__walk_register(void)
 VG_STATIC void player__walk_pre_update  ( player_instance *player );
 VG_STATIC void player__walk_update      ( player_instance *player );
 VG_STATIC void player__walk_post_update ( player_instance *player );
-VG_STATIC void player__walk_animate     ( player_instance *player
-                                          player_animation *anim );
+VG_STATIC void player__walk_animate     ( player_instance *player );
+VG_STATIC void player__walk_pose( player_instance *player, player_pose *pose );
 VG_STATIC void player__walk_post_animate( player_instance *player );
 VG_STATIC void player__walk_im_gui      ( player_instance *player );
 VG_STATIC void player__walk_bind        ( player_instance *player );
-VG_STATIC void player__walk_transition  ( player_instance *player, v3f angles );
+VG_STATIC void player__walk_transition  ( player_instance *player );
 VG_STATIC void player__walk_reset       ( player_instance *player, 
                                           ent_spawn *rp );
 VG_STATIC void player__walk_restore( player_instance *player );