summaryrefslogtreecommitdiff
path: root/client/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/state.rs')
-rw-r--r--client/src/state.rs16
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,