X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_render.c;h=1ade3d7d86c1856cfe556c4f2600d42b15675739;hb=76315944e5a98838163e0aba8601ed3522f0724d;hp=2636f802d0885dd8a0877961bd93cdbd5b47976d;hpb=23897aeb79caa65b4c19de6c2f20f05bf3d86114;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_render.c b/player_render.c index 2636f80..1ade3d7 100644 --- a/player_render.c +++ b/player_render.c @@ -258,7 +258,7 @@ static void player__animate(void){ q_nlerp( pose->root_q, localplayer.holdout_pose.root_q, localplayer.holdout_time, pose->root_q ); - localplayer.holdout_time -= vg.time_frame_delta * 2.0f; + localplayer.holdout_time -= vg.time_frame_delta / 0.25f; } effect_blink_apply( &localplayer.effect_data.blink, @@ -275,6 +275,10 @@ static void player__animate(void){ if( sys->post_animate ) sys->post_animate(); + player__observe_system( localplayer.subsystem ); + if( sys->sfx_comp ) + sys->sfx_comp( sys->animator_data ); + player__cam_iterate(); } @@ -307,23 +311,34 @@ static void lerp_player_pose( player_pose *pose0, player_pose *pose1, f32 t, } } +static void player__observe_system( enum player_subsystem id ){ + if( id != localplayer.observing_system ){ + struct player_subsystem_interface *sysm1 = + player_subsystems[ localplayer.observing_system ]; + + if( sysm1->sfx_kill ) sysm1->sfx_kill(); + localplayer.observing_system = id; + } +} + static void player__animate_from_replay( replay_buffer *replay ){ replay_frame *frame = replay->cursor_frame, *next = NULL; if( frame ){ next = frame->r; + struct player_subsystem_interface + *sys0 = player_subsystems[frame->system]; + void *a0 = replay_frame_data( frame, k_replay_framedata_animator ); + if( next ){ f32 t = replay_subframe_time( replay ); player_pose pose0, pose1; struct player_subsystem_interface - *sys0 = player_subsystems[frame->system], *sys1 = player_subsystems[next->system]; - - void *a0 = replay_frame_data( frame, k_replay_framedata_animator ), - *a1 = replay_frame_data( next, k_replay_framedata_animator ); + void *a1 = replay_frame_data( next, k_replay_framedata_animator ); sys0->pose( a0, &pose0 ); sys1->pose( a1, &pose1 ); @@ -331,11 +346,12 @@ static void player__animate_from_replay( replay_buffer *replay ){ lerp_player_pose( &pose0, &pose1, t, &localplayer.pose ); } else{ - struct player_subsystem_interface - *sys = player_subsystems[frame->system]; - sys->pose( replay_frame_data( frame, k_replay_framedata_animator ), - &localplayer.pose ); + sys0->pose( a0, &localplayer.pose ); } + + player__observe_system( frame->system ); + if( sys0->sfx_comp ) + sys0->sfx_comp( a0 ); } else return;