gameserver optimisations
[carveJwlIkooP6JGAAIwe30JlM.git] / player_remote.c
index d9f0065ee9f172d7d2ae0f16fc65323f661c2ac9..82bc3da24ab24d29ed82d754fac781211ff6c188 100644 (file)
@@ -5,6 +5,7 @@
 #include "addon.h"
 #include "font.h"
 #include "gui.h"
+#include "ent_miniworld.h"
 
 static i32 k_show_own_name = 0;
 
@@ -175,7 +176,24 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){
          .buffer_len = datasize,
          .bytes = 0,
       };
-         
+      
+      /* animation 
+       * -------------------------------------------------------------*/
+
+      dest->timestamp = frame->timestamp;
+      dest->boundary_hash = frame->boundary_hash;
+
+      struct network_player *player = &netplayers.list[ frame->client ];
+      struct player_subsystem_interface *sys = 
+         player_subsystems[ frame->subsystem ];
+
+      if( sys->network_animator_exchange ){
+         memset( &dest->data, 0, sys->animator_size );
+         sys->network_animator_exchange( &ctx, &dest->data );
+      }
+      else {
+         bitpack_bytes( &ctx, sys->animator_size, sys->animator_data );
+      }
 
       /* sfx
        * -------------------------------------------------------------*/
@@ -209,24 +227,6 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){
             dst->subframe = remaining;
          }
       }
-      
-      /* animation 
-       * -------------------------------------------------------------*/
-
-      dest->timestamp = frame->timestamp;
-      dest->boundary_hash = frame->boundary_hash;
-
-      struct network_player *player = &netplayers.list[ frame->client ];
-      struct player_subsystem_interface *sys = 
-         player_subsystems[ frame->subsystem ];
-
-      if( sys->network_animator_exchange ){
-         memset( &dest->data, 0, sys->animator_size );
-         sys->network_animator_exchange( &ctx, &dest->data );
-      }
-      else {
-         bitpack_bytes( &ctx, sys->animator_size, sys->animator_data );
-      }
 
       player->subsystem = frame->subsystem;
       player->down_bytes += msg->m_cbSize;
@@ -314,13 +314,6 @@ static void remote_player_send_playerframe(void){
          .bytes = 0
       };
 
-      /* sfx
-       * ---------------------------------------------*/
-
-      frame->sound_effects = localplayer.sfx_buffer_count;
-      for( u32 i=0; i<localplayer.sfx_buffer_count; i ++ )
-         net_sfx_exchange( &ctx, &localplayer.sfx_buffer[i] );
-
       /* animation 
        * -----------------------------------------------*/
 
@@ -331,6 +324,13 @@ static void remote_player_send_playerframe(void){
       else
          bitpack_bytes( &ctx, sys->animator_size, sys->animator_data );
 
+      /* sfx
+       * ---------------------------------------------*/
+
+      frame->sound_effects = localplayer.sfx_buffer_count;
+      for( u32 i=0; i<localplayer.sfx_buffer_count; i ++ )
+         net_sfx_exchange( &ctx, &localplayer.sfx_buffer[i] );
+
       u32 wire_size = base_size + ctx.bytes;
       netplayers.up_bytes += wire_size;
 
@@ -849,8 +849,13 @@ static void remote_players_imgui_world( world_instance *world, m4x4f pv,
          v3f co;
          remote_player_position( i, co );
 
-         if( player->active_world != world ){
+         if( !player->active_world )
             continue;
+
+         /* their in our active subworld */
+         if( player->active_world != world ){
+            m4x3_mulv( global_miniworld.mmdl, co, co );
+            co[1] -= 2.0f; /* HACK lol */
          }
 
          f32 d2 = v3_dist2( co, localplayer.rb.co );
@@ -878,9 +883,7 @@ static void remote_players_imgui_world( world_instance *world, m4x4f pv,
          player->opacity = vg_lerpf( player->opacity, opacity,
                                      vg.time_frame_delta * 2.0f );
          
-         remote_player_world_gui( 
-               pv, netplayers.final_mtx[localplayer.skeleton.bone_count*i][3], 
-               player );
+         remote_player_world_gui( pv, co, player );
 
          vg_ui.colour[3] = player->opacity;
          ui_flush( k_ui_shader_colour );