diff options
Diffstat (limited to 'client/src/state.rs')
-rw-r--r-- | client/src/state.rs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/client/src/state.rs b/client/src/state.rs index c3d8eb1..e59691a 100644 --- a/client/src/state.rs +++ b/client/src/state.rs @@ -22,7 +22,7 @@ use glam::{Vec2, Vec3}; use log::{info, warn}; use std::{net::TcpStream, sync::Arc, time::Instant}; use weareshared::{ - packets::{Object, Packet, Resource}, + packets::{Data, Object, Packet, Resource}, resources::PrefabIndex, store::ResourceStore, tree::SceneTree, @@ -37,7 +37,6 @@ pub struct State<'a> { pub camera: Camera, pub input_state: InputState, pub audio: Audio, - pub prefab_index: Arc<PrefabIndex>, pub prefab_index_res_loaded: Option<Resource<PrefabIndex>>, pub prefab_index_res: Option<Resource<PrefabIndex>>, @@ -137,8 +136,6 @@ impl<'a> State<'a> { let dt = (now - self.input_state.time).as_secs_f32(); self.input_state.time = now; - self.audio.update(); - self.camera .update(self.input_state.move_dir, self.input_state.mouse_acc, dt); self.input_state.mouse_acc = Vec2::ZERO; @@ -146,8 +143,15 @@ impl<'a> State<'a> { for p in self.network.packet_recv.try_iter() { self.downloader.packet(&p)?; self.tree.packet(&p); - if let Packet::PrefabIndex(res) = &p { - self.prefab_index_res = Some(res.to_owned()); + match &p { + Packet::PrefabIndex(res) => self.prefab_index_res = Some(res.to_owned()), + Packet::Sound(ob, data) => { + if let Some(obdata) = self.tree.objects.get(ob) { + self.audio + .incoming_packet(ob.0, obdata.pos.into(), data.0.clone()) + } + } + _ => (), } } self.downloader @@ -165,14 +169,14 @@ impl<'a> State<'a> { } if let Some(ob) = self.avatar_ob { - self.network - .packet_send - .send(Packet::Position( - ob, - self.camera.position().into(), - self.camera.rotation().into(), - )) - .unwrap(); + self.network.packet_send.send(Packet::Position( + ob, + self.camera.position().into(), + self.camera.rotation().into(), + ))?; + while let Some(p) = self.audio.pop_output() { + self.network.packet_send.send(Packet::Sound(ob, Data(p)))?; + } } else { if let Some(res) = self.prefab_index.0.get("avatar_test") { info!("found avatar resource {res}"); |