use bevy_connect::events::MessageReceivedEvent;
use bevy_ecs::message::{MessageReader, MessageWriter};
use crate::{
InitialSyncFinished,
commands::{
ComponentNameUpdated, ComponentUpdated, CreateEntity, DeleteEntity, ReparentEntity,
UpdateStandardMaterial,
},
logging::{Who, log_message_received},
};
use super::{Commands, Message};
pub(crate) fn process_messages(
mut commands: Commands,
mut event_sync_finished: MessageWriter<InitialSyncFinished>,
mut events: MessageReader<MessageReceivedEvent<Message>>,
) {
for e in events.read() {
client_received_a_message(e.message.as_ref(), &mut commands, &mut event_sync_finished);
}
}
#[allow(clippy::too_many_arguments)]
fn client_received_a_message(
msg: &Message,
cmd: &mut Commands,
event_sync_finished: &mut MessageWriter<InitialSyncFinished>,
) {
log_message_received(Who::Client, msg);
match msg {
Message::EntitySpawn { uuid } => {
cmd.queue(CreateEntity::from(*uuid));
}
Message::EntityParented {
entity_uuid: entity_id,
parent_uuid: parent_id,
} => {
cmd.queue(ReparentEntity::from((*entity_id, *parent_id)));
}
Message::EntityDelete { uuid } => {
cmd.queue(DeleteEntity::from(*uuid));
}
Message::ComponentUpdated { uuid, name, data } => {
cmd.queue(ComponentUpdated::new(*uuid, name.clone(), data.clone()));
}
Message::StandardMaterialUpdated { uuid, material } => {
cmd.queue(UpdateStandardMaterial::from((*uuid, material.clone())));
}
Message::RequestInitialSync { from_uuid: _ } => {}
Message::FinishedInitialSync => {
event_sync_finished.write(InitialSyncFinished);
}
Message::ComponentNameUpdated { uuid, data } => {
cmd.queue(ComponentNameUpdated::new(*uuid, data.clone()));
}
}
}