save timing version in replay frame
[carveJwlIkooP6JGAAIwe30JlM.git] / player_remote.h
1 #ifndef PLAYER_REMOTE_H
2 #define PLAYER_REMOTE_H
3
4 #include "player.h"
5 #include "network.h"
6 #include "network_common.h"
7 #include "player_effects.h"
8
9 #define NETWORK_SFX_QUEUE_LENGTH 12
10
11 struct {
12 struct network_player {
13 int active, isfriend, isblocked;
14 u64 steamid;
15 u16 board_view_slot, playermodel_view_slot;
16 enum player_subsystem subsystem;
17
18 /* this is set IF they exist in a world that we have loaded */
19 world_instance *active_world;
20 int world_match[ k_world_max ];
21 u32 location_pstr; /* TODO: valid if active_world set. */
22
23 /* TODO: Compression with server code */
24 char username[ NETWORK_USERNAME_MAX ];
25 char items[k_netmsg_playeritem_max][ADDON_UID_MAX];
26 char chat[ NETWORK_MAX_CHAT ];
27 char region[ NETWORK_REGION_MAX ];
28 u32 region_flags;
29 f64 chat_time;
30
31 /* ui */
32 u32 medals[3];
33 f32 opacity;
34
35 u32 down_bytes;
36 f32 down_kbs;
37
38 struct player_effects_data effect_data;
39 bool render_glider;
40 }
41 list[ NETWORK_MAX_PLAYERS ];
42
43 struct interp_buffer {
44 /* collect the most recent 6 frames of animation data */
45 struct interp_frame {
46 int active;
47 f64 timestamp;
48 enum player_subsystem subsystem;
49
50 u8 flags;
51 u16 boundary_hash;
52
53 union interp_animdata {
54 /* these aren't accessed directly, just used to take the
55 * max(sizeof) all systems */
56 struct player_skate_animator __skate;
57 struct player_walk_animator __walk;
58 struct player_dead_animator __dead;
59 struct player_basic_info_animator __basic;
60 }
61 data;
62
63 struct remote_glider_animator data_glider;
64 }
65 frames[ NETWORK_BUFFERFRAMES ];
66
67 f64 t;
68 }
69 interp_data[ NETWORK_MAX_PLAYERS ];
70
71 struct net_sfx sfx_queue[ NETWORK_SFX_QUEUE_LENGTH ];
72
73 m4x3f *final_mtx,
74 *glider_mtx;
75 struct player_board_pose board_poses[ NETWORK_MAX_PLAYERS ];
76
77 u32 up_bytes;
78 f32 up_kbs, down_kbs;
79 f64 last_data_measurement;
80
81 int chatting;
82 char chat_buffer[ NETWORK_MAX_CHAT ], chat_message[ NETWORK_MAX_CHAT ];
83 f64 chat_time;
84 }
85 static netplayers;
86
87 static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg );
88 static void remote_player_debug_update(void);
89 static void remote_player_send_playerframe(void);
90 static void animate_remote_player( u32 index );
91 static void render_remote_players( world_instance *world, camera *cam );
92 static void relink_all_remote_player_worlds(void);
93 static void player_remote_update_friendflags( struct network_player *remote );
94
95 #endif /* PLAYER_REMOTE_H */