X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_walk.h;h=da4172c1394ecc8f3d4bb93254dff1f3efa50fa5;hb=HEAD;hp=e1e075593e983fba0f4de82dea3e5fb3ece8526d;hpb=09fc72b08113fa157a3abb2ded6086babedd10cf;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_walk.h b/player_walk.h index e1e0755..da4172c 100644 --- a/player_walk.h +++ b/player_walk.h @@ -1,18 +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; @@ -22,33 +21,37 @@ 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, + + /* 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 - } - outro_type; - double outro_start_time; + f32 transition_t; int jump_queued; f64 jump_input_time; + + f32 walk_timer; + int step_phase; + v3f steer; } state; - f32 move_speed, - walk_timer; - - int step_phase; + 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; + *anim_jump_to_air, *anim_drop_in, *anim_intro, + *anim_sit, *anim_popoff; struct player_walk_animator { v3f root_co; @@ -57,26 +60,37 @@ struct player_walk{ run, walk; - v3f foot_anchor; - enum walk_outro outro_type; - f32 outro_t, - commit_t; + f32 walk_timer, yaw, pitch, board_yaw; + + enum walk_activity activity; + f32 transition_t; } animator; +} +extern player_walk; +extern struct player_subsystem_interface player_subsystem_walk; + +enum player_walk_soundeffect { + k_player_walk_soundeffect_splash }; -VG_STATIC float - k_walkspeed = 10.0f, +static f32 + 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_step_height = 0.2f; + 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; -VG_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 ); @@ -84,17 +98,16 @@ VG_STATIC void player__walk_register(void) 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 ); -VG_STATIC void player__walk_animate ( player_instance *player ); -VG_STATIC void player__walk_pose ( player_instance *player ); -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 */ +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 );