X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=cd7fd57a5996b28554968ed1c2b626fa043783c1;hb=eb203257efcfe324217de9e733cc6c1371b99de6;hp=8923cf9190f6352631567a7a14b78614b44fabea;hpb=34a8df54eb962f3ad2e036355041f5bc5cabe5a0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 8923cf9..cd7fd57 100644 --- a/player.h +++ b/player.h @@ -8,11 +8,13 @@ #include "player_skate.h" #include "player_dead.h" +#define PLAYER_REWIND_FRAMES 60*4 + struct player_instance { /* transform definition */ - rigidbody rb; - v3f angles; + rigidbody rb, rb_gate_storage; + v3f angles, angles_storage; v4f qbasis; m3x3f basis, invbasis, basis_gate; @@ -22,7 +24,7 @@ struct player_instance * Camera management * --------------------------- */ - camera cam; /* output final camera */ + camera cam; enum camera_mode { @@ -32,7 +34,6 @@ struct player_instance camera_mode; float camera_type_blend; - v3f fpv_offset, /* expressed relative to rigidbody */ tpv_offset, fpv_viewpoint, /* expressed relative to neck bone inverse final */ @@ -42,6 +43,10 @@ struct player_instance tpv_lpf, cam_velocity_smooth; + v3f cam_override_pos; + v2f cam_override_angles; + float cam_override_strength; + float cam_velocity_influence, cam_velocity_coefficient, cam_velocity_constant, @@ -51,7 +56,7 @@ struct player_instance cam_land_punch, cam_land_punch_v; - teleport_gate *gate_waiting; + ent_gate *gate_waiting; /* * Input @@ -87,6 +92,25 @@ struct player_instance player_pose holdout_pose; float holdout_time; + /* + * Rewind + * ---------------------------------------------------- + */ + int rewinding, rewind_sound_wait; + + struct rewind_frame{ + v3f pos; + v3f ang; + } + *rewind_buffer; + u32 rewind_length; + float rewind_accum; + ent_gate *rewind_gate; + + float rewind_total_length, rewind_predicted_time, + dist_accum; + double rewind_start, rewind_time; + /* * Subsystems * ------------------------------------------------- @@ -98,7 +122,8 @@ struct player_instance k_player_subsystem_skate = 1, k_player_subsystem_dead = 2 } - subsystem; + subsystem, + subsystem_gate; struct player_skate _skate; struct player_walk _walk; @@ -119,9 +144,9 @@ void (*_player_bind[])( player_instance *player ) = }; VG_STATIC -void (*_player_reset[])( player_instance *player, struct respawn_point *rp ) = +void (*_player_reset[])( player_instance *player, ent_spawn *rp ) = { - NULL, + player__walk_reset, player__skate_reset, NULL }; @@ -174,6 +199,14 @@ void( *_player_post_animate[])( player_instance *player ) = player__dead_post_animate }; +VG_STATIC +void( *_player_restore[] )( player_instance *player ) = +{ + player__walk_restore, + player__skate_restore, + NULL +}; + /* implementation */ #include "player.c" @@ -414,7 +447,6 @@ VG_STATIC void player_init(void) /* 1 */ VG_VAR_I32( cl_thirdperson ); VG_VAR_F32_PERSISTENT( fc_speed ); - /* TODO: NOT PERSISTENT */ VG_VAR_F32( k_ragdoll_limit_scale ); VG_VAR_I32( k_ragdoll_div ); VG_VAR_I32( k_ragdoll_debug_collider );