summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/src/camera.rs2
-rw-r--r--client/src/render/scene/mod.rs17
-rw-r--r--server/src/network.rs13
3 files changed, 22 insertions, 10 deletions
diff --git a/client/src/camera.rs b/client/src/camera.rs
index 78ce240..5e71519 100644
--- a/client/src/camera.rs
+++ b/client/src/camera.rs
@@ -39,7 +39,7 @@ impl Camera {
}
}
pub fn update(&mut self, input_move: Vec3, input_rot: Vec2, dt: f32) {
- let speed = 3.;
+ let speed = 5.;
let vel_local = vec3(input_move.z, input_move.y, -input_move.x) * dt * speed;
self.pos += self.rotation_mat() * vel_local;
self.rot.x += input_rot.x * -0.002;
diff --git a/client/src/render/scene/mod.rs b/client/src/render/scene/mod.rs
index 569f3b9..e0af292 100644
--- a/client/src/render/scene/mod.rs
+++ b/client/src/render/scene/mod.rs
@@ -64,7 +64,7 @@ pub struct ScenePreparer {
generated_tangent_buffers: DemandMap<TangentBufferSpec, Arc<Buffer>>,
generated_normal_buffers: DemandMap<NormalBufferSpec, Arc<Buffer>>,
generated_texcoord_buffers: DemandMap<TexcoordBufferSpec, Arc<Buffer>>,
- mesh_parts: DemandMap<Resource<MeshPart>, Arc<RMeshPart>>,
+ mesh_parts: DemandMap<Resource<MeshPart>, Result<Arc<RMeshPart>, String>>,
materials: DemandMap<Material, Arc<BindGroup>>,
pipelines: DemandMap<PipelineSpec, Arc<RenderPipeline>>,
mip_generation_pipelines: DemandMap<TextureFormat, Arc<MipGenerationPipeline>>,
@@ -193,12 +193,16 @@ impl ScenePreparer {
for pres in self.prefabs.needed() {
if let Some(prefab) = self.downloader.try_get(pres.clone())? {
let mut rprefab = RPrefab(Vec::new());
+ let mut done_or_failed = 0;
for (aff, partres) in &prefab.mesh {
if let Some(part) = self.mesh_parts.try_get(partres.clone()) {
- rprefab.0.push((*aff, part.clone()));
+ if let Ok(part) = part.clone() {
+ rprefab.0.push((*aff, part));
+ }
+ done_or_failed += 1;
}
}
- if rprefab.0.len() == prefab.mesh.len() {
+ if done_or_failed == prefab.mesh.len() {
self.prefabs.insert(pres.clone(), Arc::new(rprefab), 0);
debug!("prefab created ({pres})");
num_done += 1;
@@ -383,7 +387,7 @@ impl ScenePreparer {
debug!("part created (took {:?}) {pres}", start.elapsed());
self.mesh_parts.insert(
pres,
- Arc::new(RMeshPart {
+ Ok(Arc::new(RMeshPart {
pipeline,
index_count,
index,
@@ -398,11 +402,14 @@ impl ScenePreparer {
material,
double_sided,
joint_uniform,
- }),
+ })),
0,
);
num_done += 1;
}
+ } else {
+ self.mesh_parts
+ .insert(pres, Err("index or positions missing".to_string()), 0);
}
}
}
diff --git a/server/src/network.rs b/server/src/network.rs
index ec65218..19498c5 100644
--- a/server/src/network.rs
+++ b/server/src/network.rs
@@ -30,11 +30,13 @@ use std::{
use weareshared::{helper::ReadWrite, packets::Packet, tree::PacketSink};
type Conns = Arc<Mutex<HashMap<u128, (SyncSender<Arc<Vec<u8>>>, Option<SocketAddr>)>>>;
+
pub struct ServerNetwork {
conns: Conns,
udp_sock: Arc<UdpSocket>,
pub recv: Receiver<(u128, Packet)>,
}
+
impl ServerNetwork {
pub fn new(addr: SocketAddr) -> Result<Self> {
let (recv_tx, recv_rx) = channel();
@@ -118,10 +120,13 @@ fn serve_udp(udp_sock: Arc<UdpSocket>, conns: Conns, recv_tx: Sender<(u128, Pack
if let Packet::Connect(id) = &packet {
if let Some((_send, udp_addr)) = conns.lock().unwrap().get_mut(id) {
*udp_addr = Some(addr);
- cstates.insert(addr, CState {
- conn_id: *id,
- last_ack: Instant::now(),
- });
+ cstates.insert(
+ addr,
+ CState {
+ conn_id: *id,
+ last_ack: Instant::now(),
+ },
+ );
}
} else if let Some(conn) = cstates.get(&addr) {
let cid = conn.conn_id;