Prettify server/sys/msg/register.rs

This commit is contained in:
juliancoffee 2021-07-30 23:27:25 +03:00
parent 1efc3188ef
commit d9e2d501cd

View File

@ -37,6 +37,9 @@ pub struct ReadData<'a> {
uids: ReadStorage<'a, Uid>, uids: ReadStorage<'a, Uid>,
clients: ReadStorage<'a, Client>, clients: ReadStorage<'a, Client>,
server_event_bus: Read<'a, EventBus<ServerEvent>>, server_event_bus: Read<'a, EventBus<ServerEvent>>,
player_metrics: ReadExpect<'a, PlayerMetrics>,
settings: ReadExpect<'a, Settings>,
editable_settings: ReadExpect<'a, EditableSettings>,
_healths: ReadStorage<'a, Health>, // used by plugin feature _healths: ReadStorage<'a, Health>, // used by plugin feature
_plugin_mgr: ReadPlugin<'a>, // used by plugin feature _plugin_mgr: ReadPlugin<'a>, // used by plugin feature
_uid_allocator: Read<'a, UidAllocator>, // used by plugin feature _uid_allocator: Read<'a, UidAllocator>, // used by plugin feature
@ -49,9 +52,6 @@ impl<'a> System<'a> for Sys {
#[allow(clippy::type_complexity)] #[allow(clippy::type_complexity)]
type SystemData = ( type SystemData = (
ReadData<'a>, ReadData<'a>,
ReadExpect<'a, PlayerMetrics>,
ReadExpect<'a, Settings>,
ReadExpect<'a, EditableSettings>,
WriteStorage<'a, Player>, WriteStorage<'a, Player>,
WriteStorage<'a, Admin>, WriteStorage<'a, Admin>,
WriteStorage<'a, PendingLogin>, WriteStorage<'a, PendingLogin>,
@ -66,9 +66,6 @@ impl<'a> System<'a> for Sys {
_job: &mut Job<Self>, _job: &mut Job<Self>,
( (
read_data, read_data,
player_metrics,
settings,
editable_settings,
mut players, mut players,
mut admins, mut admins,
mut pending_logins, mut pending_logins,
@ -129,9 +126,9 @@ impl<'a> System<'a> for Sys {
&ecs_world, &ecs_world,
#[cfg(feature = "plugins")] #[cfg(feature = "plugins")]
&read_data._plugin_mgr, &read_data._plugin_mgr,
&*editable_settings.admins, &*read_data.editable_settings.admins,
&*editable_settings.whitelist, &*read_data.editable_settings.whitelist,
&*editable_settings.banlist, &*read_data.editable_settings.banlist,
) { ) {
None => return Ok(()), None => return Ok(()),
Some(r) => { Some(r) => {
@ -176,8 +173,8 @@ impl<'a> System<'a> for Sys {
return Ok(()); return Ok(());
} }
let player = Player::new(username, settings.battle_mode, uuid); let player = Player::new(username, read_data.settings.battle_mode, uuid);
let admin = editable_settings.admins.get(&uuid); let admin = read_data.editable_settings.admins.get(&uuid);
if !player.is_valid() { if !player.is_valid() {
// Invalid player // Invalid player
@ -188,7 +185,7 @@ impl<'a> System<'a> for Sys {
if let Ok(StorageEntry::Vacant(v)) = players.entry(entity) { if let Ok(StorageEntry::Vacant(v)) = players.entry(entity) {
// Add Player component to this client, if the entity exists. // Add Player component to this client, if the entity exists.
v.insert(player); v.insert(player);
player_metrics.players_connected.inc(); read_data.player_metrics.players_connected.inc();
// Give the Admin component to the player if their name exists in // Give the Admin component to the player if their name exists in
// admin list // admin list
@ -225,21 +222,26 @@ impl<'a> System<'a> for Sys {
// Handle new players. // Handle new players.
// Tell all clients to add them to the player list. // Tell all clients to add them to the player list.
for entity in new_players { for entity in new_players {
if let (Some(uid), Some(player)) = (read_data.uids.get(entity), players.get(entity)) { let player_info = read_data.uids.get(entity).zip(players.get(entity));
let mut lazy_msg = None; let (uid, player) = if let Some((uid, player)) = player_info {
for (_, client) in (&players, &read_data.clients).join() { (uid, player)
if lazy_msg.is_none() { } else {
lazy_msg = Some(client.prepare(ServerGeneral::PlayerListUpdate( continue;
PlayerListUpdate::Add(*uid, PlayerInfo { };
player_alias: player.alias.clone(),
is_online: true, let mut lazy_msg = None;
is_moderator: admins.get(entity).is_some(), for (_, client) in (&players, &read_data.clients).join() {
character: None, // new players will be on character select. if lazy_msg.is_none() {
}), lazy_msg = Some(client.prepare(ServerGeneral::PlayerListUpdate(
))); PlayerListUpdate::Add(*uid, PlayerInfo {
} player_alias: player.alias.clone(),
lazy_msg.as_ref().map(|msg| client.send_prepared(msg)); is_online: true,
is_moderator: admins.get(entity).is_some(),
character: None, // new players will be on character select.
}),
)));
} }
lazy_msg.as_ref().map(|msg| client.send_prepared(msg));
} }
} }
} }