use bevy_replicon::prelude::{AuthorizedClient, PriorityMap}; use crate::prelude::*; use crate::server::ConnectedNetworkEntity; use crate::shared::attachment::Parts; use crate::shared::ecs::{Part, Player}; const OTHER_SHIP_PART_PRIORITY: f32 = 0.25; pub fn replication_priority_plugin(app: &mut App) { app.add_systems(Update, prioritize_own_ship_parts); } fn prioritize_own_ship_parts( mut clients: Query<(&ConnectedNetworkEntity, &mut PriorityMap), With>, hearties: Query, With>, parts: Query>, ) { for (connected, mut priority) in &mut clients { let own_parts = hearties.get(connected.game_entity).ok().flatten(); for part in &parts { let is_own = part == connected.game_entity || own_parts.is_some_and(|owned| owned.contains(&part)); if is_own { priority.remove(&part); } else { priority.insert(part, OTHER_SHIP_PART_PRIORITY); } } } }