use std::net::SocketAddr;
use bevy::prelude::*;
use bevy_rapier2d::prelude::Velocity;
use crate::{module::component::{Attach, PartFlags}, planet::PlanetType, ws::WsEvent, Packet};
use super::component::Player;
pub fn send_message(
player_query: &Query<(Entity, &mut Player, &Transform, &Velocity,
&mut Attach, &mut PartFlags),
Without<PlanetType>,
>,
from: &SocketAddr,
event_queue: &mut Vec<WsEvent>,
target: Option<String>,
content: String,
) {
// find our player
let mut player = None;
for (_, q_player, _, _, _, _) in player_query.iter() {
if q_player.addr == *from {
player = Some(q_player);
}
}
let player = player.unwrap();
if let Some(target_username) = target {
let mut target_player = None;
for (_, q_player, _, _, _, _) in player_query.iter() {
if q_player.username == target_username {
target_player = Some(q_player);
}
}
let target_player = target_player.unwrap();
let packet = Packet::Message {
message_type: crate::packet::MessageType::Direct,
actor: player.username.clone(),
content,
};
event_queue.push(WsEvent::Send {
to: target_player.addr,
message: packet.clone().into(),
});
event_queue.push(WsEvent::Send {
to: *from,
message: packet.into(),
});
} else {
// send to general chat
let packet = Packet::Message {
message_type: crate::packet::MessageType::Chat,
actor: player.username.clone(),
content,
};
event_queue.push(WsEvent::Broadcast {
message: packet.into(),
});
}
}