X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_walk.h;h=80cf5a9918e581f6c867768d85a709e1125f1af9;hb=7122b79f53f4501751d884c0bf2e838ab501c4a3;hp=d422e752b44c008a4c9ce9c9419c870ae8363f18;hpb=da1a0abc0c32b4283746949ba9a135a7d3c0b82c;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_walk.h b/player_walk.h index d422e75..80cf5a9 100644 --- a/player_walk.h +++ b/player_walk.h @@ -1,6 +1,7 @@ #ifndef PLAYER_WALK_H #define PLAYER_WALK_H +#include "player.h" #include "player_api.h" #include "rigidbody.h" @@ -23,7 +24,9 @@ struct player_walk{ k_walk_activity_air, k_walk_activity_ground, k_walk_activity_sleep, - k_walk_activity_lockedmove + k_walk_activity_lockedmove, + k_walk_activity_sit, + k_walk_activity_sit_up } activity; @@ -40,6 +43,7 @@ struct player_walk{ f64 jump_input_time; f32 walk_timer; + f32 sit_t; int step_phase; } state; @@ -48,7 +52,8 @@ 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_jump_to_air, *anim_drop_in, *anim_intro, + *anim_sit; struct player_walk_animator { v3f root_co; @@ -57,17 +62,19 @@ struct player_walk{ run, walk; - f32 walk_timer; + f32 walk_timer, yaw, pitch; v3f foot_anchor; enum walk_outro outro_type; f32 outro_t, - commit_t; + commit_t, + sit_t; } animator; -}; +} +static player_walk; -VG_STATIC float +static f32 k_walkspeed = 10.0f, k_airspeed = 1.2f, k_stopspeed = 4.0f, @@ -76,8 +83,7 @@ VG_STATIC float k_walk_friction = 10.0f, k_walk_step_height = 0.2f; -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_stopspeed, flags=VG_VAR_CHEAT ); VG_VAR_F32( k_airspeed, flags=VG_VAR_CHEAT ); @@ -86,17 +92,35 @@ 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, 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 ); -VG_STATIC void player__walk_reset ( player_instance *player, - ent_spawn *rp ); -VG_STATIC void player__walk_restore( player_instance *player ); +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 */