use rig_ecs::agent::{Agent, AgentId, SpawnedBy};
use rig_ecs::prelude::*;
use rig_memory::main_order;
pub type MainAgentQuery<'w, 's> =
Query<'w, 's, (Entity, &'static AgentId, Has<SpawnedBy>), With<Agent>>;
pub fn main_agent(agents: &MainAgentQuery) -> Option<Entity> {
agents
.iter()
.min_by(|a, b| main_order(a.2, &a.1.0).cmp(&main_order(b.2, &b.1.0)))
.map(|(entity, ..)| entity)
}
#[derive(Resource, Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct ShownAgent(pub Option<Entity>);
pub(crate) fn keep_shown(mut shown: ResMut<ShownAgent>, agents: MainAgentQuery) {
if shown.0.is_some_and(|agent| agents.contains(agent)) {
return;
}
shown.set_if_neq(ShownAgent(main_agent(&agents)));
}