add one shots to replay buffer
[carveJwlIkooP6JGAAIwe30JlM.git] / player_render.c
index 6174155351ef8486297f2e158bf31e29adbdd3e4..1ade3d7d86c1856cfe556c4f2600d42b15675739 100644 (file)
@@ -275,6 +275,7 @@ 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 );
 
@@ -310,6 +311,16 @@ 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;
@@ -338,6 +349,7 @@ static void player__animate_from_replay( replay_buffer *replay ){
          sys0->pose( a0, &localplayer.pose );
       }
 
+      player__observe_system( frame->system );
       if( sys0->sfx_comp ) 
          sys0->sfx_comp( a0 );
    }