diff options
Diffstat (limited to 'client/src/state.rs')
-rw-r--r-- | client/src/state.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/client/src/state.rs b/client/src/state.rs index c39e13a..eec9fde 100644 --- a/client/src/state.rs +++ b/client/src/state.rs @@ -17,6 +17,7 @@ use crate::{ audio::Audio, camera::Camera, + chat::Chat, download::Downloader, interfaces::{InterfaceData, ui_selector}, network::Network, @@ -25,7 +26,11 @@ use crate::{ use anyhow::{Context, Result}; use glam::{Vec2, Vec3}; use log::{info, warn}; -use std::{net::TcpStream, sync::Arc, time::Instant}; +use std::{ + net::TcpStream, + sync::{Arc, Mutex}, + time::Instant, +}; use weareshared::{ packets::{Data, Object, Packet, Resource}, resources::PrefabIndex, @@ -47,6 +52,7 @@ pub struct State<'a> { pub prefab_index_res: Option<Resource<PrefabIndex>>, pub avatar_ob: Option<Object>, pub last_position_tx: Instant, + pub chat: Arc<Mutex<Chat>>, } pub struct InputState { @@ -80,6 +86,7 @@ impl<'a> State<'a> { avatar_ob: None, prefab_index: PrefabIndex::default().into(), last_position_tx: Instant::now(), + chat: Arc::new(Mutex::new(Chat::new())), }) } pub fn draw(&mut self) { @@ -110,6 +117,7 @@ impl<'a> State<'a> { render_timing: self.renderer.timing_submit.clone(), adapter_info: self.renderer.adapter_info.clone(), graphics_config: self.renderer.config_update.clone(), + chat: self.chat.clone(), }); self.renderer .ui_renderer @@ -127,6 +135,7 @@ impl<'a> State<'a> { for p in self.network.packet_recv.try_iter() { self.downloader.packet(&p)?; self.tree.packet(&p); + match &p { Packet::PrefabIndex(res) => self.prefab_index_res = Some(res.to_owned()), Packet::Sound(ob, data) => { @@ -137,9 +146,13 @@ impl<'a> State<'a> { } } } + Packet::Chat(ob, message) => { + self.chat.lock().unwrap().incoming(*ob, message.0.clone()); + } _ => (), } } + self.downloader .update(&self.network) .context("downloader state")?; @@ -155,6 +168,7 @@ impl<'a> State<'a> { } if let Some(ob) = self.avatar_ob { + self.chat.lock().unwrap().update(ob, &self.network); if self.last_position_tx.elapsed().as_secs_f32() > 0.1 { self.network.packet_send.send(Packet::Position( ob, |