summaryrefslogtreecommitdiff
path: root/client/src/state.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-15 14:27:43 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-15 14:27:43 +0100
commitd465b5e9edfa3147af900414a11484b3feb50337 (patch)
treee86649607ca5c9e0a8f807e1d4c750ff347bb31f /client/src/state.rs
parent18f863bcd7e68ba18d3e9ce7a1899a4245f364de (diff)
downloadweareserver-d465b5e9edfa3147af900414a11484b3feb50337.tar
weareserver-d465b5e9edfa3147af900414a11484b3feb50337.tar.bz2
weareserver-d465b5e9edfa3147af900414a11484b3feb50337.tar.zst
multi-channel audio buffering
Diffstat (limited to 'client/src/state.rs')
-rw-r--r--client/src/state.rs32
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}");