basic replayable replays
[carveJwlIkooP6JGAAIwe30JlM.git] / player_walk.h
index f1efabc52492cc227b9c61df01c9ab152617de6b..3e450bcc26f541182bdb613987f0d242e109caf7 100644 (file)
@@ -2,35 +2,51 @@
 #define PLAYER_WALK_H
 
 #include "player_api.h"
+#include "rigidbody.h"
 
-struct player_walk
-{
-   rb_capsule collider;
+#define PLAYER_JUMP_EPSILON 0.1     /* 100ms jump allowance */
 
-   struct
-   {
-      v3f angles;
-      float heading_angle;
+struct player_walk{
+   rb_capsule collider;
 
+   struct player_walk_state{
       v3f prev_pos;
+      v3f drop_in_target,
+          drop_in_foot_anchor,
+          drop_in_start,
+          drop_in_normal;
 
-      enum walk_activity
-      {
+      float drop_in_start_angle,
+            drop_in_angle;
+
+      enum walk_activity{
          k_walk_activity_air,
          k_walk_activity_ground,
-         k_walk_activity_sleep
+         k_walk_activity_sleep,
+         k_walk_activity_lockedmove
       }
       activity;
 
+      enum walk_outro{
+         k_walk_outro_none,
+         k_walk_outro_jump_to_air,
+         k_walk_outro_drop_in,
+         k_walk_outro_regular
+      }
+      outro_type;
+
       struct skeleton_anim *outro_anim;
       double outro_start_time;
+
+      int jump_queued;
+      f64 jump_input_time;
    }
    state,
    state_gate_storage;
 
    enum mdl_surface_prop surface;
    struct skeleton_anim *anim_walk, *anim_run, *anim_idle, *anim_jump,
-                        *anim_jump_to_air;
+                        *anim_jump_to_air, *anim_drop_in, *anim_intro;
 
    float blend_fly,
          blend_run,
@@ -38,8 +54,29 @@ struct player_walk
 
          move_speed,
          walk_timer;
+
+   int step_phase;
 };
 
+VG_STATIC float
+   k_walkspeed             = 10.0f,
+   k_airspeed              = 1.2f,
+   k_stopspeed             = 4.0f,
+   k_walk_accel            = 10.0f,
+   k_walk_air_accel        = 7.0f,
+   k_walk_friction         = 10.0f,
+   k_walk_step_height      = 0.2f;
+
+VG_STATIC void player__walk_register(void)
+{
+   VG_VAR_F32( k_walkspeed,      flags=VG_VAR_CHEAT );
+   VG_VAR_F32( k_stopspeed,      flags=VG_VAR_CHEAT );
+   VG_VAR_F32( k_airspeed,       flags=VG_VAR_CHEAT );
+   VG_VAR_F32( k_walk_friction,  flags=VG_VAR_CHEAT );
+   VG_VAR_F32( k_walk_air_accel, flags=VG_VAR_CHEAT );
+   VG_VAR_F32( k_walk_accel,     flags=VG_VAR_CHEAT );
+}
+
 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 );
@@ -49,5 +86,8 @@ 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_reset       ( player_instance *player, 
+                                          ent_spawn *rp );
+VG_STATIC void player__walk_restore( player_instance *player );
 
 #endif /* PLAYER_WALK_H */