glider orphan / entity normals with scale
[carveJwlIkooP6JGAAIwe30JlM.git] / player_render.c
index 6174155351ef8486297f2e158bf31e29adbdd3e4..c1e96f67864dc82a37924240f28283c7bb9ce000 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 );
    }
@@ -543,6 +555,8 @@ static void player__render( camera *cam ){
                   &localplayer.pose.board, k_board_shader_player );
 
    SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+
+   player_glide_render( cam, world, &localplayer.pose );
 }
 
 static void player_mirror_pose( mdl_keyframe pose[32],