use super::*;
#[derive(Resource, Default)]
pub struct SpectatorChat(pub Option<String>);
impl SpectatorChat {
pub fn open(&self) -> bool {
self.0.is_some()
}
}
pub fn spectator_chat_input(
mut keys: ResMut<ButtonInput<KeyCode>>,
caps: Res<crate::app::keycaps::KeyCaps>,
mut typed: MessageReader<bevy::input::keyboard::KeyboardInput>,
settings: Res<crate::app::settings::GameSettings>,
mut chat: ResMut<SpectatorChat>,
mut online: ResMut<Online>,
) {
if !is_spectating(&online) {
chat.0 = None;
typed.clear();
return;
}
let Some(line) = &mut chat.0 else {
if caps.just_pressed(&keys, 'T') {
chat.0 = Some(String::new());
typed.clear();
}
return;
};
let said = crate::app::lobby::type_a_line(&mut typed, line);
if keys.just_pressed(KeyCode::Escape) {
chat.0 = None;
crate::app::menu_ui::spend(&mut keys, &crate::app::menu_ui::CLOSERS);
return;
}
let Some(said) = said else {
return;
};
chat.0 = None;
crate::app::menu_ui::spend(&mut keys, &crate::app::menu_ui::CLOSERS);
if said.trim().is_empty() {
return;
}
let me = settings.names[0].clone();
if me.is_empty() {
return;
}
if let Some(session) = &mut online.0 {
session.transport.send(NetMsg::chat(&me, &said));
session.heard.push((me, said));
}
}