diff options
Diffstat (limited to 'client/src/state.rs')
-rw-r--r-- | client/src/state.rs | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/client/src/state.rs b/client/src/state.rs index e59691a..560c8bd 100644 --- a/client/src/state.rs +++ b/client/src/state.rs @@ -41,6 +41,7 @@ pub struct State<'a> { pub prefab_index_res_loaded: Option<Resource<PrefabIndex>>, pub prefab_index_res: Option<Resource<PrefabIndex>>, pub avatar_ob: Option<Object>, + pub last_position_tx: Instant, } pub struct InputState { @@ -73,6 +74,7 @@ impl<'a> State<'a> { prefab_index_res_loaded: None, avatar_ob: None, prefab_index: PrefabIndex::default().into(), + last_position_tx: Instant::now(), }) } pub fn draw(&mut self) { @@ -146,9 +148,11 @@ impl<'a> State<'a> { 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()) + if Some(ob) != self.avatar_ob.as_ref() { + if let Some(obdata) = self.tree.objects.get(ob) { + self.audio + .incoming_packet(ob.0, obdata.pos.into(), data.0.clone()) + } } } _ => (), @@ -169,11 +173,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(), - ))?; + if self.last_position_tx.elapsed().as_secs_f32() > 0.1 { + self.network.packet_send.send(Packet::Position( + ob, + self.camera.position().into(), + self.camera.rotation().into(), + ))?; + self.last_position_tx = Instant::now(); + } while let Some(p) = self.audio.pop_output() { self.network.packet_send.send(Packet::Sound(ob, Data(p)))?; } |