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