From 06693136b6c7d9ef3e911b2b31b73fa68eff7539 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Mon, 22 Apr 2019 02:38:29 +0200 Subject: [PATCH] Fixed names, debug and notify Former-commit-id: f58dedf7c4eb9b284982588fc6b19bbe3edb0391 --- client/src/lib.rs | 8 ++++---- common/src/msg/server.rs | 2 +- common/src/terrain/biome.rs | 2 +- common/src/terrain/mod.rs | 4 ++-- common/src/volumes/chunk.rs | 2 +- server/src/client.rs | 21 +++++++++++++++++++-- server/src/lib.rs | 12 ++++++------ 7 files changed, 34 insertions(+), 17 deletions(-) diff --git a/client/src/lib.rs b/client/src/lib.rs index 6d2dbe996a..d35f2408de 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -59,11 +59,11 @@ impl Client { let mut postbox = PostBox::to(addr)?; // Wait for initial sync - let (state, player_entity) = match postbox.next_message() { + let (state, entity) = match postbox.next_message() { Some(ServerMsg::InitialSync { ecs_state, entity_uid }) => { let mut state = State::from_state_package(ecs_state); - let player_entity = state.ecs().entity_from_uid(entity_uid).ok_or(Error::ServerWentMad)?; - (state, player_entity) + let entity = state.ecs().entity_from_uid(entity_uid).ok_or(Error::ServerWentMad)?; + (state, entity) }, _ => return Err(Error::ServerWentMad), }; @@ -79,7 +79,7 @@ impl Client { tick: 0, state, - entity: player_entity, + entity, view_distance, pending_chunks: HashSet::new(), diff --git a/common/src/msg/server.rs b/common/src/msg/server.rs index 60f4498a90..400cb38929 100644 --- a/common/src/msg/server.rs +++ b/common/src/msg/server.rs @@ -12,7 +12,7 @@ pub enum RequestStateError { Impossible, } -#[derive(Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub enum ServerMsg { InitialSync { ecs_state: sphynx::StatePackage, diff --git a/common/src/terrain/biome.rs b/common/src/terrain/biome.rs index a177c44158..bb78a0ca1b 100644 --- a/common/src/terrain/biome.rs +++ b/common/src/terrain/biome.rs @@ -1,6 +1,6 @@ use serde_derive::{Serialize, Deserialize}; -#[derive(Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub enum BiomeKind { Void, Grassland, diff --git a/common/src/terrain/mod.rs b/common/src/terrain/mod.rs index 97008cde50..aa95927f1e 100644 --- a/common/src/terrain/mod.rs +++ b/common/src/terrain/mod.rs @@ -19,7 +19,7 @@ use crate::{ // TerrainChunkSize -#[derive(Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct TerrainChunkSize; impl VolSize for TerrainChunkSize { @@ -28,7 +28,7 @@ impl VolSize for TerrainChunkSize { // TerrainChunkMeta -#[derive(Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct TerrainChunkMeta { biome: BiomeKind, } diff --git a/common/src/volumes/chunk.rs b/common/src/volumes/chunk.rs index 1c99301b63..bf45432af9 100644 --- a/common/src/volumes/chunk.rs +++ b/common/src/volumes/chunk.rs @@ -24,7 +24,7 @@ pub enum ChunkErr { // V = Voxel // S = Size (replace when const generics are a thing) // M = Metadata -#[derive(Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Chunk { vox: Vec, meta: M, diff --git a/server/src/client.rs b/server/src/client.rs index c40b54cbef..60547cbd73 100644 --- a/server/src/client.rs +++ b/server/src/client.rs @@ -58,7 +58,7 @@ impl Clients { } } - pub fn notify_connected(&mut self, msg: ServerMsg) { + pub fn notify_registered(&mut self, msg: ServerMsg) { for client in self.clients.values_mut() { if client.client_state != ClientState::Connected { client.notify(msg.clone()); @@ -66,11 +66,28 @@ impl Clients { } } - pub fn notify_connected_except(&mut self, except_entity: EcsEntity, msg: ServerMsg) { + pub fn notify_ingame(&mut self, msg: ServerMsg) { + for client in self.clients.values_mut() { + if client.client_state == ClientState::Spectator || client.client_state == ClientState::Character { + client.notify(msg.clone()); + } + } + } + + pub fn notify_registered_except(&mut self, except_entity: EcsEntity, msg: ServerMsg) { for (entity, client) in self.clients.iter_mut() { if client.client_state != ClientState::Connected && *entity != except_entity { client.notify(msg.clone()); } } } + + pub fn notify_ingame_except(&mut self, except_entity: EcsEntity, msg: ServerMsg) { + for (entity, client) in self.clients.iter_mut() { + if (client.client_state == ClientState::Spectator || client.client_state == ClientState::Character) + && *entity != except_entity { + client.notify(msg.clone()); + } + } + } } diff --git a/server/src/lib.rs b/server/src/lib.rs index 5a7be9eec7..0dace0c545 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -349,7 +349,7 @@ impl Server { let argv = String::from(&msg[1..]); self.process_chat_cmd(entity, argv); } else { - self.clients.notify_connected(ServerMsg::Chat( + self.clients.notify_registered(ServerMsg::Chat( match self .state .ecs() @@ -410,7 +410,7 @@ impl Server { /// Sync client states with the most up to date information fn sync_clients(&mut self) { // Sync 'logical' state using Sphynx - self.clients.notify_connected(ServerMsg::EcsSync(self.state.ecs_mut().next_sync_package())); + self.clients.notify_registered(ServerMsg::EcsSync(self.state.ecs_mut().next_sync_package())); // Sync 'physical' state for (entity, &uid, &pos, &vel, &dir, force_update) in ( @@ -429,8 +429,8 @@ impl Server { }; match force_update { - Some(_) => self.clients.notify_connected(msg), - None => self.clients.notify_connected_except(entity, msg), + Some(_) => self.clients.notify_ingame(msg), + None => self.clients.notify_ingame_except(entity, msg), } } @@ -445,7 +445,7 @@ impl Server { continue; } - self.clients.notify_connected_except(entity, ServerMsg::EntityAnimation { + self.clients.notify_ingame_except(entity, ServerMsg::EntityAnimation { entity: uid.into(), animation_history, }); @@ -499,6 +499,6 @@ impl Server { impl Drop for Server { fn drop(&mut self) { - self.clients.notify_connected(ServerMsg::Shutdown); + self.clients.notify_registered(ServerMsg::Shutdown); } }