use std::collections::HashMap; use bevy_ecs::prelude::*; use proxisim_models::{ bundle::{ Id, Name, player::{Attacker, Player}, weapon::Weapon, }, dto::metrics::EntityInfo, }; use crate::Stages; #[derive(Resource, Default)] pub struct EntityRegistry(pub HashMap); fn read_entities( player_q: Query<(Entity, &Name, &Id, Has), With>, weapon_q: Query<(Entity, &ChildOf, &Name, &Id), With>, mut registry: ResMut, ) { for (player, name, id, is_attacker) in player_q.iter() { registry.0.insert( player, EntityInfo::Player { name: name.0.clone(), id: id.0, is_attacker, }, ); } for (weapon, player, name, id) in weapon_q.iter() { let (_, _, player_id, _) = player_q.get(player.parent()).unwrap(); registry.0.insert( weapon, EntityInfo::Weapon { name: name.0.clone(), owner: player_id.0, id: id.0, }, ); } } pub(crate) fn configure(stages: &mut Stages) { stages.world.init_resource::(); stages.snapshot.add_systems(read_entities); }