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 = 1.0;
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<AuthorizedClient>>,
hearties: Query<Option<&Parts>, With<Player>>,
parts: Query<Entity, With<Part>>,
) {
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);
}
}
}
}