+ remote_player_world_gui( ctx, pv, localplayer.rb.co, NULL );
+ ui_flush( ctx, k_ui_shader_colour, NULL );
+}
+
+static void chat_escape( ui_context *ctx )
+{
+ netplayers.chatting = -1;
+}
+
+static void chat_enter( ui_context *ctx, char *buf, u32 len ){
+ vg_strncpy( buf, netplayers.chat_message, NETWORK_MAX_CHAT,
+ k_strncpy_always_add_null );
+ netplayers.chatting = -1;
+ netplayers.chat_time = vg.time_real;
+ chat_send_message( buf );
+}
+
+void remote_players_chat_imgui( ui_context *ctx )
+{
+ if( netplayers.chatting == 1 )
+ {
+ ui_rect box = { 0, 0, 400, 40 },
+ window = { 0, 0, vg.window_x, vg.window_y };
+ ui_rect_center( window, box );
+
+ struct ui_textbox_callbacks callbacks =
+ {
+ .enter = chat_enter,
+ .escape = chat_escape
+ };
+
+ ui_textbox( ctx, box, NULL,
+ netplayers.chat_buffer, NETWORK_MAX_CHAT, 1,
+ UI_TEXTBOX_AUTOFOCUS, &callbacks );
+ }
+ else
+ {
+ if( netplayers.chatting == -1 )
+ {
+ netplayers.chatting = 0;
+ srinput.state = k_input_state_resume;
+ }
+ else
+ {
+ if( (skaterift.activity == k_skaterift_default) &&
+ button_down( k_srbind_chat ) ){
+ netplayers.chatting = 1;
+ netplayers.chat_buffer[0] = '\0';
+ srinput.state = k_input_state_pause;
+ }
+ }
+ }