use bevy::prelude::*; use lightyear::prelude::{Connected, MessageSender}; use shared::{ GameState, global_observer, protocol::{TbMapEntityId, channels::UnorderedReliableChannel, messages::DespawnTbMapEntity}, }; pub fn plugin(app: &mut App) { app.register_type::(); app.init_resource::(); app.add_systems( OnEnter(GameState::MapLoading), |mut cache: ResMut| cache.0.clear(), ); global_observer!(app, add_despawned_entities_to_cache); global_observer!(app, send_new_client_despawned_cache); } fn add_despawned_entities_to_cache( trigger: Trigger, id: Query<&TbMapEntityId>, mut cache: ResMut, ) { cache.0.push(id.get(trigger.target()).unwrap().id); } #[derive(Default, Resource, Reflect)] #[reflect(Resource)] pub struct DespawnedTbEntityCache(pub Vec); fn send_new_client_despawned_cache( trigger: Trigger, cache: Res, mut send: Query<&mut MessageSender>, ) { let mut send = send.get_mut(trigger.target()).unwrap(); for &id in cache.0.iter() { send.send::(DespawnTbMapEntity(id)); } }