minor changes to be on track with vg revision
[carveJwlIkooP6JGAAIwe30JlM.git] / player_remote.h
index e2d757c31a2c6b3ecbb668e3bebf2b5bdeaab554..2d6200b365c6bbfcc39df8932df95f57ec457bef 100644 (file)
@@ -3,26 +3,93 @@
 
 #include "player.h"
 #include "network.h"
+#include "network_common.h"
+#include "player_effects.h"
+
+#define NETWORK_SFX_QUEUE_LENGTH 12
 
 struct {
    struct network_player {
-      int active;
+      int active, isfriend, isblocked;
+      u64 steamid;
       u16 board_view_slot, playermodel_view_slot;
-      player_pose pose;
+      enum player_subsystem subsystem;
 
-      char username[32];
+      /* this is set IF they exist in a world that we have loaded */
+      world_instance *active_world;
+      int world_match[ k_world_max ];
+      u32 location_pstr; /* TODO: valid if active_world set. */
 
-      enum player_subsystem subsystem;
-      union {
-         struct player_skate_animator _skate;
-         struct player_walk_animator _walk;
-         struct player_dead_animator _dead;
-      };
+      /* TODO: Compression with server code */
+      char username[ NETWORK_USERNAME_MAX ];
+      char items[k_netmsg_playeritem_max][ADDON_UID_MAX];
+      char chat[ NETWORK_MAX_CHAT ];
+      char region[ NETWORK_REGION_MAX ];
+      u32 region_flags;
+      f64 chat_time;
+
+      /* ui */
+      u32 medals[3];
+      f32 opacity;
+
+      u32 down_bytes;
+      f32 down_kbs;
+      
+      struct player_effects_data effect_data;
+      bool render_glider;
    }
-   list[ 32 ];
+   list[ NETWORK_MAX_PLAYERS ];
+
+   struct interp_buffer {
+      /* collect the most recent 6 frames of animation data */
+      struct interp_frame {
+         int active;
+         f64 timestamp;
+         enum player_subsystem subsystem;
+
+         u8 flags;
+         u16 boundary_hash;
+
+         union interp_animdata {
+            /* these aren't accessed directly, just used to take the 
+             * max(sizeof) all systems */
+            struct player_skate_animator __skate;
+            struct player_walk_animator __walk;
+            struct player_dead_animator __dead;
+            struct player_basic_info_animator __basic;
+         } 
+         data;
+
+         struct remote_glider_animator data_glider;
+      }
+      frames[ NETWORK_BUFFERFRAMES ];
+
+      f64 t;
+   }
+   interp_data[ NETWORK_MAX_PLAYERS ];
+
+   struct net_sfx sfx_queue[ NETWORK_SFX_QUEUE_LENGTH ];
+
+   m4x3f *final_mtx,
+         *glider_mtx;
+   struct player_board_pose board_poses[ NETWORK_MAX_PLAYERS ];
+
+   u32 up_bytes;
+   f32 up_kbs, down_kbs;
+   f64 last_data_measurement;
+
+   int chatting;
+   char chat_buffer[ NETWORK_MAX_CHAT ], chat_message[ NETWORK_MAX_CHAT ];
+   f64 chat_time;
 }
 static netplayers;
 
 static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg );
+static void remote_player_debug_update(void);
+static void remote_player_send_playerframe(void);
+static void animate_remote_player( u32 index );
+static void render_remote_players( world_instance *world, camera *cam );
+static void relink_all_remote_player_worlds(void);
+static void player_remote_update_friendflags( struct network_player *remote );
 
 #endif /* PLAYER_REMOTE_H */