update helpers/location to 'frosted' ui
[carveJwlIkooP6JGAAIwe30JlM.git] / player_walk.h
index a8dd9facd0dc526d2fecf94e1adac836fe37de11..da4172c1394ecc8f3d4bb93254dff1f3efa50fa5 100644 (file)
@@ -1,19 +1,17 @@
-#ifndef PLAYER_WALK_H
-#define PLAYER_WALK_H
-
+#pragma once
 #include "player.h"
 #include "player_api.h"
-#include "rigidbody.h"
+#include "vg/vg_rigidbody.h"
 
 #define PLAYER_JUMP_EPSILON 0.1     /* 100ms jump allowance */
 
-struct player_walk{
+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;
 
@@ -23,29 +21,28 @@ struct player_walk{
       enum walk_activity{
          k_walk_activity_air,
          k_walk_activity_ground,
-         k_walk_activity_sleep,
-         k_walk_activity_lockedmove,
          k_walk_activity_sit,
-         k_walk_activity_sit_up
+         k_walk_activity_sit_up,
+
+         /* transitions */
+         k_walk_activity_inone,
+         k_walk_activity_ipopoff,
+         k_walk_activity_oair,
+         k_walk_activity_odrop_in,
+         k_walk_activity_oregular,
+
+         k_walk_activity_max,
       }
       activity;
 
-      enum walk_outro{
-         k_walk_outro_none,
-         k_walk_outro_jump_to_air,
-         k_walk_outro_drop_in,
-         k_walk_outro_regular,
-         k_walk_outro_max
-      }
-      outro_type;
-      double outro_start_time;
+      f32 transition_t;
 
       int jump_queued;
       f64 jump_input_time;
 
       f32 walk_timer;
-      f32 sit_t;
       int step_phase;
+      v3f steer;
    }
    state;
 
@@ -54,7 +51,7 @@ struct player_walk{
    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,
-                        *anim_sit;
+                        *anim_sit, *anim_popoff;
 
    struct player_walk_animator {
       v3f root_co;
@@ -63,32 +60,37 @@ struct player_walk{
           run,
           walk;
 
-      f32 walk_timer, yaw, pitch;
+      f32 walk_timer, yaw, pitch, board_yaw;
 
-      v3f foot_anchor;
-      enum walk_outro outro_type;
-      f32 outro_t,
-          commit_t,
-          sit_t;
+      enum walk_activity activity;
+      f32 transition_t;
    }
    animator;
 }
-static player_walk;
+extern player_walk;
+extern struct player_subsystem_interface player_subsystem_walk;
+
+enum player_walk_soundeffect {
+   k_player_walk_soundeffect_splash
+};
 
 static f32
-   k_walkspeed             = 10.0f,
+   k_walkspeed             = 4.4f,
+   k_runspeed              = 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_friction         = 6.0f,
    k_walk_step_height      = 0.2f,
 
    k_sit_yaw_limit         = VG_PIf/1.7f,
    k_sit_pitch_limit       = VG_PIf/4.0f;
 
-static void player__walk_register(void){
+static void player__walk_register(void)
+{
    VG_VAR_F32( k_walkspeed,      flags=VG_VAR_CHEAT );
+   VG_VAR_F32( k_runspeed,       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 );
@@ -96,35 +98,16 @@ static void player__walk_register(void){
    VG_VAR_F32( k_walk_accel,     flags=VG_VAR_CHEAT );
 }
 
-static void player__walk_pre_update  (void);
-static void player__walk_update      (void);
-static void player__walk_post_update (void);
-static void player__walk_animate     (void);
-static void player__walk_pose        (void *animator, player_pose *pose);
-static void player__walk_post_animate(void);
-static void player__walk_im_gui      (void);
-static void player__walk_bind        (void);
-static void player__walk_transition  (void);
-static void player__walk_reset       (ent_spawn *rp );
-static void player__walk_restore     (void);
-static void player__walk_animator_exchange( bitpack_ctx *ctx, void *data );
-
-struct player_subsystem_interface static player_subsystem_walk = {
-   .system_register = player__walk_register,
-   .bind = player__walk_bind,
-   .reset = player__walk_reset,
-   .pre_update = player__walk_pre_update,
-   .update = player__walk_update,
-   .post_update = player__walk_post_update,
-   .im_gui = player__walk_im_gui,
-   .animate = player__walk_animate,
-   .post_animate = player__walk_post_animate,
-   .pose = player__walk_pose,
-   .network_animator_exchange = player__walk_animator_exchange,
-
-   .animator_data = &player_walk.animator,
-   .animator_size = sizeof(player_walk.animator),
-   .name = "Walk"
-};
-
-#endif /* PLAYER_WALK_H */
+void player__walk_pre_update  (void);
+void player__walk_update      (void);
+void player__walk_post_update (void);
+void player__walk_animate     (void);
+void player__walk_pose        (void *animator, player_pose *pose);
+void player__walk_post_animate(void);
+void player__walk_im_gui      (void);
+void player__walk_bind        (void);
+void player__walk_reset       (void);
+void player__walk_restore     (void);
+void player__walk_animator_exchange( bitpack_ctx *ctx, void *data );
+void player__walk_transition( bool grounded, f32 board_yaw );
+void player__walk_sfx_oneshot( u8 id, v3f pos, f32 volume );